您的位置:首页 > 运维架构 > Apache

linux系统下apache+subversion搭建版本控制服务器

2010-03-19 03:39 585 查看
环 境:Linux RedHat Enterprise Linux Server release 5
源码包:httpd-2.2.15.tar.gz subversion-1.5.6.tar.bz2

【编译安装httpd】
# tar -xvzf httpd-2.2.15.tar.gz
# cd httpd-2.2.15
# cd srclib/apr
# ./configure /
> --prefix=/usr/local/apr /
> --enable-threads /
> --enable-other-child /
> --enable-static
# make
# make install
# cd ../
# cd apr-util
# ./configure /
> --prefix=/usr/local/apr-util /
> --with-apr=/usr/local/apr/ /
> --with-mysql=/usr/local/mysql
# make && make install
# cd ../../
# ./configure /
> --prefix=/usr/local/apache2 /
> --with-apr=/usr/local/apr
> --with-apr-util=/usr/local/apr-util
> --enable-dav /
> --enable-so
# make
# make install
# /usr/local/apache2/bin/apachectl –k start

* 注意:--enable-dav --enable-so参数是必须要加的,你还可以根据您的需要添加其他的参数。
* --enable-dav 启用davweb支持,是subversion+apache组合必选,缺少的话,在运行apache会出现undefined symbol: dav_register_provider的错误
* apr 和 apr-util一般会在httpd的安装包内,subversion安装会使用到apr和par-util,如果当前系统没有,最好安装一下

【编译安装subversion】
我在安装make install中出现如下问题,
error while loading shared libraries: /path/to/*.so: cannot restore segment prot after reloc: Permission denied
请尝试关闭 SELinux(编辑 /etc/selinux/config),如果还是不行,尝试执行chcon -t texrel_shlib_t /path/to/*.so 一般可以解决,然后重新在执行make install

# tar -jxvf subversion-1.5.6.tar.bz2
# cd subversion-1.5.6
# ./configure /
> --prefix=/usr/local/subversion /
> --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install

* 创建版本库所在目录/var/svnroot
# mkdir -p /var/svnroot
# /usr/local/subversion/bin/svnadmin create /var/svnroot
# chwon –P apache:apache /var/svnroot
* 关于avnadmin和svnserve的参数,请使用--help查询
* 修改版本库的根目录/var/svnroot的用户和组成和apache一个用户和组,否则可能会出现:Can't open '/path/to/db/txn-current-lock': Permission denied

【整合apache和svn】
编辑apache主配文档(/usr/local/apache2/conf/httpd.conf)
检查文档中是否存在下列两句,若没有则可能subversion安装有问题
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

添加下列标签
<Location /svn>
DAV svn
SVNPath /var/svnroot
AuthType Basic
AuthName "Welcome to MySVN"
AuthUserFile /var/svnroot/svn.passwd
AuthzSVNAccessFile /var/svnroot/svn.authz
Require valid-user
</Location>
* 标签说明
* <Location /svn> 意思是Subversion版本库的URL是
http://localhost/svn

* DAV svn 告诉Apache响应http://localhost/svn请求的是svn模块
* SVNPath 版本库目录,用于单一版本库管理

* SVNParentPath 版本库的根目录,用于多版本控制管理
* SVNListParentPath on 显示SVNParentPath下的版本库
* AuthType Basic 激活基本认证
* AuthName "Welcome to MySVN" 认证对话框提示信息
* AuthUserFile 指定使用的用户密码文件,由apache 的htpasswd命令生成
* AuthzSVNAccessFile 版本库的访问权限控制文件
* Require valid-user 有输入了正确的用户/密码的用户可以访问

创建svn.passwd文件
# /usr/local/apache2/bin/htpasswd -cm /var/svnroot/svnpasswd user1
New password:
Re-type new password:
Adding password for user user1
* 第一次添加使用 -cm 同时会创建文件,此后可使用 -m 创建。详情请参阅htpasswd --help
# /usr/local/apache2/bin/htpasswd –m /var/svnroot/svnpasswd user2
New password:
Re-type new password:
Adding password for user user2

创建svn.authz
# vi /var/svnroot/svn.auzhz
[groups]
group1 = user1
group2 = user2
[/]
@group1 = rw
@group2 = r
* =

补充说明:
如果使用apache+svn进行版本控制,那么在创建版本库时产生的conf目录里的配置文件时没意义的。
对版本库的访问时基于apache平台,所以无需启动svnserve,除非同时想采用svn://访问,但是svnserve默认只能开启单一版本库的访问控制,因为svnserve启动必须指向相关版本的目录。
无论是单版本库还是多版本库控制,如果开启了访问控制AuthType Basic,那么用户的管理和权限都在AuthUserFile和AuthzSVNAccessFile指定的文件里。
单个版本控制时,在AuthzSVNAccessFile指定文件里使用[/path/to]配置用户在指定目录权限
多个版本库控制时,在AuthzSVNAccessFile指定文件里进行分组,使用[project_name:/path/to]配置用户在指定版本库的指定目录的权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: