这篇Step-By-Step文档就是在花了很多时间网上查阅资料,当然主要是结合自己的安装流程编写的。本人也不是什么高手大牛,只是小菜一只,文档一为记录自己一些学习结果,二是也能给遇到相应问题的人一些帮助,文章中可能出现比较低级的说法错误和技术错误等等,希望看到的人能留言斧正,在下稽首了。
如果这篇文档使你在读后照做能够完成SVN服务器的搭建,那么我的任务就算完成了。(大家知道我们古时造刀剑的工艺很是了得,为啥失传了,因为很多师傅留一手,结果技术越留越多,最后堙灭,甚是可惜,意思大家都懂得,技术只有分享讨论才有进步!当然特殊行业例外,那也有特殊手段来分享比较的,闭门造车哪有进步)
闲言少叙,开始本文安装环境
Ubuntu-Desktop:11.10 sudo apt-get install subversion libapache2-svn apache2
当然你可以源代码编译安装,向一切手工模式的人致敬,向一堆make麻烦拜拜。
sudo mkdir /svn
A,开始时候我是手工建的myproject文件夹,结果浏览器报错:can not open SVN filesystem错误,如果仔细看下apache错误日志的话发现是apache会寻找一个叫format的文件,由于手工建所以自然没有就报错了。B,如果你是在已有目录下建立版本库,则不需要这步,直接命令,示例:sudo svnadmin create /home/myproject)
3,编辑配置文件
sudo gedit /etc/apache2/mods-enabled/dav_svn.conf
(或者vim,vim看的习惯一些)
DAV svn
#SVNPath /svn
SVNParentPath /svn
AuthType Basic
AuthName “Subversion Repository”
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
(注意)
***重要提示:请把最后的前面注释符‘#’去掉,否则肯定报错的,这些是配对使用的。
同时注意,引号是英文符号,中文符号汇报错
说明:(2-3行:开始由于这步没有理解清楚,后面接连出现无法读取SVN文件系统和403FORBIDDEN错误,按文档说明,这两个参数只设置其中一个,不要同时使用;如果使用SVNPath必须指定到准确详细仓库位置,示例:/svn/myproject,如果使用SVNParentPath则指定到父级目录就可以了,示例:/svn,并且下面可以定义多个仓库,如果想父级目录可见,则需在svn权限文件中配置目录权限)
(4-6行:这三行是为了有基本的验证功能,请去掉‘#’注释号,并去掉行首空格,其实这里不去也行,但是有些配置文件对行首空格敏感,比如配置文件authz,还是统一为好。)
3.2查看服务运行情况a,svn: svnserve --version 如果svn启动,则显示版本信息。
b,apache2: 浏览器地址:http://localhost
运行正常结果为:It Works!
(如果无法运行,请查看目录权限chmod,在CentOS下注意SELinux的问题,最好先关掉,当然如果你想用SELinux的话需要设置专门文件标签,好像是这么叫的。请查阅相关文档)
4,创建仓库使用者命令sudo htpasswd2 -cm /etc/apache2/dav_svn.passwd air
返回: New password:
===================以下作废===========================
5,添加用户密码文件
sudo htpasswd -c /etc/subversion/dav_svn.passwd air (当前系统用户名)
sudo htpasswd /etc/subversion/dav_svn.passwd www-data
(air为当前系统用户名,www-data为ubuntu下的apache用户名和组名,centos系列为apache,而且服务名不同,ubuntu叫apache2,CentOS叫httpd)
***重要提示:这两条命令区别在于一个有-c,第一次创建用户密码需要建文件,所以加个-c参数。下面添加用户到这个文件就可以了,终端会提示你输入密码。
================================以上作废===================
5.继续添加用户
如果需要继续添加用户,命令:
sudo htpasswd /etc/subversion/dav_svn.passwd otherusers
6,创建版本库
sudo mkdir /svn (看前面第二部说明,已做过)
正确建法:
sudo svnadmin create --fs-type fsfs /svn/myproject
sudo chown -R www-data.subversion /svn/myproject
(一般是root组,一定改成subversion组)
*提示:在早期系统中我并没有配置--fs-type参数,但是现在要配置,否则提示Could not open the requested SVN filesystem错误,查看日志是仓库下format文件无法正确生成,说明在生成仓库这步出现了问题。添加这个参数后正常。一般默认都是FSFS,不会用Berkely DB
chmod -R g+rws /svn/myproject
(这步比较重要,否则权限没有会报403错误)
7,导入库
sudo svn import -m myproject /home/air/test file:///svn/myproject
前面可能建版本库不对,所以这里报日志信息路径重复,删了重建版本库:
rm -rf /svn/mytest
mkdir -p /svn/myproject
svnadmin create /svn/myproject
创建版本库
chown -R www-data.subversion myproject/
(更改用户组,否则后面导入会报权限不足)
svn import -m test /home/air/test/ http://localhost/svn/myproject
命令返回:
sudo /etc/init.d/apache2 restart或者 service apache2 restart
(CentOS是httpd,话说这两系列Linux把人搞疯,艾,本来就有强劲对手Windows,自己内部还分裂)
http://localhost/svn/myproject/
附截图一张:生产环境请用这台服务器的IP:IP/svn/myproject
***如果你排除上述错误后,还是出现403和Cannot open SVN filesystem提示的话:
***重要提示:5, 本机访问正确,其他机器无法访问svn
根据本篇文档,创建用户命令生成的密码格式文件路径为:
sudo htpasswd -c /etc/subversion/dav_svn.passwd air
其实正确做法为 /etc/apache2/dav_svn.passwd 用户名 ,同时如过不是第一次创建用户,应该去掉-c选项,否则,文件中只有最后一次执行的用户。
如果已经在subversion中生成密码,复制过去就可以了
本文随时补充,欢迎大牛指正