最近公司要求搭建一个平台用于管理svn权限,在综合考虑之后采用了svnadmin,这个平台的详细介绍请查看https://code.google.com/p/jsvnadmin

本文主要整合了网上的部分资料,以及svnadmin平台说明文档,主要引用资料链接如下:

http://blog.csdn.net/yan19880901/article/details/8489873

http://www.tuicool.com/articles/RfuqYv


新手第一次写博客,希望大家一起多多交流。

下列为所需软件列表:

apr-1.5.0.tar.bz2 

apr-util-1.5.3.tar.bz2 

zlib-1.2.8.tar.gz 

sqlite-autoconf-3080200.tar.gz 

pcre-8.34.tar.gz 

httpd-2.4.9.tar.gz 

subversion-1.8.9.tar.bz2 

sqlite-amalgamation-3080403.zip 

php-5.5.6.tar.gz 

svnadmin-3.0.4.zip

mysql-5.5.25.tar.gz

 

下载地址:

wget http://archive.apache.org/dist/apr/apr-1.5.0.tar.bz2

wget ftp://ftp.mirrorservice.org/sites/ftp.apache.org/apr/apr-util-1.5.3.tar.bz2

wget http://zlib.net/zlib-1.2.8.tar.gz

wget http://www.sqlite.org/2013/sqlite-autoconf-3080200.tar.gz

wget http://ftp.exim.llorien.org/pcre/pcre-8.34.tar.gz

wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.9.tar.gz

wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.9.tar.gz

wget http://www.sqlite.org/2014/sqlite-amalgamation-3080403.zip

wget http://cn2.php.net/distributions/php-5.5.6.tar.gz

https://code.google.com/p/jsvnadmin/downloads/detail?name=svnadmin-3.0.zip&can=2&q=

wget http://downloads.skysql.com/archives/mysql-5.5/mysql-5.5.25.tar.gz

 

系统编译环境环境默认为已健全,若编译过程中出现依赖库缺失,请按照报错提示进行环境搭建补全。默认下载后的源码包存放位置为/opt/svnsoft

#接下来安装基础依赖软件包apr   apr-util   zlib   sqlite-autoconf   openssl   pcre 

#------------------------------------------------------------------ 

一、安装系统环境

#安装apr

 

cd /opt/svnsoft 

tar -xvf apr-1.5.0.tar.bz2 

cd apr-1.5.0 

./configure --prefix=/usr/local/apr 

make && make install 

#安装apr-util

 

cd /opt/svnsoft

tar -xvf apr-util-1.5.3.tar.bz2 

cd apr-util-1.5.3 

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 

make && make install 

#安装zlib

 

cd /opt/svnsoft 

tar -xvf zlib-1.2.8.tar.gz 

cd zlib-1.2.8 

./configure --prefix=/usr/local/zlib 

make && make install 

#安装sqlite

 

cd /opt/svnsoft 

tar -xvf sqlite-autoconf-3080200.tar.gz 

cd sqlite-autoconf-3080200 

./configure --prefix=/usr/local/sqlite-autoconf 

make && make install 

#安装openssl

 

cd /opt/svnsoft 

tar zxf openssl-1.0.1e.tar.gz 

cd openssl-1.0.1e 

./config --prefix=/usr/local/openssl --shared 

make && make install 

 #安装pcre

 

cd /opt/svnsoft

tar -xvf pcre-8.34.tar.gz 

cd pcre-8.34 

./configure --prefix=/usr/local/pcre 

make && make install 

  

#安装pcre是异常报错configure: error: You need a C++ compiler for C++ support 

#解决办法

#yum install -y gcc gcc-c++

 

二、安装Apache 

#------------------------------------------------------------------

 

cd /opt/svnsoft 

tar -xvf httpd-2.4.9.tar.gz 

cd httpd-2.4.9 

./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --with-ssl=/usr/local/openssl --enable-module=so --enable-dav --enable-so --enable-dav-fs --enable-ssl --enable-proxy --enable-proxy-http 

make && make install 

cp /etc/init.d/httpd /etc/init.d/httpd.bak-20140127 

cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd 

cd /usr/local/apache2/conf 

cp httpd.conf httpd.conf.bak 

useradd -M apache 

#如果异常提示useradd: user 'apache' already exists 

#则执行usermod -s /bin/bash apache 

#测试 su  - apache

 

vi /usr/local/apache2/conf/httpd.conf

 

#找到 User 和 Group 并修改成 User apache 和 Group apache 保存并退出 

#找到 ServerName 并修改成ServerName localhost:80 

#去掉该行的注释  

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

 

三、安装配置Subversion 

#------------------------------------------------------------------

 

cd /opt/svnsoft

tar -xvf subversion-1.8.9.tar.bz2 

unzip sqlite-amalgamation-3080403.zip 

mv sqlite-amalgamation-3080403 sqlite-amalgamation 

mv sqlite-amalgamation subversion-1.8.9

cd subversion-1.8.9 

./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util 

make && make install 

vi /etc/profile 

#在最下面增加 export PATH=$PATH:/usr/local/svn/bin 保存并退出 

source /etc/profile 

exit 

