linux 下svn配置

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安裝會使用到aprpar-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

./configur-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(所有的配置文件裏面的文字都要定行首不留空格!要不然不識別,)

svnbin目錄加到環境變量中去

[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標準目錄結構

2.1 目錄結構概述

 

2.1.1 目錄 trunk 

trunk是主分支,是日常開發進行的地方,一般包含 : 

0-Src 源碼

1-DevelopDoc 開發文檔

2-ProductDoc 產品文檔

3-ThirdPartyTools 第三方工具(插件)

4-Testing 測試

5-DeployDoc 部署文檔

2.1.2 目錄branches

ranches是分支。一些階段性的release版本,這些版本是可以繼續進行開發和維護的,則放在branches目錄中。

又比如爲不同用戶客製化的版本,也可以放在分支中進行開發。

2.1.3 目錄 tags 

tags目錄一般是隻讀的,這裏存儲階段性的發佈版本,只是作爲一個里程碑的版本進行存檔。

2.2 權限分配:修改authz文件

 


 

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