以下是centos環境下,以yum安裝apache及其相關軟件。svn使用源碼包編譯,使用官網最新的1.8.5版本。
一、安裝apache openldap及其相關模塊
yum -y install httpd httpd-devel openldap openldap-devel mod_authz_ldap openssl openssl-devel zlib zlib-devel apr apr-uti
二、安裝sqlite
由於centos6.4上自帶的sqlite 3.6.20版本太低,不符合subversion的最低要求,所以需要通過源碼包安裝
wget http://www.sqlite.org/2013/sqlite-autoconf-3080100.tar.gz tar zxvf sqlite-autoconf-3080100.tar.gz cd sqlite-autoconf-3080100 ./configure make && make install
三、安裝subversion
1、subversion源碼包安裝
tar zxvf subversion-1.8.5.tar.gz mkdir -p ./subversion-1.8.5/sqlite-amalgamation cp ./sqlite-autoconf-3080100/sqlite3.c ./subversion-1.8.5/sqlite-amalgamation cd subversion-1.8.5 ./configure --prefix=/usr/local/subversion make && make install
2、配置環境變量
echo 'PATH=$PATH:/usr/local/subversion/bin' >>/etc/profile echo 'export PATH'>>/etc/profile source /etc/profile
3、創建版本庫
cd /data1/svnroot svnadmin create --pre-1.6-compatible test
注意:如果這里不寫--pre-1.6-compatible,更新svn的時候會報post commit FS processing had error: Couldn’t open rep-cache database
四、subversion與apache的整合
1、復制subversion下的mod文件
cp /usr/local/subversion/libexec/mod_authz_svn.so /etc/httpd/modules/ cp /usr/local/subversion/libexec/mod_dav_svn.so /etc/httpd/modules/
2、配置subversion.conf文件
vim /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <VirtualHost *:80> ServerName svn.361way.com LogLevel warn <Directory "/data1/svnroot"> # Order deny,allow # Deny from all # Allow from 115.236.xxx.xxx/29 </Directory> <Location /svn> # Order deny,allow # Deny from all # Allow from 115.236.xxx.xxx/29 # Allow from 119.37.xxx.xxx/24 DAV svn SVNParentPath /data1/svnroot AuthBasicAuthoritative on AuthType Basic AuthName "csvn" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://127.0.0.1/ou=Users,domainName=sangame.com,o=domains,dc=sangame,dc=com?uid?sub?(|(&(objectClass=mailuser)(accountStatus=active))(cn=svnadmin))" AuthLDAPBindDN "cn=ldapread,dc=361way,dc=com" AuthLDAPBindPassword "123456" #AuthUserFile /etc/httpd/conf/svn.passwd AuthzSVNAccessFile /etc/httpd/conf/svnauthz.conf # Satisfy Any Require valid-user </Location> </VirtualHost>
如果不使用ldap認證,而使用密碼文件認證則配置文件可以改為:
<Location /> DAV svn SVNParentPath /data1/svnroot/ #svn 根目錄 SVNListParentPath On SVNAutoversioning On SVNReposName "svn" AuthzSVNAccessFile /opt/svn/subversion/conf/authz.conf #目錄分組權限 AuthType Basic AuthName "Subversion repository" AuthUserFile /opt/svn/subversion/conf/passwd.conf #密碼驗證文件 Require valid-user </Location>
3、配置SVN權限認證文件
vim /etc/httpd/conf/svnauthz.conf [groups] admin=robin,svnadmin,ybk [/] @admin = rw [test:/] ybk= rw zzy = rw
注:
1、上面的test對應的是svnadmin下create的目錄。
2、@admin對應的是管理員組,可以再建其他組,如:java_team 、oam、market等。robin、svnadmin、ybk、zzy這些都是用戶名 。如果要和ldap進行整合的話,確保這些用戶在ldap中存在。
3、使用if-svnadmin 這類web程序做svn的用戶權限管理時,需要確保svnauthz.conf文件對apache用戶可寫,不然在if-svnadmin修改時不生效。
4、確保/data1/svnroot目錄apache用戶可讀寫或直接屬主改過apache,不然在使用TortoiseSVN等程序上傳或刪除時會提示權限拒絕。
以上配置完成后,就可以啟動apache以http://svn.361way.com/svn/test 的方式防問了。
關於openldap的相關配置這里就不再細說。如果使用到dav方法的調用時,還要安裝neon。(neon 是一個 HTTP 和 WebDAV 客戶端的C語言開發包,支持 Linux/Unix。提供 HTTP/1.1 和 WebDAV 方法的高級接口以及底層的 HTTP 請求/回應處理,可輕松實現新的方法。)不過由於apache下有mod_dav_svn的模塊整合,所以這里就不需要安裝了。
五、其他
1、svn服務器有2種運行方式:獨立服務器和借助apache。2種方式各有利弊。這里是以apache整合的;獨立服務的方式為svnserve -d -r /data1/svnroot方式啟動進程,監聽端口為3690 。
2、svn存儲版本數據也有2種方式:BDB和FSFS。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。默認使用的存儲方式也是FSFS方式。
最后,其相關組件及用途如下:
svn 命令行客戶端程序。 svnversion 此工具用來顯示工作拷貝的狀態(用術語來說,就是當前項目的修訂版本)。 svnlook 直接查看Subversion版本庫的工具。 svnadmin 建立、調整和修復Subversion版本庫的工具。 svndumpfilter 過濾Subversion版本庫轉儲數據流的工具。 mod_dav_svn ApacheHTTP服務器的一個插件,使版本庫可以通過網絡訪問。 svnserve 一個單獨運行的服務器程序,可以作為守護進程或由SSH調用。這是另一種使版本庫可以通過網絡訪問的方式。 svnsync 一個通過網絡增量鏡像版本庫的程序
3、apache和svnserver兩種方式的訪問方法
http://192.168.1.222/repos,采用了Apache作為服務器的話就可以以這種形式訪問,權限由Apache設置。 svn://192.168.1.222/repos,采用了svnserve作為服務器的話那么就可以采用這種形式訪問,它是一種基於TCP/IP的訪問方式。權限由倉庫的配置文件設置。
4、權限配置總結
用戶組格式: [groups] 用戶組名 = 用戶1,用戶2 其中,1個用戶組可以包含1個或多個用戶,用戶間以逗號分隔。 版本庫目錄格式: [版本庫:/項目目錄] @用戶組名 = 權限 用戶名 = 權限 其中,方框號內部分可以有多種寫法: /,表示根目錄及以下。根目錄是svnserve啟動時指定的,我們指定為/home/svnroot/repository。這樣,/就是表示對全部版本庫設置權限。 test:/,表示對版本庫test設置權限 權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權限可以是w、r、wr和空,空表示沒有任何權限。