#检查是否安装成功 

svnserve --version

 

 

#配置Subversion 

#------------------------------------------------------------------

 

#先检查是否存在/techcenter/sd/repos目录结构 

#cd /techcenter/sd/repos 

#没有则创建 mkdir -p /techcenter/sd/repos/ 

svnadmin create /techcenter/sd/repos/project1 

chown -R apache.apache /techcenter/sd/repos/ 

vi /techcenter/sd/repos/project1/conf/svnserve.conf 

#将以下代码 

[sasl] 

#注释掉 

#在文件最下面增加代码 

anon-access = none 

auth-access = write 

password-db = passwdfile 

authz-db = authz

realm = project1 

#保存并退出  

vi passwdfile 

#***[users]下面的所有内容 

#[users]下面增加以下代码 

admin = admin 

#保存并退出 

vi authz

 

#***### ('').下面的所有内容 

#### ('').下面增加以下代码

 

[groups] 

g_mgr = admin    //可以根据需求添加组成员

### at 

[project1:/]     //在project1下成员拥有的权限

@g_mgr = rw     

* = 

### trunk 

[project1:/trunk] //载仓库project1下面的trunk目录上拥有的权限

@g_mgr = rw 

* = 

### branches 

[project1:/branches]  //在仓库project1下面branches目录上拥有的权限

@g_mgr = rw 

* = 

#保存并退出

/usr/local/svn/bin/svnserve -d -r /techcenter/sd/repos/   //指定svn运行的目录

ps -ef | grep svnserve 

echo "/usr/local/svn/bin/svnserve -d -r /techcenter/sd/repos/" >> /etc/rc.local 

#使用TortoiseSVN工具测试    //如果没有这个工具可以网上下载 

svn://IP/project1 

#添加文件提交 

#更新文件提交 

#OK~

 

 

四、整合SvbversionApache 

#------------------------------------------------------------------

 

#配置svn权限及账号密码 

cd /usr/local/apache2/bin/ 

./htpasswd -mc passwd admin 

#输入两次密码 

cp passwd /techcenter/sd/conf/ 

rm -rf passwd 

cd /techcenter/sd/conf/ 

cp /techcenter/sd/repos/project1/conf/svn_passwdfile ./ 

cp /techcenter/sd/repos/project1/conf/svn_accessfile ./ 

#拷贝passwd文件内容到svn_passwdfile中 

cp passwd svn_passwdfile

***passwd文件

rm -rf passwd 

改变文件拥有者

chown -R apache.apache ./passwdfile 

chown -R apache.apache ./authz 

#配置apache配置文件 

cd /usr/local/apache2/modules 

cp /usr/local/svn/libexec/mod_authz_svn.so ./ 

cp /usr/local/svn/libexec/mod_dav_svn.so ./ 

vi /usr/local/apache2/conf/httpd.conf 

查找以下每行代码,如有注释去掉注释,如不存在代码,则在文件最后面添加,同时核对modules是否存在.so文件 

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so 

LoadModule ssl_module modules/mod_ssl.so 

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 

LoadModule dav_module modules/mod_dav.so 

LoadModule dav_svn_module modules/mod_dav_svn.so 

LoadModule authz_svn_module modules/mod_authz_svn.so 

ServerName www.example.com:80改为 

ServerName localhost:80 

<Location /svn> 

DAV svn 

SVNParentPath /techcenter/sd/repos 

SVNListParentPath On 

AuthType Basic 

AuthName "svn repos" 

AuthUserFile /techcenter/sd/conf/svn_passwdfile 

AuthzSVNAccessFile /techcenter/sd/conf/svn_accessfile 

Require valid-user 

</Location> 

#保存并退出

 

 

五、安装php 

#------------------------------------------------------------------

 

cd /home/soft/ 

yum install libxml2-devel libjpeg libjpeg-devel libpng libpng-devel 

tar -xvf php-5.5.6.tar.gz 

cd php-5.5.6 

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-jpeg-dir=/usr/share/doc/libjpeg-turbo-1.2.1 --with-png-dir=/usr/share/doc/libpng-1.2.49 --with-mysql --with-zlib --with-gd --with-pear --with-config-file-path=/etc/ 

make && make install 

cp php.ini-development /etc/php.ini 

vi /usr/local/apache2/conf/httpd.conf 

#确保下面代码,是去掉注释的,没有的补充添加上 

<IfModule dir_module> 

DirectoryIndex index.php index.html 

</IfModule> 

AddType application/x-compress .Z 

AddType application/x-gzip .gz .tgz 

AddType application/x-httpd-php .php .phtml .php3 .inc 

#保存并退出 


测试php是否安装成功,在/usr/local/apache2/htdocs/ 下建立一个info.php文件

<?php

    phpinfo()

?>

 保存退出;

在浏览器输入http://IP/info.php 查看是否成功。



 

#测试,打开浏览器访问地址 

https://IP/svn/ 

#可以看到project1项目,可点击目录,查看目录里的文件 

#输入账号密码 

#在浏览器上可以看到先关项目文件,即标识成功

 

 

六、安装mysql 

#------------------------------------------------------------------

 

yum -y install bison gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* mysql-devel

 

安装cmake

由于mysql5.5开始,不再使用configure安装,而是使用cmake

cd /opt/svnsoft

wget http://wwwNaNake.org/files/v2.8/cmake-2.8.6.tar.gz

tar -zxvf cmake-2.8.6.tar.gz

cd cmake-2.8.6/

./configure

make && make install

 

使用cmake安装mysql 

//进入/opt/svnsoft目录下

tar -zxvf mysql-5.5.25.tar.gz

cd mysql-5.5.25

 

cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/user/local/mysql/data \

-DSYSCONFDIR=/etc \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \

-DMYSQL_TCP_PORT=3306 \

-DWITH_DEBUG=0 \

-DENABLED_LOCAL_INFILE=1

 

执行完成后继续执行 make && make install

 

mysql

 

#mysql/support-files目录中有五个配置信息文件(请根据系统的实际情况以及实际需求选择下列配置文件进行操作,若选择不当可能导致mysql无法启动): 

#my-small.cnf (内存<=64M)

#my-medium.cnf (内存 128M)

#my-large.cnf (内存 512M)

#my-huge.cnf (内存 1G-2G)

#my-innodb-heavy-4G.cnf (内存 4GB)

cd /usr/local/mysql

cp ./support-files/my-huge.cnf /etc/my.cnf 

 

添加mysql用户和用户组,生成新的mysql授权表

 

//添加mysql运行的用户和用户组

groupadd mysql

useradd -g mysql mysql 

cd /usr/local/mysql

chown -R root .

chown -R mysql data

chgrp -R mysql .

 

//生成新的mysql授权表

//进入mysql安装目录下的脚本目录

cd /usr/local/mysql/scripts

//利用mysql_install_db脚本生成新的mysql授权表

./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  --user=mysql

 

//mysql server在系统中的服务项设置

//复***务文件并修改

cd /usr/local/mysql/support-files

cp mysql.server mysqld

//修改mysqld

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

 

mv mysqld /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

 

//设置软连接使mysql,  mysqldump,  mysqladmin这三个bin命令能在shell中直接运行

 ln -s /usr/local/mysql/bin/mysql /usr/bin

 ln -s /usr/local/mysql/bin/mysqldump /usr/bin

 ln -s /usr/local/mysql/bin/mysqladmin /usr/bin

 

rm -rf /etc/mysql/my.cnf 因为已经把此文件复制到/etc/my.cnf  如果不***的话,mysql启动不起来。

 

启动mysql,设置mysql用户名和密码

 

/etc/init.d/mysqld start

 

//设置root密码

mysqladmin -u root password "admin"

 

//mysql数据库中文乱码解决方法,如果没有出现乱码问题建议不要采用下列方法,utf8可能会导致出现字节过长的错误

vi /etc/my.cnf

//然后在[mysqld]配置选项下添加

character-set-server=utf8

 注 mysql采用utf8编码格式时会出现:MySQL ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 特别需要注意的是,如果采用这个格式,那么导入数据时需要保证表内没有超过767bytes

//然后进入mysql

cd /usr/local/mysql/bin

mysql -u root -p

提示输入密码若成功进入则表示安装成功。

 

七、安装 svnadmin-3.0.4.zip

 

解压

$unzip svnadmin-3.0.4.zip

解压完成后在当前目录下,出现:

db (这是一个目录)                  

svnadmin-javadoc.jar       

svnadmin-sources.jar

svnadmin-3.0.4.zip  

SvnAdmin_Manual_zh_CN.pdf  

svnadmin.war

 

配置

 

1.配置数据库

 

导入sql脚本过程:

本地登陆进MSYQL,创建svnadmin数据库,导入脚本

# mysql -uroot -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 177

Server version: 5.1.30-log Source distribution

 

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

 

mysql>create database svnadmin;

mysql>flush privileges;   (这句意思是让刚才的配置生效)

mysql>use svnadmin;

mysql>source /soft/svnadmin-3.0.3/db/mysql5.sql;    //(此处数据库一定要导入成功,我在操作过程中出现了i18n的表消失的情况,至今原因不明,有知道原因的大神请告知一下。)

mysql>flush privileges;

mysql>exit;

 

2.部署svnadmin

svnadmin.war拷贝到tomcat目录下的webapps目录中

$cp svnadmin-3.0.4/svnadmin.war apache-tomcat-6.0.36/webapps

修改jdbc.properties文件 配置svnadmin的数据库连接信息。

#vim /usr/local/tomcat/webapps/svnadmin/WEB-INF/jdbc.properties

例如:

db=MySQL

 

 

#MySQL

MySQL.jdbc.driver=com.mysql.jdbc.Driver

MySQL.jdbc.url=jdbc:mysql://localhost:3306/svnadmin?characterEncoding=utf-8

MySQL.jdbc.username=root   

MySQL.jdbc.password=123  //此处输入mysql用户密码

 

3.测试svnadmin是否运行正常

浏览器输入 http://hostname:8080/svnadmin

如果能出现登陆窗口说明运行正常。

svnadmin的操作请查看解压出来的SvnAdmin_Manual_zh_CN.pdf文件