本文先講述如何單獨配置SVN服務器,之後再講述如何添加Apache的http訪問支持。
安裝環境:Fedora 19 / CentOS 6.4
(Windows也可當作SVN服務器,貌似配置過程很簡單,不過從穩定性上考慮,還是選用CentOS作爲服務器更爲理想)
獨立SVN服務器配置
1.安裝subversion包
1 | # yum install subversion |
2.初始化版本倉庫(Repositories)
安裝完subversion後,需要初始化一個版本倉庫,用於管理代碼。 新建目錄
1
|
#
mkdir -p /home/svn/project
|
在新建的目錄上創建倉庫
1 | # svnadmin create /home/svn/project |
這裏,svnadmin create之後跟的爲版本倉庫存放代碼的目錄地址,在本文中爲 /home/svn/project,當然,可以根據需求改成其它目錄,但請在以下的操作中根據具體目錄進行對應的修改。 在執行完svnadmin create操作後,在創建的倉庫下,會自動生成幾個目錄
1
2
|
ls/home/svn/project/
conf db format hooks locks README.txt
|
此時,如果你的電腦上有待進行管理的代碼目錄,可以將其導入(import)到SVN的倉庫中。作爲示例,這裏要導入的代碼目錄爲
1 | # svn import /home/chen/Lab file:///home/svn/project -m "初始化導入代碼目錄" |
在svn import命令中,末尾的-m(–message)選項表示爲執行操作的日誌消息,如果不加-m “消息內容”的話,此操作將會報錯svn: E205007。
如果導入成功,你將會看到諸如如下過程(此處截取了導入過程中的末尾部分)
1
2
3
4
5
6
7
8
|
Adding (bin) /home/chen/Lab/IntelPerformanceCounterMonitorV2.4/PCM-Memory_Win/pcm-memory-win.vcproj
Adding /home/chen/Lab/IntelPerformanceCoun(((ujterMonitorV2.4/freegetopt/README
Adding /home/chen/Lab/IntelPerformanceCounterMonitorV2.4/freegetopt/getopt.c
Adding /home/chen/Lab/IntelPerformanceCounterMonitorV2.4/freegetopt/ChangeLog
Adding /home/chen/Lab/IntelPerformanceCounterMonitorV2.4/.gitignore
Adding /home/chen/Lab/IntelPerformanceCounterMonitorV2.4/FREEBSD_HOWTO.txt
Committedrevision1.
|
3.用戶管理及權限設置
SVN服務器的配置文件主要有3個,分別爲
1 2 3 | /your_svn_repos/conf/passwd --用戶名及密碼管理 /your_svn_repos/conf/authz --權限配置 /your_svn_repos/conf/svnserve.conf --SVN全局配置文件 |
添加用戶
添加用戶只需要打開/home/svn/project/conf/passwd文件,添加一行形如“user = password”條目即可。這裏,作爲示例,添加一個admin賬戶,密碼爲123456,以及其它2個賬戶則passwd文件如下
1
2
3
4
5
6
7
8
9
10
11
|
###
This file is an example password file for svnserve.
###
Its format is similar to that of svnserve.conf. As shown in the
###
example below it contains one section labelled [users].
###
The name and password for each user follow, one account per line.
[users]
#
harry = harryssecret
#
sally = sallyssecret
admin=123456
role_a=123456
role_b=123456
|
用戶訪問策略配置
/home/svn/project/conf/authz文件用於管理用戶以及用戶組的訪問策略。authz文件中包含若干個節,包括[groups]以及類似[repository:/baz/fuz]這樣的節,注意[groups]節,這裏用於定義用戶組,在[groups]節中定義完不同組的用戶後可以很方便的利用組進行權限管理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe g_admin = admin g_common = role_a,role_b [/] @g_admin = rw * = [project:/] @g_admin = rw @g_common = rw * = |
在以上的authz文件中,定義了組g_admin和g_common,g_admin組中包含有admin用戶,g_common組中包含了用戶role_a和role_b。
接下來進行具體目錄的權限控制,可用類似 user = rw 類似的方式爲用戶分配該目錄的對應權限,也可用 @groupname = rw 類似的方式爲用戶組分配該目錄的對應權限,r代表可讀,w代表可寫,rw代表可讀可寫。同時,一定要注意在末尾添加其他人的權限設置,利用 * 通配符代表除了之前提到的其他人。* = 表示其他人不具有任何權限。
注意到文件中的兩個節[/]和[project:/],[/]表示SVN根目錄的權限配置,而[project:/]表示庫project的根目錄權限配置,二者存在細微的差別,但是若沒搞清楚,則會導致訪問時驗證失敗或連接失敗等問題。這裏需要涉及到SVN服務啓動過程的命令,具體見4.啓動SVN服務器中的描述。除此之外還可參考:基於svnserve的服務器,權限文件authz配置的常見問題及解答
SVN全局配置文件
/home/svn/project/conf/subserve.conf 爲SVN的全局配置文件,這裏取消對應行的註釋並指定適當的值,注意不要行前不要留空格,具體如下
1
2
3
4
5
|
[general]
anon-access=none --匿名用戶默認情況下不具有任何權限
auth-access=write --授權用戶具默認情況下有寫權限
password-db=/home/svn/project/conf/passwd --指定passwd文件所在位置
authz-db=/home/svn/project/conf/authz --指定authz文件所在位置
|
4.啓動SVN服務器
1 | # svnserve -d -r /home/svn |
-d 表示以deamon方式運行,即後臺運行。 -r用於指定SVN服務根目錄,這裏我們指定的根目錄爲 /home/svn。
聯繫到authz文件中,[/]節中的權限則對應 /home/svn 下權限,[project:/]節中的權限即對應 /home/svn/project 下的權限。但是如果指定SVN服務根目錄爲 /home/svn/project,那麼authz文件中[/]代表目錄 /home/svn/project,而此時[project:/]則沒有對應目錄,因爲/home/svn/project下並沒有名爲project的倉庫,所以就會出錯。
如果修改了SVN的配置文件,那麼需要重啓SVN服務器才能使修改生效。
1
2
3
|
#
ps -aux|grep svnserve
#
kill -9 pid_of_svnserve
#
svnserve -d -r /home/svn
|
5.在防火牆中開放SVN端口
如果不在防火牆中開放SVN默認端口3690,則會出現,服務器本機可以訪問SVN服務,而其它網內機器無法連接SVN服務器的錯誤。
首先關閉selinux,修改 /etc/selinux/config 文件
1 | SELINUX=disabled |
SVN服務的默認端口爲3690,設置防火牆開放3690端口
1
2
3
4
|
#
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
#
iptables -I OUTPUT -p tcp --sport 3690 -j ACCEPT
#
service iptables save
#
service iptables restart
|
6.測試SVN服務器
隨意找一個目錄,嘗試從SVN服務器簽出(check out)倉庫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # svn co svn://58.154.190.***/project Authentication realm: <svn://58.154.190.***:3690> ecf95e5d-5de1-44de-91b3-f44b1bd795d1 Password for 'root': Authentication realm: <svn://58.154.190.***:3690> ecf95e5d-5de1-44de-91b3-f44b1bd795d1 Username: admin Password for 'admin': ----------------------------------------------------------------------- ATTENTION! Your password for authentication realm: <svn://58.154.190.***:3690> ecf95e5d-5de1-44de-91b3-f44b1bd795d1 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 ... ... A project/IntelPerformanceCounterMonitorV2.4/pcm3d/widget.h A project/IntelPerformanceCounterMonitorV2.4/pcm-memory.cpp A project/IntelPerformanceCounterMonitorV2.4/pcm-sensor.cpp A project/IntelPerformanceCounterMonitorV2.4/.gitattributes Checked out revision 1. |
在第一次簽出的時候會提示是否保存明文密碼(因爲SVN的密碼是明文保存的,所以SVN的賬戶安全依賴與Linux系統賬戶的安全)選擇”yes”的話下次就不需要在輸入密碼了,反之,選擇”no”的話下次操作還需進行身份驗證。如果想換個身份操作SVN或者密碼輸錯太多被拒絕,可以刪除用戶目錄下的 ~/.subversion 文件夾以清空身份信息。
如果能順利 check out revision 則表明獨立SVN服務器配置已成功。
這時不論是在服務器本機上還是其它客戶端機器,均能使用SVN服務。對於客戶端操作系統爲Windows的計算機,可以安裝TortoiseSVN進行相應的客戶端操作。
爲SVN服務器添加HTTP支持
經過上面的配置過程後,SVN服務器已經可以正常使用,但是,只能通過SVN協議,無法通過http協議訪問。爲SVN服務器添加HTTP支持可以使得用戶能用瀏覽器通過HTTP協議直接查看倉庫內容,同時也可以在代碼簽出提交時使用HTTP協議。
1.安裝必要包
1
|
yuminstallhttpdmod_dav_svnmod_perl perl*ntsysvvim-enhanced
|
2.轉換SVN明文密碼爲HTTP要求的加密格式
SVN的密碼是明文保存的,而http服務器不支持明文密碼,所以需要將SVN服務的明文密碼轉換爲http要求的加密格式,可以通過以下的perl腳本完成:
移動到 /home/svn/project/conf 目錄下,編輯perl腳本 PtoWP.pl (此腳本的作者爲ha97)
1 2 | cd /home/svn/project/conf/ vim PtoWP.pl |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/perl
usewarnings;
usestrict;
#open
the svn passwd file
open(FILE,"passwd")ordie("Cannot
open the passwd file!!!n");
#clear
the apache passwd file
open(OUT_FILE,">webpasswd")ordie("Cannot
open the webpasswd file!!!n");
close(OUT_FILE);
#begin
foreach(){
if($_=~m/^[^#].*=/)
{
$_=~s/=//;
`htpasswd-bwebpasswd$_`;
}
}
|
爲腳本添加可執行屬性
1 | # chmod +x PtoWP.pl |
在目錄 /home/svn/project/conf/passwd 所在目錄中運行PtoWP.pl腳本,對passwd文件進行轉換
1
|
#
./PtoWP.pl
|
轉換過程如下
1 2 3 | Adding password for user admin Adding password for user role_a Adding password for user role_b |
轉換完成後目錄下會出現一個 webpasswd 文件,即爲http支持的密碼文件。
2.修改http.conf,使得http支持SVN
1
|
vim/etc/httpd/conf/httpd.conf
|
在httpd.conf文件的最後添加如下信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 服務模塊 DAV svn # 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 |
看了不少文章,有部分文章說在這裏還需添加兩個模塊的語句,另外還需要 yum install subversion-deps-* 包來使得svn得到http的支持。
1
2
|
LoadModuledav_svn_modulemodules/mod_dav_svn.so
LoadModuleauthz_svn_modulemodules/mod_authz_svn.so
|
但是,根據官方的說明(Please note that the dependencies distribution subversion-deps-* is no longer available in 1.7 and later.)也就是說在1.7以及1.7之後的版本中不需要安裝依賴的subversion-deps-*包,而本人實驗證明,也不需要在httpd.conf文件中添加上述兩行加載模塊的語句。
修改SVN主目錄的所有者和所屬組爲Apache
1 | # chown -R apache.apache /home/svn/project/ |
3.在防火牆中開放httpd服務的80端口
1
2
3
4
|
#
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#
iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
#
service iptables save
#
service iptables restart
|
如果不在防火牆中開放80端口,則會出前客戶機無法通過http協議連接SVN服務器的情況。
注:關於服務重啓命令,在fedora 19中採用的是systemctl restart service_name.service形式。
4.重啓httpd服務
1 | # service httpd restart |
5.通過瀏覽器測試
在瀏覽器地址欄輸入 http://your_svn_server_ip/project,在彈出的身份確認框中輸入用戶名密碼,能通過瀏覽器查看SVN倉庫。
同時可以通過http協議執行svn操作
1
2
3
4
5
6
|
$svncohttp://your_svn_server_ip/project
Authenticationrealm:<http://58.154.190.***:80>
svn for project
Passwordfor'chen':
Authenticationrealm:<http://58.154.190.***:80>
svn for project
Username:admin
Passwordfor'admin':
|
下面暫時就不參考 網頁 http://www.ha97.com/4467.html 了( 上面講的這步太複雜 ) PtoWP.pl 不需要建立. 按下面的做就好 安裝httpd: cd / find -name httpd 如果 httpd 找不到表示沒有安裝,需要安裝 yum install httpd cd /etc/httpd/conf/ vi + httpd.conf 在 httpd.conf的末尾加上 : ############################################################################ <Location /Test > DAV svn SVNPath /home/svn/ repos/ AuthType Basic AuthName "svn for repos" AuthUserFile /home/svn/repos/conf/passwd AuthzSVNAccessFile /home/ svn/repos/conf/authz Satisfy all Require valid-user </Location> LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so ServerName localhost:80 ############################################################################ 下面再: yum install mod_dav_svn find / -name mod_dav_svn.so find / -name mod_authz_svn.so 驗證這兩個 so存不存在 /etc/init.d/httpd restart 看是否報錯 (Stopping httpd FAILED報錯沒事的) ps -aux|grep svnserve kill -9 29189 svnserve -d -r /home/web/Test 用小烏龜查看 svn://192.168.16.230/phone7_drore 看是否能訪