SVN有2種安裝方式 :Apache 和非 Apache
httpd是web服務器,用來通過web訪問subversion
svn:// 需要用svn的方式對用戶權限配置
或
http:// 需要用http的方式對用戶權限配置,
安裝前須知:
1,關於mod_dav_svn模塊
由於Subversion需要版本化的控制,因此標準的HTTP協議不能滿足需求。要讓Apache與Subversion協同工作,就要使用WebDAV(Web-based Distributed Authoring and Versiong)Web分佈式創作和版本控制協議。WebDAV是HTTP 1.1的擴展,關於WebDAV的規範和工作原理,可以參考IETF RFC 2518。
mod_dav_svn模塊就是作爲Subversion與Apache之間的接口,通過它,Apache就可以訪問版本庫,並且可以讓客戶端也使用HTTP的擴展協議WebDAV/DeltaV進行訪問.
# rpm -qa|grep svn
mod_dav_svn-1.4.2-2.1AX
Mod_dav_svn的版本要和svn版本一致
下載依賴庫
如果沒有zlib的話,要安裝zlib
下載依賴的庫(安裝之前需要的庫),版本一定要對上,要不然編譯通不過安裝apr依賴庫
apr 和 apr-util一般會在httpd的安裝包內,subversion安裝會使用到apr和par-util,如果當前系統沒有,最好安裝一下
(Apache Portable Runtime Module)
http://archive.apache.org/dist/apr/apr-1.2.12.tar.gz
http://archive.apache.org/dist/apr/apr-util-1.2.12.tar.gz
http://archive.apache.org/dist/httpd//httpd-2.2.6.tar.gz
./configure --enable-dav --enable-dav-fs
make
make install
檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
如果已經成功安裝了Apache,使用 httpd -M 來查看有沒有安裝 dav_module,如果沒有的話 必須附加 ‘–enable-dav’ ‘–enable-dav-fs’ 兩個參數重新編譯 Apache,否則即使編譯通過了svn,apache也會啓動不起來.
下載apache
注意:安裝附加參數 dav
./configure -prefix=/usr/local/apache2 --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config -enable-modules=so --enable-dav --enable-maintainer-mode --enable-rewrite
安裝 Subversion 源碼安裝
注意:安裝附加參數
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --with-zlib --enable-maintainer-mode
配置集成在apache配置文件裏面
配置 apache 與 Subversion 集成
vi /usr/local/apache/conf/httpd.conf 在末尾添加
<Location /svn>
DAV svn
SVNParentPath /svn/project
AuthType Basic
AuthName "Hello welcome to here"
AuthUserFile /svn/passwd
AuthzSVNAccessFile /svn/auth.conf
Require valid-user
</Location>
說明
<Location /svn>
DAV svn
SVNParentPath /svn/project (此處配置你的版本庫根目錄)
AuthType Basic (連接類型設置 基本驗證)
AuthName "Hello welcome to here" (此處字符串內容修改爲提示對話框標題)
AuthUserFile /svn/passwd (訪問版本庫用戶的文件,用apache 的htpasswd命令生成)
AuthzSVNAccessFile /svn/auth.conf (此處修改爲訪問版本庫權限的文件)
Require valid-user ("Require valid-user"告訴apache在authfile中所有的用戶都可以訪問)
</Location>重啓 apache /usr/local/apache2/bin/apachectl –k restart
注意,如果用apache集成的話,這裏配置的版本權限文件可以和svn的不是一個,則這個生效,svn的就可以不用配置了,當然配置了也沒有用,
配置SVN(所有的配置文件裏面的文字都要定行首不留空格!要不然不識別,)
將svn的bin目錄加到環境變量中去
[root@BlackGhost /]# PATH=$PATH:/usr/local/svn/bin
[root@BlackGhost /]# export PATH
目錄控制文件authz
[root@BlackGhost conf]# vi authz
[groups]
admin= zhangy
[repos:/]
@admin = rw =》看見沒,定行首,@前面不能有空格,要不然不識別
* = r
1,新建一個目錄用於存儲SVN所有文件
# mkdir /home/svn
2,新建一個版本倉庫
# svnadmin create /home/svn/project
3,初始化版本倉庫中的目錄(最好初始化成標準目錄即,trunk,branches,tags三個目錄)
//當前目錄下新建一個臨時目錄
# [root@gitserver ~]# mkdir project project/trunk project/branches project/tags
//把剛纔新建的臨時目錄import版本庫裏面
# svn import project/ file:///home/svn/project -m “初始化SVN目錄”
// svn import作用: 遞歸提交一個路徑的拷貝到版本庫。
//以前臨時目錄沒用了,可以刪除了
[root@gitserver ~]# svn import project/ file:///opt/svn/project -m "init the dir"
Adding project/trunk
Adding project/branches
Adding project/tags
# rm -rf project (刪除臨時建立的目錄)
4,添加用戶
要添加SVN用戶非常簡單,只需在/home/svn/project/conf/passwd文件添加一個形如“username=password”的條目就可以了。爲了測試,我添加了如下內容:
[users]
# harry = harryssecret
# sally = sallyssecret
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw
[groups]
project_p = pm
project_s = server1,server2,server3
project_c = client1,client2,client3
project_t = test1,test1,test1
[project:/]
@project_p = rw
* =
[project:/server]
@project_p = rw
@project_s = rw
* =
[project:/client]
@project_p = rw
@project_c = rw
* =
[project:/doc]
@project_p = rw
@project_s = r
@project_c = r
@project_t = r
* =
說明:以上信息表示,只有project_p用戶組有根目錄的讀寫權。r表示對該目錄有讀權限,w表示對該目錄有寫權限,rw表示對該目錄有讀寫權限。最後一行的* =表示,除了上面設置了權限的用戶組之外,其他任何人都被禁止訪問本目錄。這個很重要,一定要加上!
6,修改svnserve.conf文件,讓用戶和策略配置升效.
svnserve.conf內容如下:
注意:subversion讀取配置文件svnserve.conf時,無法識別有前置空格的配置文件
[general]
anon-access = none
==》anon前面不要留空格,
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz
7,啓動服務器
# svnserve -d -r /home/svn(d 代表隱藏, r 後面接目錄)
注意:如果修改了svn配置,需要重啓svn服務,步驟如下:
# ps -aux|grep svnserve
# kill -9 ID號
# svnserve -d -r /home/svn
8,測試服務器
# svn co svn://192.168.10.166/project
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for 'root':
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: server_group
Password for 'server_group':
svn: Authorization failed ( server_group沒用根目錄的訪問權 )
# svn co svn://192.168.60.10/project
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for ‘root’:
Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: pm
Password for ‘pm’:
A project/test
A project/server
A project/client
Checked out revision 1. ( 測試提取成功 )
# cd project/server
# vim main.c
# svn add main.c
# svn commit main.c -m “測試一下我的C程序,看什麼看,不行啊??”
Adding main.c
Transmitting file data .
Committed revision 2. ( 測試提交成功 )
三,配置SVN服務器的HTTP支持(svn的用戶驗證就失效了,因爲你是通過http訪問的,而不是svn協議)
Httpd.conf配置文件由如下代碼
<Location /svn>
DAV svn
#SVNListParentPath on
SVNParentPath /opt/svn/repositys
# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/svn/apache_authz
Require valid-user
# our access control policy
AuthzSVNAccessFile /usr/local/svn/svn_authz
</Location>
1,轉換SVN服務器的密碼,由於SVN服務器的密碼是明文的,HTTP服務器不與支持,所以需要轉換成HTTP支持的格式。我寫了一個Perl腳本完成這個工作. 腳本內容如下:
# cd /home/svn/project/conf/
# vim PtoWP.pl
#!/usr/bin/perl
# write by huabo, 2009-11-20
use warnings;
use strict;
#open the svn passwd file
open (FILE, "passwd") or die ("Cannot open the passwd file!!!n");
#clear the apache passwd file
open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!n");
close (OUT_FILE);
#begin
foreach (<FILE>) {
if($_ =~ m/^[^#].*=/) {
$_ =~ s/=//;
`htpasswd -b webpasswd $_`;
}
}
# chmod +x PtoWP.pl
# ./PtoWP.pl
Adding password for user pm
Adding password for user server_group
Adding password for user client_group
Adding password for user test_group
現在目錄下會多一個webpasswd文件。
2,修改httpd.conf,添加關於SVN服務器的內容
編輯/etc/httpd/conf/httpd.conf,在最後添加如下信息:
<Location /project>
DAV svn
SVNPath /home/svn/project/
AuthType Basic
AuthName "svn for project"
AuthUserFile /home/svn/project/conf/webpasswd
AuthzSVNAccessFile /home/svn/project/conf/authz
Satisfy all
Require valid-user
</Location>
3,修改svn目錄的屬主爲apache帳號:chown -R apache.apache /home/svn/project/
(注意:原文少了這一步,會出權限問題。)
4,重啓Web服務器:
# /etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
5,用瀏覽器訪問http://192.168.60.10/project/server/測試
下面建立可訪問用戶文件
# htpasswd -c /home/svn/authfile 用戶名
要增加用戶,則使用下面命令
# htpasswd /home/svn/authfile 用戶名
補充知識
啓動目錄決定訪問路徑
由上面可知道,啓動目錄爲./opt/svn/repositys,那麼訪問路徑就應該是
svn://192.168.10.25/eos4bank,
SVN標準目錄結構
trunk是主分支,是日常開發進行的地方,一般包含 :
0-Src 源碼
1-DevelopDoc 開發文檔
2-ProductDoc 產品文檔
3-ThirdPartyTools 第三方工具(插件)
4-Testing 測試
5-DeployDoc 部署文檔
ranches是分支。一些階段性的release版本,這些版本是可以繼續進行開發和維護的,則放在branches目錄中。
又比如爲不同用戶客製化的版本,也可以放在分支中進行開發。
tags目錄一般是隻讀的,這裏存儲階段性的發佈版本,只是作爲一個里程碑的版本進行存檔。