SVN服務器部署並實現雙機同步及禁止普通用戶刪除文件

下面來佈署svn服務器

所有文件下載地址:http://kuai.xunlei.com/d/-aMABDmt9uMqUQQA481

環境:CentOS5.8 x64 ,開發包組已安裝,iptables,selinux已經關閉

一.安裝配置apache

1.1 下載編譯安裝apache

  1. tar xvf httpd-2.2.22.tar.bz2 
  2. cd httpd-2.2.22 
  3. ./configure  --prefix=/opt/apache \ 
  4. --enable-so \    
  5. --enable-dav \    
  6. --enable-dav-fs \  
  7. --enable-maintainer-mode \  
  8. --with-included-apr \ 
  9. --enable-rewrite \ 
  10. --enable-ssl \ 
  11. --enable-proxy \ 
  12. --enable-proxy-http 
  13.  
  14. make && make install 

1.2 配置apache 

添加apache 用戶

  1. useradd -r apache 

以apache身份運行httpd

  1. sed -i 's@User daemon@User apache@g' /opt/apache2/conf/httpd.conf 
  2. sed -i 's@Group daemon@Group apache@g' /opt/apache2/conf/httpd.conf 

1.3 爲了方便將apache命令加入PATH,並將apache庫導出

  1. echo 'export PATH=$PATH:/opt/apache2/bin' > /etc/profile.d/httpd.sh 
  2. . /etc/profile.d/httpd.sh 
  3.  
  4. echo '/opt/apache2/lib' > /etc/ld.so.conf.d/apache.conf 

導出 

  1. ldconfig  
  2. rm -rf httpd-2.2.22 

二.安裝MySQL

2.1安裝cmake

  1. tar xvf cmake-2.8.4.tar.gz 
  2. cd cmake-2.8.4 
  3. ./configure 
  4. make && make install 
  5. cd .. 
  6. rm -rf cmake-2.8.4 

2.2 安裝mysql

  1. tar xf mysql-5.5.28.tar.gz 
  2. cd mysql-5.5.28 
  3.  
  4. cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql \ 
  5. -DSYSCONFDIR=/opt/mysql/etc \ 
  6. -DMYSQL_DATADIR=/opt/mysql/data \ 
  7. -DMYSQL_TCP_PORT=3306 \ 
  8. -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ 
  9. -DMYSQL_USER=mysql \ 
  10. -DEXTRA_CHARSETS=all \ 
  11. -DWITH_READLINE=1 \ 
  12. -DWITH_SSL=system \ 
  13. -DWITH_EMBEDDED_SERVER=1 \ 
  14. -DENABLED_LOCAL_INFILE=1 \ 
  15. -DWITH_INNOBASE_STORAGE_ENGINE=1 
  16.  
  17. make && make install 
  1. cd .. 
  2. rm -Rf  mysql-5.5.28 

配置文件與啓動腳本

  1. cd /opt/mysql 
  2. cp support-files/my-huge.cnf /etc/my.cnf 
  3. cp support-files/mysql.server /etc/init.d/mysqld 

2.3 以mysql用戶運行mysql,修改PATH並導出庫

  1. useradd -r mysql 
  2. chown -R mysql:root . 
  3. ./scripts/mysql_install_db --user=mysql --datadir=data/ 
  1. echo 'export PATH=$PATH:/opt/mysql/bin' > /etc/profile.d/mysql.sh 
  2. . /etc/profile.d/mysql.sh 
  1. echo '/opt/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 
  2. ldconfig  

啓動mysql

  1. service mysqld start 

三.安裝php

3.1 安裝php,安裝它是因爲svnmanager需要

  1. cd /root/svn 
  2. tar xvf php-5.3.18.tar.gz 
  3. cd php-5.3.18 
  4.  
  5. ./configure --prefix=/opt/php \ 
  6. --with-apxs2=/opt/apache2/bin/apxs \ 
  7. --with-mysql=/opt/mysql \ 
  8. --enable-mbstring  
  9.  
  10. make && make install 
  1. cp php.ini-production /etc/php.ini 
  1. cd .. 
  2. rm -Rf php-5.3.18 

添加apache的php支持

  1. sed -i '/AddType application\/x-gzip .gz .tgz/a\ 
  2. AddType application/x-httpd-php .php' /opt/apache2/conf/httpd.conf 
  3.  
  4. sed -i 's@DirectoryIndex index.html@DirectoryIndex index.php index.html@g' /opt/apache2/conf/httpd.conf 

啓動apache測試

  1. rm -f /opt/apache2/htdocs/index.html 
  2.  
  3. echo '<?php 
  4. phpinfo() 
  5. ?>> /opt/apache2/htdocs/index.php 
  1. apachectl start 

