svn是Subversion的簡稱,是一個開放源代碼的版本控制系統。
svn有兩種運行方式:1、獨立服務器(svn://xxx.xxx/xxx) 2、借助apache(http://svn.xxx.xxx/xxx)
svn存儲版本數據也有兩種方式:1、BDB(事務安全型表類型) 2、FSFS(一種不需要數據庫存儲系統)
因為BDB方式在服務中斷時,可能鎖住數據,這里我們選擇獨立服務器和FSFS方式安裝svn。
一、下載安裝Subversion必要的源碼文件
安裝svn需要apr,apr-util,zlib,serf,openssl的支持,serf的編譯安裝又需要scons
所以這里我們用yum來安裝zlib和openssl,源碼編譯apr,apr-util,serf,scons
subversion源碼包
http://mirrors.cnnic.cn/apache/subversion/subversion-1.9.5.tar.gz
apr源碼包
http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.5.2.tar.gz
apr-util源碼包
http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
serf源碼包
https://www.apache.org/dist/serf/serf-1.3.9.tar.bz2
scons源碼包
https://sourceforge.net/projects/scons/files/scons/2.5.1/
sqlite-amalgamation源碼包
http://www.sqlite.org/2017/sqlite-amalgamation-3160200.zip
二、安裝必要依賴
> yum -y install zlib zlib-devel openssl openssl-devel
三、安裝apr
> tar xf apr-1.5.2.tar.gz > cd apr-1.5.2 > ./configure --prefix=/data/apr > make && make install
四、安裝apr-util
> tar xf apr-util-1.5.4.tar.gz > cd apr-util-1.5.4 > ./configure --prefix=/data/apr-util \ --with-apr=/data/apr > make && make install
五、安裝scons
> yum -y install python > tar xf scons-2.5.1.tar.gz > cd scons-2.5.1 > python setup.py install --prefix=/data/scons
六、安裝serf
> tar xf serf-1.3.9.tar.bz2 > cd serf-1.3.9 > /data/scons/bin/scons PREFIX=/data/serf APR=/data/apr APU=/data/apr-util > /data/scons/bin/scons install > cp /data/serf/lib/libserf-1.so* /usr/local/lib/
七、安裝svn
> tar xf subversion-1.9.5.tar.gz > mkdir /data/subversion-1.9.5/sqlite-amalgamation > unzip sqlite-amalgamation-3160200.zip -d /data/subversion-1.9.5/ > cd subversion-1.9.5 > mv sqlite-amalgamation-3160200 sqlite-amalgamation > ./configure --prefix=/data/svn \ --with-apr=/data/apr \ --with-apr-util=/data/apr-util \ --with-serf=/data/serf \ --enable-mod-activation > make && make install
八、添加環境變量
> echo "export PATH=/data/svn/bin:$PATH" >> /etc/profile > source /etc/profile
九、查看信息
> svn help > svnserve --version > svn --version
如果出現如下信息
svn: error while loading shared libraries: libserf-1.so.1: cannot open shared object file: No such file or director
> cd /etc/ld.so.conf.d/ > vi user-libs.conf 把我們拷貝serf的文件的目錄加上 /usr/local/lib > ldconfig
十、創建svn倉庫
> mkdir -p /data/repos > svnadmin create /data/repos > cd /data/repos > ll
目錄結構如下:
drwxr-xr-x. 2 root root 72 1月 15 06:58 conf drwxr-sr-x. 6 root root 4096 1月 15 06:58 db -r--r--r--. 1 root root 2 1月 15 06:58 format drwxr-xr-x. 2 root root 4096 1月 15 06:58 hooks drwxr-xr-x. 2 root root 39 1月 15 06:58 locks -rw-r--r--. 1 root root 246 1月 15 06:58 README.txt
十一、svn配置路徑
> cd /data/repos/conf > ll
文件如下:
權限配置文件 authz 用戶名口令文件 passwd svn服務配置文件 svnserve.conf
> vi authz
# /表示倉庫根目錄,用戶名=權限 [/] test = rw
> vi passwd
[users] test = 123456
> vi svnserve.conf
[general] #禁止匿名訪問 anon-access = none #授權用戶寫權限 auth-access = write #用戶密碼文件 password-db = passwd #授權登錄文件 authz-db = authz #每個svn項目認證名,建議寫項目名 realm = repos
十二、啟動關閉svn服務
一台機器可以啟動多個svn服務,需修改不同端口號。
> svnserve -d -r /data/repos --listen-port 3690 > ps -ef|grep svn > netstat -ln|grep 3690 > killall svnserve
十三、設置svn服務開機啟動
方法一:
修改/etc/rc.d/rc.local文件,添加如下命令
/data/svn/bin/svnserve -d -r /data/repos --listen-port 3690
方法二:
在/etc/init.d/目錄下創建svn文件並設置權限755,代碼如下
#!/bin/bash # centos下可以用如下命令管理svn: service svn start(restart/stop) SVN_HOME=/data/repos if [ ! -f "/data/svn/bin/svnserve" ] then echo "svnserver startup: cannot start" exit fi case "$1" in start) echo "Starting svnserve..." /data/svn/bin/svnserve -d --listen-port 3690 -r $SVN_HOME echo "Finished!" ;; stop) echo "Stoping svnserve..." killall svnserve echo "Finished!" ;; restart) $0 stop $0 start ;; *) echo "Usage: svn { start | stop | restart } " exit 1 esac
十四、實現svn代碼倉庫與web線上同步
svn代碼倉庫目錄/data/repos/www1
web線上目錄/data/wwwroot/www1
1、首先checkout一份
> svn co svn://192.168.1.233/www1 /data/wwwroot/www1
2、修改目錄權限
> chmod -R 766 /data/www/www1
3、建立同步腳本
> cd /data/repos/www1/hooks > cp post-commit.tmpl post-commit > vi post-commit
添加如下代碼
export LANG=en_US.UTF-8 SVN=/data/svn/bin/svn WEB=/data/wwwroot/www1 $SVN update $WEB --username test --password 123456 chown -R 766 $WEB
> chmod 755 post-commit