源自《Linux 運維之道》丁一明編著 一書的總結web
三種訪問方式數據庫
功能apache |
Apache+DAVubuntu |
Svnservevim |
Svnserve+SSH瀏覽器 |
認證安全 |
http基本認證、LDAP服務器 |
支持md5session |
Ssh認證運維 |
權限 |
對版本總體設置,也能夠指定設置權限 |
客隊版本總體設置權限,也能夠指定目錄 |
僅對版本庫總體設置權限 |
加密 |
支持ssl加密 |
無 |
支持ssh加密 |
日誌 |
完善的apache日誌 |
無 |
無 |
速度 |
慢 |
快 |
快 |
設置 |
相對複雜 |
簡單 |
相對簡單 |
安裝:
[root@localhost tcpcliserv]# yum -y install subversion
建立版本庫,利用svnadmin工具
svnadmin:命令create 建立一個新的版本庫
hotcopy 版本庫熱備份
lslocks 打印全部的鎖
[root@localhost tcpcliserv]# mkdir /var/svn
[root@localhost tcpcliserv]# svnadmin create /var/svn/web_project
[root@localhost tcpcliserv]# mkdir /var/web_code
[root@localhost tcpcliserv]# touch /var/web_code/test
[root@localhost tcpcliserv]# svn import /var/web_code/ file:///var/svn/web_project/ -m "Initial Data"
Adding /var/web_code/test
Committed revision 1.
[root@localhost tcpcliserv]# svn list file:///var/svn/web_project
test
創建有效的認證機制以加強版本數據庫的安全性
[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/authz
[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/passwd
[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/svnserve.conf
[root@localhost tcpcliserv]# svnserve -d -r /var/svn/
其中authz文件,添加內容
[groups]
admins=harry,sally #定義組,組成員有harry和sally
[/] #對版本庫根路徑設置權限,能夠設置爲須要控制的路徑
@admins=rw #admins組中的用戶可讀、可寫權限
*=r #其餘全部的人只讀,權限能夠設置爲’r’只讀,讀寫’rw’、無權限’ ‘
Passwd添加內容
[users]
harry = 123
sally = 123
svnserve.conf添加內容
[general]
anon-access=none
auth-access=write
password-db=passwd
authz-db=authz
real=My First Repository
啓動服務器相應的進程
啓動svnserve服務
-d 以守護進程方式運行svnserve
--listen-port=port 指定監聽的端口,默認監聽端口號爲3690
-r root 爲版本庫指定一個虛擬路徑,默認客戶端要指定絕對路徑訪問庫
[root@localhost tcpcliserv]# svnserve -d -r /var/svn/
Svn服務默認監聽端口3690,注意要設置。同時要注意在authz文件中爲目錄設置權限,路徑應該爲[web_project:/]。
客戶端訪問
root@ubuntu:/home/tempal# svn co svn://192.168.118.253/project1 mine
svn: No repository found in 'svn://192.168.118.253/project1'
root@ubuntu:/home/tempal# svn co svn://192.168.118.253/web_project mine
認證領域: <svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536
「root」的密碼:
認證領域: <svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536
用戶名: harry
「harry」的密碼:
-----------------------------------------------------------------------
注意! 你的密碼,對於認證域:
<svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536
只能明文保存在磁盤上! 若是可能的話,請考慮配置你的系統,讓 Subversion
能夠保存加密後的密碼。請參閱文檔以得到詳細信息。
你能夠經過在「/root/.subversion/servers」中設置選項「store-plaintext-passwords」爲「yes」或「no」,
來避免再次出現此警告。
-----------------------------------------------------------------------
保存未加密的密碼(yes/no)? yes
A mine/test
取出版本 1。
命令:
svn命令:客戶端命令行工具
Svnlook命令:subversion檢查工具
[root@localhost tcpcliserv]# svnlook author /var/svn/web_project/
Root
Svnserve+SSH服務器。
客戶端須要使用ssh程序鏈接遠程服務器的sshd服務,經過ssh認證機制驗證帳戶身份後,再自動啓動svnserve服務。因此服務器端不須要提早啓動svn服務。
[root@localhost tcpcliserv]# mkdir /var/code2
[root@localhost tcpcliserv]# touch /var/code2/test
[root@localhost tcpcliserv]# svnadmin create /var/svn/web_project2
[root@localhost tcpcliserv]# svn import /var/code2 file://var/svn/web_project2 -m "Web code"
svn: Unable to open an ra_local session to URL
svn: Local URL 'file://var/svn/web_project2' contains unsupported hostname
[root@localhost tcpcliserv]# svn import /var/code2 file:///var/svn/web_project2 -m "Web code"
Adding /var/code2/test
在客戶端訪問
Committed revision 1.
[root@localhost tcpcliserv]# service sshd start
[root@localhost tcpcliserv]# chkconfig sshd on
Apache+SVN服務器搭建
雖然前面兩種服務器已經知足多數人的使用需求,但當客戶端沒有任何工具可使用時,咱們還能夠建立基於Apache的SVN服務器,這樣只要客戶端有瀏覽器就能夠訪問版本庫服務器。使用Apache Web Server訪問版本庫須要加載mod_dav和mod_dav_svn模塊。
[root@localhost tcpcliserv]# gedit /etc/httpd/conf.d/subversion.conf
[root@localhost tcpcliserv]# chown -R apache.apache /var/svn
[root@localhost tcpcliserv]# chcon -R -t httpd_sys_content_t /var/svn
[root@localhost tcpcliserv]# htpasswd -c /var/svn/.pass jerry
New password:
Re-type new password:
Adding password for user jerry
[root@localhost tcpcliserv]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[ OK ]
[root@localhost tcpcliserv]# chkconfig httpd on
更改的/etc/httpd/conf.d/subversion.conf 內容以下:爲了讓Apache Web Server能夠讀取SVN版本中的數據,要確保mod_dav和mod_authz_svn兩個模塊會被加載。
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
#添加內容
<Location /svn>
#當用戶的URL是以/svn開始(http://hostname/svn/...),Apache會將控制權交給DAV處理
DAV svn
SVNParentPath /var/svn
#經過SVNParentPath指定全部版本庫的主目錄(發佈全部的版本庫)
# Limit write permission to list of valid users.
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic #Apache認證方式
AuthName "Authorization Realm"#提示字符
AuthUserFile /var/svn/.pass#帳戶文件路徑,爲了安全,應該隱藏該文件
Require valid-user#設置僅爲有效用戶能夠訪問
</Location>
#除了上面兩個模塊,還要確保/etc/httpd/conf/httpd.conf文件中dav_module模塊也會被加載
# Example configuration to enable HTTP access for a directory
# containing Subversion repositories, "/var/www/svn". Each repository
# must be both:
#
# a) readable and writable by the 'apache' user, and
#默認Apache的啓動用戶爲apache,因此須要apache用戶對版本庫有讀寫權限
# b) labelled with the 'httpd_sys_content_t' context if using
#若是開啓了SELinux,這版本庫目錄須要有httpd_sys_content_t安全上下文標籤。
# SELinux
#
#
# To create a new repository "http://localhost/repos/stuff" using
# this configuration, run as root:
#
# # cd /var/www/svn
# # svnadmin create stuff
# # chown -R apache.apache stuff
# # chcon -R -t httpd_sys_content_t stuff
#
#<Location /repos>
# DAV svn
# SVNParentPath /var/www/svn
#
# # Limit write permission to list of valid users.
# <LimitExcept GET PROPFIND OPTIONS REPORT>
# # Require SSL connection for password protection.
# # SSLRequireSSL
#
# AuthType Basic
# AuthName "Authorization Realm"
# AuthUserFile /path/to/passwdfile
# Require valid-user
# </LimitExcept>
#</Location>