今天在Linode买的vps上搭了个svn,简单记录一下过程和遇到的问题。
先说遇到的问题吧,基本上就是
1. “Could not open the requested SVN filesystem”;
2. “Server sent unexpected return value (403 Forbidden) in response to OPTIONS “.
第一个问题是因为开始没有搞清楚创建一个和多个svn repository的区别,而第二个是因为权限设置的问题。
svn服务器比较重要的涉及安全的问题就是用户认证、访问授权以及传输加密。根据官方的介绍,搭建svn有几种方式,各有优劣,我用的是Apache + mod_dav_svn+Basic Auth。 具体流程如下,以多个为例,单个的只是参数的差别:
1. 安装所需软件
apt-get install subversion subversion-tools apache2 libapache2-svn
2. 创建存放的路径
#路径任意 #注意的是这是多个svn repositories的根目录 mkdir -p /home/svn/repos #设置apache访问的权限, www-data是apache默认的user和group chown -R www-data.www-data /home/svn/repos
3. Apache访问权限设置
可以写在”/etc/apache2/sites-available/default”里面,不过我是独立写在另一个文件,然后在”/etc/apache2/sites-enabled/”里面加个软链接。
NameVirtualHost *:8080
Listen 8080
<VirtualHost *:8080>
ErrorLog /home/svn/logs/error.log
CustomLog /home/svn/logs/access.log combined
<Location />
DAV svn
#SVNParentPath是指定是的多个svn repository的根目录,如果只设定一个,可以用SVNPath来指定;
#如果想设置多个的但用了SVNPath就会出现第一个问题了
SVNParentPath /home/svn/repos
AuthType Basic
AuthName "Subversion Repository"
#dav_svn.passwd是设定认证的user和password,等下介绍
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
</VirtualHost>
<Location/>节点的内容可以参考”/etc/apache2/mods-available/dav_svn.conf”,这里设置了8080端口来访问svn,并且指定了error和access这2个log的位置,设定的时候注意给apache有权限访问就可以了,也可以用chown来设定logs目录的拥有者为www-data.www-data。
4. 在dav_svn.passwd设定认证的user和password
#首次创建文件的时候用-c,后面添加则用-d,不然-c会把之前的覆盖掉;按提示输入密码即可 htpasswd -c /etc/apache2/dav_svn.passwd endlesscode
5. 设置访问目录的权限
目录的权限配置是在”/etc/apache2/dav_svn.authz”这个文件里面,
[groups] admin=stephenchan, otheradmin user=endlesscode, otheruser [repository:/] *= @admin=rw [repository:/test] endlesscode=rw [repository:/demo] endlesscode=rw
因为设置的是多个repositories的,所以在设定访问的目录的时候也是分开设置的。这里我在”/home/svn/repos”目录下创建了demo和test这2个svn repository,分别设置了rw权限。”*=”这个是将所有的用户权限清空,”*”代表所有用户。
要注意的是,如果只设定单个的repository,应该直接使用”[/path/to/dir]“而不是用”[repository:/project/path/to/dir]“这种方式,否则会无效,并可能出现开始说的第二个问题。
6. 创建svn repository
写个脚本来创建就比较方便了
#!/bin/bash # create_svn.sh echo "create svn repos : "$1 mkdir $1 svnadmin create $1 chown -R www-data:www-data $1
7. 测试
初次创建的revision是0的,可以”svn co http://hostname:8080/demo”来checkout下来,然后修改一下,再commit上去就变成1了。
虽然基本搭起来,但是传输加密这个还没有弄,还有post-commit,email这些都没有设置,找个时间再弄吧。