参考了几篇文章,并结合自己遇到的问题,总结如下:
参考文章:
http://www.yoyotown.com/?p=422
http://blog.zjol.com.cn/?uid-1222-action-viewspace-itemid-599186
以下部分以root身份操作,部分以svnroot身份操作
1.下载文件(http://subversion.tigris.org/)
一共两个包
subversion-1.4.6.tar.gz
subversion-deps-1.4.6.tar.gz
2.解压
tar -xzvf subversion-1.4.6.tar.gz
tar -xzvf subversion-deps-1.4.6.tar.gz
3.配置
./configure --with-apxs=/usr/local/apache/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache --with-apr-util=/usr/local/apache --with-ssl --with-zlib=/usr/lib --enable-maintainer-mode
4.编译和安装
make
make install
5.增加svnroot用户和svnroot组
useradd svnroot,这个命令执行后,可以看到产生了svnroot用户和组,见/etc/passwd和/etc/group文件
6.以svnroot身份
su svnroot
7.创建仓库"test"
/usr/local/subverison/bin/svnadmin create /home/svnroot/repository/test
8.看看是不是多了些文件,如果是则说明Subversion安装成功了
cd /home/svnroot/repository/test
ls –l
9.只有svnroot这个用户可以访问这个目录
chmod 700 /home/svnroot/repository
10.以root身份su root
11.更改apache配置
(1) 更改apache启动的用户和组,否则apache没有权限读/home/svnroot/repository
User nobody
Group #-1
把上述内容改成:
User svnroot
Group svnroot
(2) vi /usr/local/apache2/conf/httpd.conf
如果apache是先装的,其中应该有以下两行代码
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
如果没有,添加
再加入下列:
<Location /svn>
DAV svn
SVNParentPath /home/svnroot/repository/ //svn父目录
AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件
AuthType Basic //连接类型设置
AuthName "Subversion.Login" //连接框提示
AuthUserFile /home/svnroot/repository/authfile //用户配置文件
Require valid-user //采用何种认证
</Location>
//其中authfile是通过"htpasswd [–c] /home/svnroot/repository/authfile username password"来创建的
//"Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库
12. 权限管理
1)增加用户
htpasswd [-c] /home/svnroot/repository/authfile haha
//第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加
htpasswd authfile 用户名(加入新的用户)
2)权限分配
vi /home/svnroot/repository/authz.conf
[test:/] //这表示,仓库test的根目录下的访问权限
wooin = rw //test仓库wooin用户具有读和写权限
bao = r //test仓库bao用户具有读权限
[test2:/] //test2仓库根目录下的访问权限
wooin = r //wooin用户在test2仓库根目录下只有读权限
bao = //bao用户在 test2仓库根目录下无任何权限
[/] //这个表示在所有仓库的根目录下
* = r //这个表示对所有的用户都具有读权限
#[groups] //这个表示群组设置
#svn1-developers = wooin, bao //这个表示某群组里的成员
#svn2-developers = wooin
#[svn1:/]
#@svn1-developers = rw //如果在前面加上@符号,则表示这是个群组权限设置
13.将以上设置完成后,重启apache
/usr/local/apache/bin/apachectl restart
通过这个就可以访问了http://localhost/svn/test
14.环境变量
vi /etc/profile.d/svn.sh
添加
export PATH=$PATH:/usr/local/subversion/bin
15.一些问题
(1)注意:apache编译时,要至少加入--enable-dav --enable-so --enable-maintainer-mode选项,否则在安装完svn并启动apache时,会报如下错误:
httpd: Syntax error on line 58 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: /usr/local/apache2/modules/mod_dav_svn.so: undefined symbol: dav_register_provider
(2)出现You don't have permission to access /svn/test/ on this server
这可能是因为apache运行的用户和组没有权限存取/svn/test/,在httpd.conf中改一下即可
(3)在rhel3中安装svn-1.5.0以上版本时,会出现错误:
In file included from buckets/ssl_buckets.c:46:
/usr/include/openssl/ssl.h:909: syntax error before "KSSL_CTX"
/usr/include/openssl/ssl.h:931: syntax error before '}' token
make[1]: *** [buckets/ssl_buckets.lo] Error 1
make[1]: Leaving directory `/usr/local/subversion-1.5.5/serf'
make: *** [external-all] Error 1
这是因为openssl的版本太低,升级一下即可