一、安装:
1、Apache安装
不用多说,进入到 /usr/ports/www/apache22目录下,运行make install即可安装默认方式搞定,如果你还有别的apache的应用和需求,自己研究。
2、Subversion安装
#cd /usr/ports/devel/subversion
#make install WITHOUT_BDB=yes WITH_MOD_DAV_SVN=yes APXS=/usr/local/sbin/apxs
说明:WITHOUT_BDB=yes 这是我不使用BerkleyDB才加上的,你愿意使用可以去掉,WITH_MOD_DAV_SVN=yes
APXS=/usr/local/sbin/apxs 两个参数是为了支持Apache的WebDAV方式
到此就安装完了,剩下的就是建库和设置权限
二、建库
假设我创建两个项目(库),分别为test和toplee,一个用于练习和测试,一个用于保存toplee.com的代码
#mkdir /var/SVN (创建svn库存放的根目录,可以随便选择目录)
#svnadmin create /var/SVN/test
#svnadmin create /var/SVN/toplee
搞定
三、设置权限
在达到最终目标前(使用apache的webDav方式访问),先简单说一下通过svn自带的轻量级svnserve的方式搭建环境的方法,如果你不感兴趣,就直接看后面apache的webDav部分吧
1、配置svn自带的svnserve
#vi /etc/rc.conf 加入下面几行
svnserve_enable="NO"
svnserve_user="www"
svnserve_group="www"
svnserve_flags="-d --listen-host=xxx.xxx.xxx.xxx
--listen-port=3690"
svnserve_data="/var/SVN"
#/usr/local/etc/rc.d/svnserve start
搞定,此时就可以通过 svn info svn://xxx.xxx.xxx.xxx/test 访问test库了
不过这时使用了默认权限,大家都能访问和修改库里面的东西,需要设置权限
权限设置方法:
在/var/SVN/test下和/var/SVN/toplee下都有个conf目录,进入到conf目录,能看到authz、passwd、svnserve.conf三个文件,这三个文件就是用来配置svnserve方式权限的,分别配置如下:
a) 配置 svnserve.conf
在文件中写入类似下面的内容
[general]
anon-access = none
auth-access = write
password-db = passwd
大概意思是,不允许匿名访问,全部需要使用密码验证,对于通过验证的用户,给与write权限,同时用于密码验证的文件是passwd文件
b) 配置passwd文件
这个文件打开后,一看就明白,就是写用户名和口令,不爽的是密码是明文的,哪怕加个md5也好。写入类似这样的东西
michael=toplee
test=testdb
lee=abc
设置了三个用户,分别是michael、test、lee
c)配置authz文件
这个文件用于配置用户访问库中文件或者目录的具体策略,基本上默认文件里面就有说明和范例了,我的authz文件大概如下:
[groups]
g_w = michael,lee #意思是创建一个组,包含两个用户
g_r = test #第二个组,包含一个用户
[/abc] #目录名
@g_w= rw #g_w组的用户都能read和write
@g_r=rw #g_r组的用户也能read和write
[/xyz]
michael=rw
lee=r
@g_r=r
上面的内容大概根据内容就能看懂意思,不多解释
至此,配置完成,运行/usr/local/etc/rc.d/svnserve restart重启服务即可生效,现在使用
svn info svn://xxx.xxx.xxx.xxx/test 则需要你进行身份验证了。
2、配置基于Apache的WebDAV方式访问SVN
这是我今天的最后目标,有一些类似的文档可以找到,不过总感觉要少点什么。
关键的两个地方,配置httpd.conf和svn的权限文件
a)配置httpd.conf
在httpd.conf文件里面加入下面一堆东西
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /var/SVN
AuthType Basic
AuthName "Subversion in toplee.com"
AuthUserFile /var/SVN/.svnpasswd
AuthzSVNAccessFile /var/SVN/.svnaccess
Satisfy Any
Require valid-user </Location> 啥意思呢?
其实最前面两行,apache安装好后基本上默认就有了,不用管,但是你要确定一下是不是真的有了,没有的话不行,检查/usr/local/libexe/apache22/下是否有相应so或者重新编译安装apache,并且激活相应的选项。
第三四行是安装svn时增加 WITH_MOD_DAV_SVN=yes APXS=/usr/local/sbin/apxs
这两个参数时也会自己默认加上的,如果没有就自己手动加上。
后面那一堆 的部分是关键,大概意思就是调用.svnpasswd文件进行用户验证,调用.svnaccess文件进行权限判断,细节我懒得说了,你照着弄,根据目录不同自己改改就行。
b)配置svn的用户权限文件
这回我们不会继续使用前面svnserve方式下的那三个文件了,而是使用httpd.conf文件里面配置的.svnpasswd和.svnaccess两个文件来配置,当然这两个文件的名字和路径你都可以根据自己喜好修改。
首先是配置.svpasswd文件,这个文件其实就是标准Apache的.htpasswd文件,弄过http方式验证的都知道咋回事。运行下面的命令创建三个用户
#htpasswd -c /var/SVN/.svnpasswd michael
#输入口令
#htpasswd /var/SVN/.svnpasswd lee (注意这里不在需要-c参数,它是用来第一次创建文件用的)
#输入lee用户的口令
#htpasswd /var/SVN/.svnpasswd test
#输入test用户的口令
搞定.svnpasswd文件
接下来开始搞.svnaccess文件, 运行 vi /var/SVN/.svnaccess 编辑文件,加入下面的东西
[groups]
g_w = michael,lee
g_r = test
[test:/]
@g_w= rw
@g_r=rw
[toplee:/blog/]
michael=rw
lee=r
@g_r=r
[toplee:/mail/]
@g_w=rw
@g_r=w
这个文件呢,实际上跟前面 test/conf和toplee/conf下的authz文件格式一样,不过就是不需要为每个库单独创建,而统一使用了一个文件来配置,从文件中可以看
到变化,在配置目录的时候,增加了库的名字,如[toplee:/blog/] 表示toplee库下/blog/目录的意思
最后就是运行 /usr/local/etc/rc.d/apache22 restart 重启apache服务则全部搞定。
在浏览器里面输入 http://xxx.xxx.xxx.xxx/svn/test 或者 http://xxx.xxx.xxx.xxx/svn/toplee
试试,让你输入用户名口令就ok了
如果你没有成功,一个可能是RPWT,另一个可能是中间哪里写错了,比如我就因为手误把 .svnpasswd
弄成 .svnhtpasswd,结果httpd.conf里面又是写的.svnpasswd,弄了半天没有成功,看error.log才明白咋回事。
如果须用HTTPS访问SVN 设置如下:
1。配置httpd.conf
在httpd.conf文件里面加入下面一堆东西
LoadModule ssl_module libexec/apache2/mod_ssl.so
<IfModule mod_ssl.c>
Include etc/apache2/ssl.conf
</IfModule>
2 生成证书
mkdir /usr/local/apache2/conf/ssl.crt
#为你的Apache服务器创建一个RSA私用密钥
openssl genrsa -des3 -passout pass:asecretpassword -out
/usr/local/apache2/conf/ssl.crt/server.key.org 1024
#用服务器RSA私用密钥生成一个证书签署请求(CSR-Certificate Signing Request)
openssl req -new -passin pass:asecretpassword -passout
pass:asecretpassword -key /usr/local/apache2/conf/ssl.crt/server.key.org
-out /usr/local/apache2/conf/ssl.crt/server.csr -days
3650
# 3650 is ten yearsi对认证签署请求进行认证,得到认证证书
openssl req -x509 -passin pass:asecretpassword -passout
pass:asecretpassword -key /usr/local/apache2/conf/ssl.crt/server.key.org
-in /usr/local/apache2/conf/ssl.crt/server.csr -out
/usr/local/apache2/conf/ssl.crt/server.crt -days 3650
#如果没有这一步,启动apache+ssl会要求输入密码,有下面这一步,就可以不用passwod
openssl rsa -passin pass:asecretpassword -in /usr/local/apache2/conf/ssl.crt/server.key.org
-out /usr/local/apache2/conf/ssl.crt/server.key
#
mkdir /usr/local/apache2/conf/ssl.key
#
mv /usr/local/apache2/conf/ssl.crt/server.key /usr/local/apache2/conf/ssl.key/server.key
#
chmod 400 /usr/local/apache2/conf/ssl.key/server.key
3,修改ssl.conf
最后对/usr/local/apache2/conf/ssl.conf
进行修改:
vi /usr/local/apache2/conf/ssl.conf
修改的地方如下几处:
只要加入下列语句就可以了
修改如下:
SSLCertificateFile /usr/local/etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/etc/apache2/ssl.key/server.key
添加如下:
Alias /svn/ "/usr/local/svndata/dev/"
<Location /svn>
DAV svn
SVNPath /usr/local/svndata/dev
Allow from all
AuthType Basic
AuthName "Subversion
Admin"
AuthUserFile /usr/local/etc/apache2/svnpass/htpasswd
AuthzSVNAccessFile /usr/local/svndata/dev/conf/authz
Require valid-user
</Location>
Alias /svn/ "/usr/local/svndata/dev/"
这样我们就基本配好了ssl现在我们来让apache启动ssl
/usr/local/apache2/bin/apachectl
startssl
就可以以HTTPS的形式访问了。
/usr/local/sbin/htpasswd /usr/local/etc/apache2/svnpass/htpasswd
test 填加安全用户命令,
手工在/usr/local/svndata/dev/conf/authz 设置用户test的权限.
注意:AuthzSVNAccessFile 一定要跟 Require valid-user 一起使用,也可以都不用,但不可以单独使用,否则必然
301错误.或者403 错误. |