以下操作如无特殊注明,均为root执行的操作。
首先,需要下载安装下列软件包:
- apache2
- apache2-common
- apache2-utils
- libapache2-svn
- openssl
- ssl-cert
- subversion
- subversion-tools
使用apt-get install命令安装上列软件包。
如果要加密对版本服务器的访问,需要启用SSL。你可以到商业证书颁发机构去申请一个合法的证书,也可以采用自认证的方式。我们用下面的命令生成SSL自认证证书,并把它放在/etc/apache2/ssl/目录中。
mkdir /etc/apache2/ssl /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
根据提示回答相应的信息,最后就会生成所需的证书了。
在apache2中启用ssl模块,使用下面的命令:
a2enmod ssl
接下来,配置虚拟主机来使能ssl,我的apache2服务器只提供版本库的加密访问,不提供基本的http web服务,所以关闭了80端口,只开启443端口。
修改/etc/apache2/sites-available/default文件,将前两行改为:
NameVirtualHost *:443 <VirtualHost *:443>
然后在文件中加入下面的内容:
SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem
上面的语句打开了SSL引擎,使用我们刚刚生成的证书文件进行认证。
default虚拟主机应该缺省已经使能了,也就是在/etc/apache2/sites-enabled/目录中已经存在一个符号链接,指向/etc/apache2/sites-available/default。如果没有的话,可以使用下面的命令使能这个虚拟主机:
a2ensite default
现在修改文件/etc/apache2/ports.conf,把文件的内容改为:
Listen 443
也就是我们的apache2只监听443端口。
好了,现在启动apache2:
/etc/init.d/apache2 start
如果你没有使用ServerName配置主机名的话,会提示下面的错误,忽略即可:
Starting web server (apache2)...apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
在浏览器中输入如下URL,看是否能够访问:
https://127.0.0.1/
如果正常的话,你会看到一个缺省的页面,上面显示”It works!“。如果没有出现此页面,可能你的apache2配置有问题,查看一下错误日志和访问日志,以定位问题。这两个日志的缺省位置在 /var/log/apache2/。
首先新建一个用户svnadmin来管理版本库,使用下面的命令:
addgroup svn adduser svnadmin –ingroup svn adduser www-data svn
上面的命令首先创建一个svn用户组,然后创建用户svnadmin,并把这个用户放在svn组中。第三个命令则是把www-data用户也加入到svn组,因为web server是以www-data用户在运行的,要从web server读写版本库,www-data用户必须有版本库的读写权限。
现在用su – svnadmin命令切换到svnadmin用户,我们要保证svn用户组的所有用户都具备版本库的读写权限,所以修改svnadmin的umask,修改svnadmin用户的~/.bashrc,在文件中加入下面这行:
umask 002
退出再重新登录。这样,由svnadmin创建的版本库,就可以被所有属于svn组的用户读写了。
现在创建版本库(由用户svnadmin执行下面的命令):
svnadmin create ~/repos/svntest
我们创建了一个名为svntest的版本库。如果你已经有cvs的版本库,想把它转到subversion上,可以安装cvs2svn软件包,用里面的工具进行转换。
首先,使能apache2的dav_svn模块:
a2enmod dav_svn
我们使用基本的http认证对访问版本库的所有用户进行认证,只有认证用户才有版本库的访问权。
首先为版本库的用户生成密码文件:
htpasswd -cm /etc/svnusers xxxxx htpasswd -m /etc/svnusers yyyyy
上面的命令创建了密码文件/etc/svnusers,并增加两个用户xxxxx和yyyyy。
然后在/etc/apache2/sites-available/default文件中加入如下语句:
<Location /svn> DAV svn SVNParentPath /home/svnadmin/repos AuthType Basic AuthName "Subversion Auth" AuthUserFile /etc/svnusers require valid-user </Location>
这段话,对URL中指向/svn目录的访问请求,使用DAV进行访问。我们把/home/svnadmin/repos做为所有版本库的父目录,在该目录下可以增加多个版本库。另外,使用/etc/svnusers密码文件对用户进行认证。
现在,重启apache2服务:
/etc/init.d/apache2 restart
在浏览器中输入:
https://127.0.0.1/svn/svntest
这时,会询问你是否接受服务器的证书,选择接受,然后输入你的用户名和密码,验证通过后,在浏览器中就可以看到版本库了。
测试通过后,你就可以使用其它的subversion客户端对版本库进行访问了。
[参考文档]