今天領導讓搭建一套svn服務器,用來存一些文檔,本覺得是很簡單的一件事情,但是過程並無那麼順利,主要是不理解SVNParentPath和SVNPath致使的問題,在通過查找文檔和調試以後,才弄清楚他們的使用和區別,因此特此記錄一下。html
yum install httpd svn mod\_dav\_svn
[root@chenxz-test1 conf.d]# svn --version svn, version 1.7.14 (r1542130) compiled Apr 11 2018, 02:40:28 Copyright (C) 2013 The Apache Software Foundation. This software consists of contributions made by many people; see the NOTICE file for more information. Subversion is open source software, see http://subversion.apache.org/ The following repository access (RA) modules are available: * ra_neon : Module for accessing a repository via WebDAV protocol using Neon. - handles 'http' scheme - handles 'https' scheme * ra_svn : Module for accessing a repository using the svn network protocol. - with Cyrus SASL authentication - handles 'svn' scheme * ra_local : Module for accessing a repository on local disk. - handles 'file' scheme [root@chenxz-test1 conf.d]# httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Aug 8 2019 11:41:18
#建立倉庫目錄
[root@chenxz-test1 ~]# mkdir -p /home/data/svn
#建立svn倉庫
[root@chenxz-test1 ~]# svnadmin create /home/data/svn/testlinux
#建立svn用戶及密碼
[root@chenxz-test1 conf.d]# htpasswd -c /home/data/svn/passwd chenxz
New password:
Re-type new password:
Adding password for user chenxzapache
svn用戶權限有authz文件控制,該文件由[groups]配置段和若干版本庫路徑權限段組成centos
[groups]配置段格式:<用戶組>=<用戶列表>服務器
用戶列表由若干個用戶組或用戶名構成,用戶組或用戶名之間用逗號","分隔,引用用戶組時要使用前綴"@"svn
版本庫路徑權限段格式:ui
[<版本庫名>:<路徑>]如版本庫abc路徑/tmp的版本庫路徑權限段的段名爲"[abc:/tmp]"。spa
可省略段名中的版本庫名。若省略版本庫名,則該版本庫路徑權限段對全部版本庫中相同路徑的訪問控制都有效。如:[/tmp].net
版本庫路徑權限段中配置行格式有以下三種:
<用戶名> = <權限>
<用戶組> = <權限>
* = <權限>
其中,"*"表示任何用戶;權限的取值範圍爲''、'r'和'rw',''表示對該版本庫路徑無任何權限,'r'表示具備只讀權限,'rw'表示有讀寫權限。調試
注意:每行配置只能配置單個用戶或用戶組。
#authz文件在每一個倉庫的conf文件夾下都有,這裏是爲了統一管理用戶權限,因此從倉庫拷貝受權文件到倉庫上級目錄,
cp /home/data/svn/test/conf/authz /home/data/svn/
#在auth文件最後追加如下配置
[/]
chenxz = rw
LoadModule dav\_svn\_module modules/mod\_dav\_svn.so LoadModule authz\_svn\_module modules/mod\_authz\_svn.so <Location /svn> DAV svn SVNParentPath /home/data/svn AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /home/data/svn/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location>
[root@chenxz-test1 ~]# chown apache.apache /home/data/svn/ -R
[root@chenxz-test1 conf.d]# systemctl start httpd
百度「SVNParentPath和SVNPath的區別」基本無一例外都是下面這種說法
在svn中文網中找到mod_dav_mod,能夠看到官網對SVNParentPath和SVNPath的說明
因此二者的區別就是,SVNParentPath指定的是倉庫的上級目錄,能夠管理其配置目錄下面的全部倉庫,這樣作的好處是,只須要用一個authz文件管理用戶,並且若是你須要一個超級管理員帳戶,能夠登陸全部SVNParentPath下面的倉庫,這時在authz文件裏配置[/]便可表明全部的倉庫,並且使用SVNParentPath只須要在apache裏面配置一個location;SVNPath指定的是一個倉庫的目錄,只能管理一個倉庫,這樣作的好處是,對權限管理更加嚴格,這種狀況下的authz文件裏配置的[/]只能表明該倉庫,缺點是每增長一個倉庫,就須要在apache裏面添加一個location。下面將給出兩種配置和對應的訪問方式。
LoadModule dav\_svn\_module modules/mod\_dav\_svn.so LoadModule authz\_svn\_module modules/mod\_authz\_svn.so #location這裏使用倉庫的上級目錄 <Location /svn> DAV svn #指向倉庫的上級目錄 SVNParentPath /home/data/svn AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /home/data/svn/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location>
訪問方式 http://ip/倉庫的上一級/倉庫名 如 http://192.168.202.128/svn/test
LoadModule dav\_svn\_module modules/mod\_dav\_svn.so LoadModule authz\_svn\_module modules/mod\_authz\_svn.so #location這裏使用倉庫目錄 <Location /test> DAV svn #指向倉庫目錄 SVNPath /home/data/svn/test AuthType Basic AuthName "Authorization SVN" #authz文件指向倉庫下的authz,固然指向一個統一的authz也不會出錯,可是這麼作就失去了使用SVNPath的意義 AuthzSVNAccessFile /home/data/svn/test/conf/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location> #多個倉庫須要多個location <Location /mytest> DAV svn SVNPath /home/data/svn/mytest AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /home/data/svn/mytest/conf/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location>
訪問方式 http://ip/倉庫名 如 http://192.168.202.128/test
出現的問題都是由於在location、SVNPath和SVNParentPath後接的目錄不對致使的,好比我像下面這麼配置
LoadModule dav\_svn\_module modules/mod\_dav\_svn.so LoadModule authz\_svn\_module modules/mod\_authz\_svn.so <Location /test> DAV svn SVNParentPath /home/data/svn/test AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /home/data/svn/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location>
就會出現下面的錯誤
再好比我像下面這樣配置
LoadModule dav\_svn\_module modules/mod\_dav\_svn.so LoadModule authz\_svn\_module modules/mod\_authz\_svn.so <Location /test> DAV svn SVNPath /home/data/svn AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /home/data/svn/authz AuthUserFile /home/data/svn/passwd Require valid-user </Location>
就會出現下面的報錯
參考: