linux搭建SVN服务器
基于svn协议,端口3690的SVN服务器搭建
svn软件安装
1、源码安装svn
约定源码存放目录/datum/src/
Ø 安装apr
./configure --prefix=/datum/src/apr-1.5.1
make &make install
Ø 安装apr-util
./configure --prefix=/datum/src/apr-util-1.5.4--with-apr=/datum/src/apr-1.5.1
make &make install
Ø 安装sqlite-autoconf
./configure--prefix=/datum/src/sqlite-autoconf-3080703
make &make install
Ø 安装serf(svn 1.8版本之前的需要neon,1.8版本之后弃用neon而改使用serf.),如果不安装,在linux上使用svn checkout会报错 E170000:Unrecognized URL scheme for http
serf需要安装scons,由scons安装serf
Ø 安装scons
tar -xzf scons-2.3.4.tar.gz
cd scons-2.3.4
python setup.py install
scons
yum -y install expat-devel
Ø 安装serf
tar -jxvf serf-1.3.8.tar.bz2
cd /datum/src/serf-1.3.8
scons PREFIX=/usr/local/serf APR=/datum/src/apr-1.5.1APU=/datum/src/apr-util-1.5.4
scons -Y /datum/src/serf-1.3.8
scons PREFIX=/usr/local/serf LIBDIR=/usr/lib64
scons PREFIX=/usr/local/serf install
Ø 安装svn
./configure--prefix=/datum/src/subversion-1.8.10 --with-apr=/datum/src/apr-1.5.1--with-apr-util=/datum/src/apr-util-1.5.4 --with-sqlite=/datum/src/sqlite-autoconf-3080703--with-serf=/usr/local/serf
make &make install
2、配置path环境变量
vi /etc/profile,在/etc/profile最后加入:
export PATH=$PATH:/datum/src/subversion-1.8.10/bin
svn版本库创建及测试
参考博客http://blog.163.com/longsu2010@yeah/blog/static/173612348201202114212933
1、创建svn版本库目录
mkdir -p /datum/svndata/repos1
2、创建版本库
svnadmin create /datum/svndata/repos1
执行了这个命令之后会在/datum/svndata/repos1目录下生成如下这些文件
3、svn主要配置文件
进入conf目录(该svn版本库配置文件)
authz文件是权限控制文件
passwd是帐号密码文件
svnserve.conf SVN服务配置文件
设置帐号密码
vi passwd
在[users]块中添加用户和密码,格式:帐号=密码,如harry=harry
设置权限
vi authz
在末尾添加如下代码:
[/]
harry=rw
w=r
意思是版本库的根目录harry对其有读写权限,w只有读权限。
svnserve.conf文件
vi svnserve.conf
打开下面的几个注释:
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /datum/svndata/repos1 # 认证空间名,版本库所在目录
4、启动版本库
svnserve -d -r /datum/svndata/repos1
5、在windows上测试
新建一个测试文件夹,在该文件夹下右键选择 SVN checkout如下图(要事先安装TortoiseSVN):
填写SVN的地址,如下图:
输入密码,如下图:
基于http协议的SVN服务器搭建(Apache+Subversion)
参考博客: http://www.linuxidc.com/Linux/2011-07/38581.htm
1、先搭建基于svn协议的SVN服务器(参考上一章节)
2、再安装Apache和svn的补丁包:
yum installhttpd
yuminstall mod_dav_svn //Subversion与Apache之间的接口(通过它,Apache就可以访问版本库,可以让客户端也使用HTTP的扩展协议 WebDAV/DeltaV进行访问)
yum install mod_auth_mysql //这一项用于用户身份验证,在网上有资料说貌似这个mod_auth_mysql没得配置访问权限的只有用户设置,建议不装,用htpasswd就可以,在这里我没有装,我还是打算用htpasswd,可能下回会试试。
验证 svn模块(mod_dav_svn)是否正确安装
ls /etc/httpd/modules | grep svn
系统提示如下:
3、修改配置文件
vi subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNPath/datum/svndata/repos1
AuthTypeBasic
AuthName"Authorization Realm"
AuthUserFile/home/svn/passwd
Requirevalid-user
AuthzSVNAccessFile /datum/svndata/repos1/conf/authz
</Location>
4、添加组及组员权限
groupaddsubversion //创建一个叫subversion的组为拥有仓库所在的目录
usermod -G subversion -a apache //将Apache 用户加入组成员subversion
chown -R apache: subversion /datum/svndata/repos1
chmod-R 755 /datum/svndata/repos1
5、添加http访问用户
[root@build:/home/svn]# htpasswd -c /home/svn/passwd tom//第一次添加用户使用参数“-c”以后再添加就不用了
New password:
Re-type new password:
Adding password for user tom
6、重启httpd服务
service httpd restart
7. 使用浏览器访问
http://172.18.7.198/svn/
两种协议使用总结
1、独立的svn访问方式:svn://172.18.7.198 用户和密码认证使用svn本身的passwd文件。如/datum/svndata/repos1/conf/passwd
2、http协议访问方式:http://172.18.7.198/svn 用户和密码认证使用,htpasswd加密的文件。如/home/svn/passwd
建议使用基于http协议的访问方式,使用起来比较方便可以通过浏览器临时查看文件,通过svn协议无法通过浏览器访问
常见问题:
访问svn服务器提示Forbidden
You don't have permission to access /svn/ on this server.
原因:SELinux造成的
此时可以来查询下当前的SELinux服务状态:
[root@linuxprobe ~]# getenforce
Enforcing
为了确认是这个讨厌的SELinux服务在捣鬼,我们来先关闭它试试吧:
[root@linuxprobe ~]# setenforce 0
检查状态,现在已经是“禁止模式”了:
[root@linuxprobe ~]# getenforce
Permissive
再次访问svn地址OK。
Expected FS format between '1' and '4'; found format '6'
Svn版本兼容性问题
一直提示密码
如下截图
这种情况的原因很多,如果是单独的基于svn协议。应该是svn的auth和passwd文件配置问题。如果是基于http协议的,首先也是检查svn的auth和passwd文件是否配置了正确的权限,如果还是报错检测一下通过htpasswd生成的密码跟auth里面的权限是否一致。如果还是报错,就可能是Apache程序对svn的目录没有访问权限。可以通过修改权限。
chown -R apache:apache /datum/svndata/repos1
chmod-R 755 /datum/svndata/repos1