SVN+Linux+Apache配置
laifujnyd
|
1#
laifujnyd 发表于 2007-09-29 01:00
SVN+Linux+Apache配置
花了一天终于搞定了:
1 SVN和apache的安装: 安装的事情,网上有很多,由于用的是fedora直接yum下来了,注意apache在yum中名为httpd,为了使apache能够配合SVN的访问控制必须安装mod_authz_svn.so库,在yum中搜索svn,apache便可看见软件包.最后应当确定在/usr/lib/httpd/modules下有一下四个文件:mod_dav.so,mod_dav_fs.so,mod_dav_svn.so,mod_authz_svn.so后两个文件可在% SVN_HOME%/bin中找到(我安装后moudules目录下就存在了所以没有用bin目录下的文件. SVN安装完后:用svnserve -d启动后台服务,并用netstat -ntlp 查看有没有程序3690端口绑定来查看svnserve服务是否启动,关闭服务用killall svnserve命令 httpd服务启动后可由浏览器直接访问服务器IP 2 Linux SVN管理账户的建立 新增加用来管理SVN账户的linux账户我新建的账户名为SVNAD,相对应的组也是SVNAD,将apache账户添加入SVN组,确保apache对/home/SVNAD组有目录下所有文件有所有权限.否则往后在使用web方式访问SVN时可能会有错误,比如所在浏览器中显示Could not open the requested SVN filesystem,然后在/etc/http/logs/error_log中有关于access deny的错误.error_log是记录apache错误的地方,有错误应当上这里看看,然后到网上搜索相关错误. 3 建立SVN根目录与相关repository(就是工程目录) 在/home/SVNAD下建立SVN根目录mkdir SVNRoot(当然名字可自定),进入SVNRoot,建立工程目录,我先建立一个C,进入C,执行命令svnadmin create /home/SVNAD/C (也有文章说用 svnadmin create --fs-type fsfs /home/svnroot/repository/test来建立,我都试过,暂时没发现区别)建立reposityory,建完之后C目录下应有一下内容: conf dav db format hooks locks README.txt 可在conf中配置用户权限以及用户,用户权限与下面要讲到的多库权限设置基本相同,用户则是由username = password组成,都为明文未加密,由于我们使用apache来控制访问权限,在此不多将. 另外到了这一步后可用svnserve -d -r /home/svnroot/repository/test1 --listen-host 192.168.1.18之类的命令来启动svn服务,并通过svn://192.168.1.18来访问svn服务器,如果不想使用apache的话,到这一步就可以结束了. 4 apache与svn绑定 确定/etc/httpd/conf.d/下有subversion.conf文件,没有的话要确定/etc/httpd/conf/httpd.conf中有下面四行,且没有被#注释掉: LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 接着在httpd.conf或subversion.conf中加入一下配置信息(注意去掉不必要可空格,确实需要空格的地方需要用""号包括): <Location "/svn"> DAV "svn" # SVNPath "/home/SVNAD/SVNRoot/" SVNParentPath "/home/SVNAD/SVNRoot/" AuthType Basic AuthName "Subversion On AD" AuthUserFile "/home/SVNAD/SVNRoot/passwd" Require valid-user AuthzSVNAccessFile "/home/SVNAD/SVNRoot/authz" Satisfy Any </Location> 配置的意义如下: <Location "/svn"> # "/svn"是在url上指定的访问路径,客户访问需要键入这个路径。 DAV "svn" # 声明svn SVNPath "/home/SVNAD/SVNRoot" # "E:\svn"是服务器上svn的repository的目录。 SVNParentPath "/home/SVNAD/SVNRoot" ` # 对于一个目录下存在多个工程的情况,可以声明这个变量。 # 在apache中配置svn有两种,可以混合使用,一种是apache自身的认证机制, # 对进入/repos目录的用户进行统一认证, # 一种是应用svn的认证,可以深入到目录级别进行权限控制, # 和svn独立启动时设置权限一样。 ### apache auth begin AuthType Basic AuthName "Subversion" # 认证的名字 AuthUserFile "/home/SVNAD/SVNRoot/passwd" # "/home/SVNAD/SVNRoot/passwd" 里面存放的是使用htpasswd -m # "/home/SVNAD/SVNRoot/passwd" user # 生成的用户名与密码的加密文件。注意,此处的路径不能有空格。 Require valid-user # 声明,必须是有效的用户才可以访问 ### apache auth end ### svn auth begin AuthzSVNAccessFile "/home/SVNAD/SVNRoot/conf/authz" # "/home/SVNAD/SVNRoot/conf/authz"文件是根据%respository% # /conf/authz的规则编写,其实就 # 是svn对用户权限读取的文件格式,mod_authz_svn.so要求的格式。 #SVNIndexXSLT "d:\svnindex.xsl" # d:\svnindex.xsl是用户可以自定义的显示模版,设计好模板,html上的显 # 会更漂亮。 # authentication if necessary. Satisfy Any # 字面翻译是:都要满足,是声明用户要满足条件 Require valid-user # 声明,必须是有效的用户才可以访问 ### svn auth end </Location> 5 用户与权限 SVN用户用apache用户来代替: htpasswd /home/SVNAD/SVNRoot/passwd -cm username来建立用户文件,c代表创建文件,m代表md5加密存储. 以后可用htpasswd /home/SVNAD/SVNRoot/passwd -m username来添加用户 用htpasswd /home/SVNAD/SVNRoot/passwd -D username来删除用户 权限管理 在/home/SVNAD/SVNRoot下建立authz内容如下: ### This file is an example authorization file for svnserve. ### Its format is identical to that of mod_authz_svn authorization ### files. ### As shown below each section defines authorizations for the path and ### (optional) repository specified by the section name. ### The authorizations follow. An authorization line can refer to a ### single user, to a group of users defined in a special [groups] ### section, or to anyone using the '*' wildcard. Each definition can ### grant read ('r') access, read-write ('rw') access, or no access ### (''). [groups] # harry_and_sally = harry,sally admin = AD HoAdmin = admin2 reader = test [/] @reader = r [C:/] @admin = rw [Holiday:/] @HoAdmin = rw #[/C] #@admin = rw #@reader = r [/COPYFILE] @reader = # [/foo/bar] # harry = rw # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r 这里我们假设有两个工程repository分别是C和Holiday在/home/AD/SVNRoot(SVN根目录)下,有三个帐号test,admin2,AD分属三个组reader,admin,admin,reader除C工程下的COPTFILE文件外拥有所有读权限,而admin2组则只对Holiday工程有读写权限,而admin则对只C工程有读写权限. 至此所有配置文件我们可以用http://localhost/svn/C/之类的http来访问SVN或验证权限. 在rapidsvn之类的SVN GUI客户端也可直接将上述url填入即刻,考虑到web访问,可能还需要设置防火墙,这里不多讲.由于使用了apache内嵌svn,因此平时也不用启动svn服务只需启动httpd服务就可以了. |