訪問http://$IP/測試apache,php,mysql是否部署下確

四.安裝subversion

4.1 解壓安裝subversion

  1. tar xf subversion-1.6.13.tar.bz2   
  2. tar xf subversion-deps-1.6.13.tar.bz2 
  3. cd subversion-1.6.13 
  1. ./configure --prefix=/opt/subversion \ 
  2. --with-apxs=/opt/apache2/bin/apxs \ 
  3. --with-apr=/opt/apache2/bin/apr-1-config \ 
  4. --with-apr-util=/opt/apache2/bin/apu-1-config 
  5.  
  6. make && make install 
  1. echo 'export PATH=$PATH:/opt/subversion/bin' > /etc/profile.d/svn.sh 
  2. . /etc/profile.d/svn.sh 
  1. cd .. 
  2. rm -rf subversion-1.6.13 

4.2 讓apache與svn結合

  1. sed -i '/httpd-default.conf/a\ 
  2. Include conf/extra/httpd-svn.conf' /opt/apache2/conf/httpd.conf 
  1. echo ' 
  2. <Location /svn> 
  3. DAV svn 
  4. SVNListParentPath On 
  5. SVNParentPath /opt/svn_repos 
  6. AuthType Basic 
  7. AuthName "Subversion Repository" 
  8. AuthUserFile /opt/subversion/conf/passwdfile 
  9. AuthzSVNAccessFile /opt/subversion/conf/accessfile 
  10. Require valid-user 
  11. </Location> ' > /opt/apache2/conf/extra/httpd-svn.conf 

4.3 創建提到的文件

  1. mkdir /opt/subversion/conf 
  2. touch /opt/subversion/conf/passwdfile 
  3. touch /opt/subversion/conf/accessfile 
  4. mkdir /opt/svn_repos 

4.4 創建一個repo,添加一個測試賬戶,配置權限,測試

  1. svnadmin create /opt/svn_repos/test/  ##創建一個repo
  2. chown -R apache:apache /opt/subversion/  ##我們通過apache來管理svn的
  3. chown -R apache:apache /opt/svn_repos/ 
  4. htpasswd -bm /opt/subversion/conf/passwdfile test  "admin" 
  1. echo ' 
  2. [test:/] 
  3. * = r 
  4. test = rw ' > /opt/subversion/conf/accessfile  ##access文件是權限控制文件

4.5 重啓apache測試

  1. apachectl restart 

訪問http://$IP/svn/test 

輸入賬號,密碼

如果看到test - Revision 0: / 證明沒問題,繼續

五.安裝svnmanager,以圖形化的方式管理svn

5.1 安裝VersionControl_SVN,svnmanager需要它

  1. /opt/php/bin/pear install VersionControl_SVN-0.3.4 

出現ok,等代表成功

5.2 安裝svnmanager

  1. tar xf svnmanager-1.08.tar.gz 
  2. mv svnmanager-1.08 /opt/apache2/htdocs/svnman 

5.3 修改配置文件 

  1. cp /opt/apache2/htdocs/svnman/config.php.linux /opt/apache2/htdocs/svnman/config.php 
  2.  
  3. vim /opt/apache2/htdocs/svnman/config.php 
  4.  
  5. $htpassword_cmd                         =       "/opt/apache2/bin/htpasswd"; ##意思很明顯
  6. $svn_cmd                                        =      "/opt/subversion/bin/svn"
  7. $svnadmin_cmd                           =       "/opt/subversion/bin/svnadmin"
  8.  
  9. //Subversion locations 
  10. $svn_config_dir                         =       "/opt/subversion/conf"
  11. $svn_repos_loc                          =       "/opt/svn_repos"
  12. $svn_passwd_file                        =       "/opt/subversion/conf/passwdfile"
  13. $svn_access_file                        =       "/opt/subversion/conf/accessfile"
  14. $dsn                   =      "mysql://svnmanager:admin@localhost/svnmanager";  ##mysql,去掉i
  15. $admin_name                                             =       "admin"; ##初始的賬號密碼
  16. $admin_temp_password                    =       "admin"

5.4 創建數據庫

  1. mysql  
  2. mysql> create database svnmanager; 
  3. mysql> grant all on svnmanager.* to 'svnmanager'@'localhost' identified by 'admin'; 
  4. mysql> flush privileges; 

5.5 將VersionControl_SVN拷到svnmanager中

  1. tar xvf VersionControl_SVN-0.3.4.tgz 
  2. mv VersionControl_SVN-0.3.4 /opt/apache2/htdocs/svnman/VersionControl 
  3.  
  4. chown -R apache:apache /opt/apache2 

5.6 訪問測試

http://$IP/svnman

初始賬號:admin

初始密碼:admin 

建立新的管理賬號後舊的就停用了

svnmanager用法見http://wenku.baidu.com/view/4d95d0303968011ca30091a2.html

建立庫,與用戶後測試。到此svn服務器構建完畢

 

六.配置svn雙機同步

原來有svn服務器,現在做一個鏡像服務器,當原來的服務器down掉後可以代替它

源服務器:192.168.17.140

鏡像服務器:192.168.17.139

實例同步的爲源服器爲crm的項目到鏡像服務器

6.1 在鏡像服務器上建立一新庫crm,與具有讀寫權限的用戶

用svnmanager來建,svnadmin create 的話svnmanager中看不到

這個就不寫了,假設源上是http://192.168.17.140/svn/crm,鏡像的爲http://192.168.17.139/svn/crm,用戶爲:laoguang,密碼爲:admin 對兩個項目都可讀可寫

6.2 修改鏡像服務下項目hook目錄下的腳本並啓用

  1. cp /opt/svn_repos/crm/hooks/pre-revprop-change.tmpl /opt/svn_repos/crm/hooks/pre-revprop-change 
  2.  
  3. vim /opt/svn_repos/crm/hooks/pre-revprop-change 
  4. 把最後的exit 1改爲exit 0 即可 

6.3 鏡像服務器執行初始化

  1. svnsync init file:///opt/svn_repos/crm/ http://192.168.17.140/svn/crm/ 

輸入具有讀寫賬號密碼,root的好像寫的不對也沒事

比如,我在192.168.17.140的一個賬號laoguang 密碼 admin

出現Copied properties for revision 0. 代表正確

6.4 開始同步源服務器上的數據

  1. svnsync sync file:///opt/svn_repos/crm/ 
  1. --------------------------- 
  2. Store password unencrypted (yes/no)? yes  
  3. Transmitting file data ..............................  
  4. Committed revision 1.  
  5. Copied properties for revision 1.  
  6. Transmitting file data .  
  7. Committed revision 2. 
  8. Copied properties for revision 2.  
  9. Transmitting file data .  
  10. Committed revision 3.  
  11. Copied properties for revision 3.  
  12. ----------------------------- 
  13.  
  14. 代表同步成功 

6.5 配置當源版本改變時自動同步

下面開始在源服器上操作

  1. cp /opt/svn_repos/qingdao/hooks/post-commit.tmpl /opt/svn_repos/qingdao/hooks/post-commit 
  2.  
  3. chmod 755 /opt/svn_repos/qingdao/hooks/post-commit 

刪除未註釋的內容

在最下面寫上

  1. /opt/subversion/bin/svnsync sync --non-interactive http://192.168.17.139/svn/crm/ --username laoguang --password admin

升級源svn版本,測試鏡像上同步了沒。

七.配置svn 禁止普能用記刪除文件

7.1修改源上的鉤子腳本

  1. cp /opt/svn_repos/qingdao/hooks/pre-commit.tmpl /opt/svn_repos/qingdao/hooks/pre-commit 
  2. chmod +x /opt/svn_repos/qingdao/hooks/pre-commit 
  3. vim /opt/svn_repos/qingdao/hooks/pre-commit 
  4.  
  5. REPOS="$1"  ##庫位置
  6. TXN="$2"  ##版本
  7.  
  8. SVNLOOK=/opt/subversion/bin/svnlook  ##svnlook的位置
  9. SCMLIST="admin"  ##允許刪除的用記
  10. C_USER=`$SVNLOOK info -t $TXN $REPOS | sed -n "1p"`  ##執行commit的用戶
  11.  
  12. if [ -z `echo $SCMLIST | grep $C_USER` ];then  ## 如果commit的用戶沒在允許的裏面
  13.     echo `$SVNLOOK changed -t $TXN $REPOS` > /opt/svn_repos/qingdao/commit_log  ##將操作寫入日誌
  14.    if  cat /opt/svn_repos/qingdao/commit_log|cut -d" " -f1|uniq -u|grep "^D";then ##如果日誌開頭包含D(D代表刪除)
  15.       echo "You do not have permisson to delete a file" > /dev/stderr ##提示錯誤
  16.       rm -rf /opt/svn_repos/qingdao/commit_log  ##刪除文件
  17.       exit 1  ##錯誤退出
  18.    fi 
  19. fi 
  20.  
  21. exit 0 

到此本文完畢,構建svn主要參考http://300second.blog.51cto.com/7582/1065758,感謝300second
其它來自百度。

本文出自 “Free Linux,Share Linux” 博客,請務必保留此出處http://laoguang.blog.51cto.com/6013350/1139645

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