1、下载安装包
apache的下载地址:http://httpd.apache.org/download.cgi
subversion的下载地址:http://subversion.tigris.org/project_packages.html
本文选择的安装包为httpd-2.2.15.tar.gz和subversion-1.6.17.tar.gz、subversion-deps-1.6.17.tar.gz。
2、安装apache
# tar xvzf httpd-2.2.15.tar.gz
# cd httpd-2.2.2
# ./configure --prefix=/usr/local/apache2/ --enable-so --enable-dav
--prefix为指定apache的安装位置,后面两个参数则是设置开启相关功能模块。
apache的功能模块配置很灵活,具体的可以使用# ./configure --help命令查看。
# make && make install
设置开机启动
# echo '/usr/local/apache2/bin/apachectl start ' >> /etc/rc.local
3、安装subversion
在安装subversion之前,先安装一些依赖包
# yum install openldap-devel zlib-devel expat-devel openssl-devel
安装
# tar xvzf subversion-1.6.17.tar.gz
# tar xvzf subversion-deps-1.6.17.tar.gz
# cd subversion-1.6.17
# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs
--with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2
--with-ssl --with-zlib=/usr/local/zlib --enable-maintainer-mode
# make && make install
// 如果出现类似错误,请修改seclinux的设置。
// 错误:error while loading shared libraries: /usr/local/software/subversion-1.6.17/subversion
/libsvn_subr/.libs/libsvn_subr-1.so.0: cannot restore segment prot after reloc: Permission denied
# vi /etc/selinux/config
找到SELINUX=enforcing 改为 SELINUX=disabled
# vi /etc/sysconfig/selinux
如果找到SELINUX=enforcing 也改为 SELINUX=disabled
设置
# PATH=$PATH:/usr/local/subversion/bin
# mkdir /var/svnroot
// 创建项目仓库sesame
# svnadmin create /var/svnroot/sesame
// 导入项目文件,假设/tmp下由一个sesame目录,里面有几个文件。
# svn import /tmp/sesame file:///var/svnroot/sesame -m "注释"
// 由于apache安装后默认执行程序的用户和组为daemon
// 为了避免访问权限上的错误将修改项目仓库的所属用户及组别。
# cd /var/svnroot
# chown -R daemon sesame
# chgrp -R daemon sesame
4、设置subversion访问权限
1)增加subversion用户
# htpasswd -c /var/svnroot/authfile wumh
第一次设置用户时使用-c参数,表示新建一个用户文件。回车后输入用户密码,完成对用户的增加。
// 增加第二个或更多用户时,只需要执行类似如下的命令
# htpasswd /var/svnroot/authfile username
2)权限分配
# vi /home/svnroot/authz
[sesame:/] //仓库sesame根目录访问权限
wumh = rw //sesame仓库wumh具有读和写权限
zhangs = r //test仓库zhangs只有读权限
[aladdin:/] //仓库aladdin根目录访问权限
wumh = r //wumh在aladdin只有读权限
zhangs = //zhangs在aladdin无任何权限
相关说明:
[/] //这个表示在所有仓库的根目录下
* = r //这个表示对所有的用户都具有读权限
[groups] //这个表示群组设置
dev = wumh, zhangs
test = zhangs
[aladdin:/]
@dev = rw //前面的@符号,表示这是个群组权限设置
5、修改apache配置
# vi /usr/local/apache2/conf/httpd.conf
//在最下面添加
<Location /svn>
DAV svn
SVNParentPath /var/svnroot //svn父目录
AuthzSVNAccessFile /var/svnroot/authz //权限配置文件
AuthType Basic //连接类型设置
AuthName "Subversion-authz.df3c" //连接框提示
AuthUserFile /var/svnroot/authfile //用户配置文件
Require valid-user //采用何种认证,valid-user告诉apache在authfile中所有的用户都可以访问。
</Location>
相关说明:
SVNParentPath:支持多个具备相同父目录的bubversion版本库。
SVNPath:只支持一个父目录的Subversion版本库
SVNPath /svn/svnroot/sesame #如果你想对每个项目单独配置,使用该项
SVNParentPath /svn/svnroot #设定一个根,所有项目均放在此目录下
如果设置为SVNParentPath,当访问http://192.168.1.200/svn时,会报forbidden错误。
须要输入包含项目仓库名的地址http://192.168.1.200/svn/sesame。
配置用域名访问
去除虚拟目录设置<Location /svn>里的“svn”,再在虚拟主机设置中增加域名配置。如下:
<Location />
DAV svn
SVNParentPath /var/svnroot
AuthzSVNAccessFile /var/svnroot/authz
AuthType Basic
AuthName "Subversion-authz.abc"
AuthUserFile /var/svnroot/authfile
Require valid-user
</Location>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/svnroot
ServerName code.abc.com
</VirtualHost>
6、其它
1) 当你配置了SSL来提高版本库安全时,你可能想禁用无SSL的http访问方式,而只允许通过https访问。
要达到这种效果,你要在<Location>块加入另外一个指示器SSLRequireSSL。
<Location /svn>
SSLRequireSSL
</Location>
apache的ssl配置,可以查看博文《linux+apache+ssl的安装配置 》,里面有详细说明。
2) 出现“attempt to write a readonly database”错误
在subversion 1.6之后,后端数据库使用sqlite。然而sqlite创建文件的时候,并没有按照umask去创建正确权限位的文件。这样就导致svn仓库项目下的 db/rep-cache.db 不具备组可写权限。解决如下:
# cd repspath
# chmod 664 rep-cache.db