SVN服務的安裝

安裝環境:

1.操作系統:CentOS release 6.6 (Final)

2.軟件包:apr-1.5.2.tar.gz  apr-iconv-1.2.1.tar.gz  apr-util-1.5.4.tar.gz  sqlite-amalgamation-3071501.zip  subversion-1.9.2.tar.gz  zlib-1.2.8.tar.gz

3.服務器IP:  192.168.200.205  192.168.200.206

                     

說明:

1.軟件包的存放目錄:/data/soft

2.服務器192.168.200.205  192.168.200.206

3.SVN目錄說明

SVN安裝目錄:/data/app/svn

SVN數據存放目錄:/data/svndata

目前SVN的架構:master-slave,可以做通過計劃任務做定時同步,也可以實現實時同步,具體採用哪種方式根據實際需要來進行選擇

具體操作步驟:

一、Master端的操作

1.先安裝依賴包然後進行svn的源碼編譯安裝,具體見svn_install.sh

cat svn_install.sh

yum -y install gcc rsync xinetd
#soft_package apr-1.5.2.tar.gz apr-iconv-1.2.1.tar.gz apr-util-1.5.4.tar.gz sqlite-amalgamation-3071501.zip zlib-1.2.8.tar.gz
#soft_path:/data/soft
#define soft_path variables
soft_path="/data/soft"
#install subversion dependent package
cd $soft_path
tar zxf apr-1.5.2.tar.gz && cd apr-1.5.2 && ./configure --prefix=/usr/local/apr && make && make install
cd $soft_path
tar zxf apr-util-1.5.4.tar.gz && cd apr-util-1.5.4 && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
cd $soft_path
tar zxf apr-iconv-1.2.1.tar.gz && cd apr-iconv-1.2.1 && ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr && make && make install
cd $soft_path
tar zxf zlib-1.2.8.tar.gz && cd zlib-1.2.8 && ./configure --prefix=/usr/local/zlib && make && make install
#install subversion 
cd $soft_path && tar zxf subversion-1.9.2.tar.gz && unzip sqlite-amalgamation-3071501.zip
mv /data/soft/sqlite-amalgamation-3071501 /data/soft/subversion-1.9.2/sqlite-amalgamation
cd subversion-1.9.2 && ./configure --prefix=/data/app/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-zlib=/usr/local/zlib/ && make && make install

2.創建svn目錄和版本庫php ios

mkdir -p /data/svndata

svnadmin create /data/svndata/php

svnadmin create /data/svndata/ios

3. 多版本庫統一配置管理

實際使用過程中是多版本庫,爲方便對多版本庫進行管理,建立conf目錄

mkdir /data/svndata/conf  #該目錄用於管理所有項目的帳號密碼、權限控制等

[root@localhost conf]# cd /data/svndata/php/conf
[root@localhost conf]# cp passwd authz svnserve.conf /data/svndata/conf/

針對passwd  authz  snvserve.conf文件的修改如下所示:

[root@localhost conf]# cat passwd |grep -v "^$"|grep -v "#"  #每個用戶的用戶名和密碼
[users]
user = passwd

[root@localhost conf]# cat authz |grep -v "^$"|grep -v "#"   #權限管理,權限管理的統一思路是:創建多個組,將各個用戶加入到各個組,控制各個組的權限。以後對權限管理就維持在組的維度,
[groups]
php = user
[php:/]
user = rw

[root@localhost conf]# cat svnserve.conf |grep -v "^$"|grep -v "#"     #svn的總控文件[general]
anon-access = none #未鑑定的用戶無權限訪問該版本庫
auth-access = write #鑑定後的可讀寫版本庫 
password-db = passwd #使用的密碼文件是同級路徑的passwd文件,即是/data/svndata/conf/passwd
authz-db = authz #使用的權限控制文件是同級路徑的authz文件,即是/data/svndata/conf/authz
realm = svndata #realm 指定版本庫的認證域,即在登錄時提示的認證域名稱。各個項目的認證域都可以自定義

4.各個版本庫配置文件修改

每個項目默認使用的配置文件是該項目下的配置文件,所以必須修改掉,否則不受總控配置文件的管理

接下來以對php版本庫配置文件的修改爲例來進行說明,其餘的版本庫請參考此步驟進行相關配置文件的修改

[root@localhost ~]# cd /data/svndata/php/conf/
[root@localhost conf]# cat svnserve.conf|grep -v "^$"|grep -v "#"
[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
realm = php

4.啓動svn: svnserve -d -r /data/svndata/

5.安裝SVN客戶端,checkout svn://192.168.200.205/php 並在檢出的目錄中新增test.txt文檔

二、Slave端的操作

前4步操作和Master端一樣(省略)

5.準備備庫的鉤子(以php項目爲例,其他項目一樣)

[root@yx-u2-svn-slave ~]# cat /data/svndata/php/hooks/pre-revprop-change
#!/bin/sh
exit 0
[root@yx-u2-svn-slave ~]# chmod 755 /data/svndata/php/hooks/pre-revprop-change

三、建立SVN的Master-Slave關係,並將主上的數據同步到從

注:192.168.200.206 是備庫,192.168.200.205是主庫;主庫和備庫的用戶名和密碼一致,並且liyuemei需要有相關權限,具體看/data/svndata/conf/authz

[root@yx-u2-svn-slave ~]# svnsync init svn://192.168.200.206/php svn://192.168.200.205/php --username user --password passwd --no-auth-cache
Copied properties for revision 0.

如果看到以下內容就說明成功了。如果發現只有版本號,沒有Transmitting file data,請仔細檢查主庫備庫配置文件,是否有錯誤和遺漏

[root@yx-u2-svn-slave ~]# svnsync sync --non-interactive svn://192.168.200.206/php --username user --password passwd
Transmitting file data .
Committed revision 1.
Copied properties for revision 1.
Transmitting file data .
Committed revision 2.
Copied properties for revision 2.

四、定時計劃保證數據一致性

[root@yx-u2-svn-slave ~]# crontab -l
0 */2 * * * /usr/sbin/ntpdate -s -b -p 8 -u 172.16.100.5 >/dev/null 2>&1
*/3 * * * * /data/scripts/svn_sync.sh &>/dev/null

[root@yx-u2-svn-slave ~]# cat /data/scripts/svn_sync.sh 
#!/bin/bash
now_time=$(date +"%F_%T")
for project in php ios
do 
      svnsync sync --non-interactive svn://192.168.200.206/$project --username user--password passwd >>/data/logs/svnbackup.log.$now_time 2>&1
done

五、Master-Slave實時同步(此操作需要在Master進行)
[root@yx-u2-svn-master ~]# cd /data/svndata/php/hooks/
[root@yx-u2-svn-master hooks]# cp post-commit.tmpl post-commit
[root@yx-u2-svn-master hooks]# cat post-commit|tail -6 
#REV="$2"
#TXN_NAME="$3"
#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
/data/app/svn/bin/svnsync sync --non-interactive svn://192.168.200.206/php --username user --password passwd
將post-commit文件的最後三行註釋掉並追加一行同步命令,這樣便可以實現主從數據的實時同步

六、驗證

Master客戶端 checkout svn://192.168.200.205/php 新增文本文件或者是對原有的文件做修改,然後svn commit 
Slave客戶端 checkout svn://192.168.200.206/php svn update 即可以看到本機的數據和Master端保持一致

 

七、部署SVN服務器Master-Slave架構過程中遇到的問題:

1.報錯信息:svnsync: Destination repository has not been initialized

[root@node2 ~]# svnsync sync svn://192.168.200.206/java --username user--password passwd --no-auth-cache
Authentication realm: <svn://192.168.200.206:3690> ios
Username: user
Password for 'user':

-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:

<svn://192.168.200.206:3690> ios

can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
svnsync: Destination repository has not been initialized


原因:先執行svnsync init 再執行 svnsync sync
svnsync init svn://192.168.200.206/java svn://192.168.200.205/ios --username user --password passwd --no-auth-cache
svnsync sync svn://192.168.200.206/ios --username user --password passwd  --no-auth-cache

 

2.修改文檔後,執行svn commit操作時報錯信息:post-commit hook failed (exit code 255) with output
原因:post-commit文件沒有執行權限

3.修改文件後svn commit時報錯信息如下:

Error post-commit hook failed(exit code 127) with output
Error /data/svndata/php/hooks/post-commit:line 64:svnsync:command not found 

原因:找不到svnsync命令
解決方法:/data/app/svn/bin/svnsync sync --non-interactive svn://192.168.200.206/php --username user --password passwd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章