sam_code@hotmail.com
最近研究下SVN Server搭建。选择平台是Fedora64bit和32bit.
0. 背景知识:
Subversion 是一款开放源代码的版本控制系统。使用
Subversion,您可以重新加载源代码和文档的历史版本。Subversion
管理了源代码在各个时期的版本。一个文件树被集中放置在文件仓库中。这个文件仓库很像是一个传统的文件服务器,只不过它能够记住文件和目录的每一次变化。
SVN Server有两种运行方式:一种是基于Apache Http Server, 另一种是Subversion
Standalone Server.
1. 实际搭建:
1.1:基于Apache Http Server方式
1.1.1:在Fedora 18 32bit下:
既然基于Apache,那首先要安装Apache服务器。
1.1.1.1:安装Apache Server:
#yum install httpd httpd-devel
1.1.1.2: 安装svn server:
#yum install subversion mod_dav_svn
由于Subversion需要版本化的控制,因此标准的HTTP协议不能满足需求,mod_dav_svn模块就是Apache与Subversion协同工作的接口。通过它,Apache就可以访问版本库了。
1.1.1.3: 验证SVN和mod_dav_svn:
a: mod_dav_svn模块:
cd /etc/httpd/modules/
ls |grep svn
mod_authz_svn.so
mod_dav_svn.so
说明安装模块成功。
b: svn
#svn --version
svn, version 1.7.14 (r1542130)
compiled Nov 26 2013,
21:44:01
Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE
file for more information.
Subversion is open source software, see
http://subversion.apache.org/
The following repository access (RA) modules are
available:
* ra_neon : Module for accessing a repository via WebDAV
protocol using Neon.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn
network protocol.
- with Cyrus SASL authentication
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local
disk.
- handles 'file' scheme
则证明svn安装成功。
1.1.1.4: 创建仓库目录,文件仓库:
创建仓库目录:
#mkdir -p /var/www/svn
创建文件仓库:
#cd /var/www/svn
#svnadmin create zienon_SW
创建一个叫做zienon_SW的文件仓库。
修改文件归属:
#cd /var/www
#chown -R apache.apache svn
改变文件权限:
#chmod 755 svn/zienon_SW -R
1.1.1.5: 修改svn配置文件:
有文档说安装SVN和mod_dav_svn模块后,会自动创建/etc/httpd/conf.d/subversion.conf
但我这边并没有自动生成。
#vi /etc/httpd/conf.d/subversion.conf
添加内容如下:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNParentPath
/var/www/svn
#
# # Limit write permission to list of valid
users.
#
# #
Require SSL connection for password protection.
# #
SSLRequireSSL
#
AuthType Basic
AuthName "Subversion
repository"
AuthzSVNAccessFile
/var/www/svn/authz.conf
AuthUserFile
/var/www/svn/user.passwd
Require valid-user
#
此时, ApacheServer知道了SVN的仓库目录,和authz.conf的位置。
1.1.1.6:创建用户名密码文件和用户名密码:
使用: htpasswd -b[cmBdpsDv] [-C cost]
passwordfile username password
#htpasswd -bc /var/www/svn/user.passwds sam.zhen
654321
-c: 表示创建新密码文件。
则此时创建了一个用户:sam.zhen,
密码:654321。同时创建了一个密码文件:/var/www/svn/user.passwds
继续创建新用户名,密码(密码文件则不用重新创建了)
#htpasswd -b /var/www/svn/user.passwd tony 123456
则创建了一个新用户:tony 密码是:123456
1.1.1.7:设置用户权限:
#vi /var/www/svn/authz.conf
当前只有两个用户,内容如下:
[test:/]
sam.zhen = rw
tony = r
[/]
[zienon_SW:/]
sam.zhen =
rw
tony = r
[/]
第一个仓库是测试仓库,第二个仓库是真正使用的仓库。
sam.zhen 可读写, tony只读。
1.1.1.8:重启Apache
Server:
#systemctl restart httpd
此时:使用浏览器或者SVN Client
http://10.0.0.3/svn/zienon_SW
输入用户名密码后都可以看到仓库内容,当然现在还是空的。
1.1.1.9: 创建项目:
前面使用svnadmin create 创建了版本库。一个版本库可以有一个或多个项目组成,一个好的版本库布局有利于svn
server的长期稳定。
Sam在版本库中有三个项目,Action, Utils_Linux_Android
每个项目中都包含以下三个目录:
trunk, tags, branches.
分别用来保存开发主线,项目标签和分支。
trunk里面又可以包含项目内的各模块。
以Utils_Linux_Android 为例,
Sam在Utils_Linux_Android目录中建立了trunk, tags, branches这三个目录。
在trunk中把V4L2_Utils, UInput_Utils, IR_Utils等项目加入。
在Utils_Linux_Android 上右击:Import,
Url of Repository:
http://10.0.0.20/svn/zienon_SW/Utils_Linux_Android
请注意:此处在版本库zienon_SW 之后需要加入Utils_Linux_Android这个项目名。
依次继续下去,就在一个版本库中建立了多个项目。
1.1.2: 在Fedora18 64Bit下:
Sam所用方法和32bit完全一致,但httpd 没法启动。
#systemctl start httpd.service
出错:
Job for httpd.service failed. See 'systemctl status
httpd.service' and 'journalctl -xn' for details.
[sam@localhost ~]$ sudo journalctl -xn
-- Logs begin at Mon 2014-06-09 18:34:27 CST, end at Mon
2014-06-09 18:37:46 CST. --
Jun 09 18:37:07 localhost.localdomain systemd[1]:
httpd.service: main process exited, code=exited,
status=1/FAILURE
Jun 09 18:37:07 localhost.localdomain httpd[1163]: [Mon Jun 09
18:37:07.621527 2014] [so:warn] [pid 1163] AH01574: module
dav_svn_mo
Jun 09 18:37:07 localhost.localdomain httpd[1163]: [Mon Jun 09
18:37:07.621578 2014] [so:warn] [pid 1163] AH01574: module
authz_svn_
Jun 09 18:37:07 localhost.localdomain httpd[1163]: AH00526:
Syntax error on line 5 of /etc/httpd/conf.d/subversion.conf:
Jun 09 18:37:07 localhost.localdomain httpd[1163]: DAV not
allowed here
Jun 09 18:37:07 localhost.localdomain systemd[1]:
httpd.service: control process exited, code=exited status=1
Jun 09 18:37:07 localhost.localdomain systemd[1]: Failed to
start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support:
http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit httpd.service has failed.
--
-- The result is failed.
Jun 09 18:37:07 localhost.localdomain systemd[1]: Unit
httpd.service entered failed state.
Jun 09 18:37:31 localhost.localdomain sudo[1165]: sam :
TTY=pts/0 ; PWD=/home/sam ; USER=root ; COMMAND=/bin/journalctl
-xn
Jun 09 18:37:46 localhost.localdomain sudo[1168]: sam :
TTY=pts/0 ; PWD=/home/sam ; USER=root ; COMMAND=/bin/journalctl
-xn
后来在网络上查到解决方案:
修改/etc/httpd/conf.d/subversion.conf
#sudo vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
DAV svn
SVNParentPath /var/www/svn
#
# # Limit write permission to list of valid
users.
#
# #
Require SSL connection for password protection.
# #
SSLRequireSSL
#
AuthType Basic
AuthName "Subversion repository"
AuthzSVNAccessFile /var/www/svn/authz.conf
AuthUserFile /var/www/svn/user.passwds
Require valid-user
#
则一切OK。
1.2:Subversion Standalone Server方式安装: