1。前言今天领导要求搭建一套svn服务器,用来存放一些文件。本来以为是很简单的事情,但是过程并不是那么顺利,主要是没有理解SVNParentPath和SVNPath带来的问题。经过查找文档和调试,弄明白了它们的用途和区别,特此记录。2.centos7搭建svn+apache服务器1.关闭selinux和防火墙2。安装svn和apache和mod_dav_svn模块yuminstallhttpdsvnmod\_dav\_svn3。查看svn和apache版本,确定安装成功[root@chenxz-test1conf.d]#svn--versionsvn,version1.7.14(r1542130)compiledApr112018,02:40:28Copyright(C)2013TheApacheSoftwareFoundation.本软件汇集了很多人的贡献;有关更多信息,请参阅NOTICE文件。Subversion是开源软件,请参阅http://subversion.apache.org/以下存储库访问(RA)模块可用:*ra_neon:使用Neon通过WebDAV协议访问存储库的模块。-处理“http”方案-处理“https”方案*ra_svn:使用svn网络协议访问存储库的模块。-使用CyrusSASL身份验证-处理“svn”方案*ra_local:用于访问本地磁盘上的存储库的模块。-处理“文件”方案[root@chenxz-test1conf.d]#httpd-vServer版本:Apache/2.4.6(CentOS)服务器构建时间:8月8日201911:41:184。创建仓库#createwarehousedirectory[root@chenxz-test1~]#mkdir-p/home/data/svn#createsvnwarehouse[root@chenxz-test1~]#svnadmincreate/home/data/svn/test5.Createsvnuser#Createsvnuserandpassword[root@chenxz-test1conf.d]#htpasswd-c/home/data/svn/passwdchenxzNewpassword:Re-typenewpassword:添加用户chenxz6的密码。用户权限管理svn用户权限由authz文件控制,由[groups]配置段和几个repositorypath权限段组成[groups]配置段格式:=用户列表包括几个由用户组或用户名组成,用户组或用户名之间用逗号“,”隔开,提到用户组时要使用前缀“@”。版本库路径权限段格式:[:]如版本库abcpath/tmp的版本库路径权限段段名称为“[abc:/tmp]”版本库名称节名中的可以省略。如果省略版本库名称,则版本库路径权限段对所有版本库中相同路径的访问控制有效。例如:[/tmp]版本库路径的权限部分有三种配置行格式:==*=其中,“*”表示任意用户;权限的取值范围为''、'r'和'rw',''表示对版本库路径无权限,'r'表示只读权限,'rw'表示读写权限。注意:每行配置只能配置一个用户或用户组。#authz文件存在于各个仓库的conf文件夹下。这是为了统一管理用户权限,所以把授权文件从仓库复制到仓库的上层目录,cp/home/data/svn/test/conf/authz/home/data/svn/#添加以下是auth文件末尾的配置[/]chenxz=rw7.修改配置文件/etc/httpd/conf.d/subversion.conf(如果没有,新建一个),内容为:LoadModuledav\_svn\_modulemodules/mod\_dav\_svn.soLoadModuleauthz\_svn\_modulemodules/mod\_authz\_svn.soDAVsvnSVNParentPath/home/data/svnAuthTypeBasichAuthName"AccessAuthorizationFilez/SVNAdata"svn/authzAuthUserFile/home/data/svn/passwd需要有效-user8.配置apache到SVN目录权限[root@chenxz-test1~]#chownapache.apache/home/data/svn/-R9.Startapache[root@chenxz-test1conf.d]#systemctl启动httpd10。使用http访问,输入用户名和密码并返回版本号即可构建成功3.SVNParentPath与SVNPath的区别一个例外是下面的语句。在svn中文网找到mod_dav_mod。可以看官网对SVNParentPath和SVNPath的说明。仓库,这样做的好处是只需要用一个authz文件来管理用户,如果需要超级管理员账号,就可以登录对于SVNParentPath下的所有仓库,在authz文件中配置[/]代表所有仓库,使用SVNParentPath只需要在Apache中配置一个位置即可;SVNPath指定一个仓库目录,只能管理一个仓库。这样做的好处是权限管理更加严格。这种情况下authz文件中配置的[/]只能代表仓库。缺点是每次添加一个仓库,都需要在apache中添加一个location。下面将给出两种配置和对应的访问方式。1.Apache使用SVNParentPath时的配置LoadModuledav\_svn\_modulemodules/mod\_dav\_svn.soLoadModuleauthz\_svn\_modulemodules/mod\_authz\_svn.so#location这里使用仓库的上层目录DAVsvn#指向仓库的上层目录user访问方式http://ip/上层仓库/仓库名如http://192.168.202.128/svn/test2。Apache配置LoadModuledav\_svn\_modulemodules/mod\_dav\_svn.so使用SVNPath时LoadModuleauthz\_svn\_modulemodules/mod\_authz\_svn.so#location这里使用仓库目录DAVsvn#指向仓库目录SVNPath/home/data/svn/testAuthTypeBasicAuthName"AuthorizationSVN"#authzfile指向仓库下的authz,当然指向统一的authz不会出错,但是这样做会丢失使用SVNPath的意义AuthzSVNAccessFile/home/data/svn/test/conf/authzAuthUserFile/home/data/svn/passwdRequirevalid-user#多个仓库需要多个位置DAVsvnSVNPath/home/data/svn/mytestAuthTypeBasicAuthName"AuthorizationSVN"AuthzSVNAccessFile/home/data/svn/mytest/conf/authzAuthUserFile/home/data/svn/passwd需要有效用户访问方式http://ip/仓库名如http://192.168.202.128/test4。遇到的问题都是location、SVNPath和SVNParentPath后面的目录错误导致的。比如我喜欢ConfigureLoadModuledav\_svn\_modulemodules/mod\_dav\_svn.soLoadModuleauthz\_svn\_modulemodules/mod\_authz\_svn.soDAVsvnSVNParentPath/home/data/svn/testAuthTypeBasicAuthName"AuthorizationSVN"AuthzSVNAccessFile/home/data/svn/authzAuthUserFile/home/data/svn/passwdRequirevalid-user会出现如下错误。例如,如果我按如下方式配置LoadModuledav\_svn\_modulemodules/mod\_dav\_svn.soLoadModuleauthz\_svn\_modulemodules/mod\_authz\_svn.soDAVsvnSVNPath/home/data/svnAuthTypeBasicAuthName"AuthorizationSVN"AuthzSVNAccessFile/home/data/svn/authzAuthUserFile/home/data/svn/passwdRequirevalid-user会出现如下错误参考:CentOS7+Apache+SVN安装配置,通过HTTPSVNParentPath和SVNPathmod_dav_mod访问SVN+apache-SVN中文网