摘 要:为了实现文档及源代码等的有效存储与管理,本文选取目前流行的Subversion(简称SVN)对存储资源进行版本控制。本SVN服务器借助Apache的运行方式在Linux平台下架设,并实现了对SVN库权限的精确控制。
关键词:Subversion;版本控制;SVN权限控制
1.SVN简介
Subversion,简称SVN,是一个开放源代码的版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上越来越多的控制服务从CVS转移到Subversion。Subversion项目最初由CollabNet于2000年发起,并于2010年1月,正式成为Apache软件基金会的一个顶级项目。
Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作,从而大大提高团队开发的效率。
2.架设apache web服务器
(1) 准备好安装源码目录:
Apache web服务器的最新版本可以在http://httpd.apache.org/download.cgi下载得到。这里选用最新的稳定源码包版本2.2.19版。下载完后使用以下命令解压得到Apache源码目录:
tar jxvf httpd-2.2.19.tar.bz2
(2) 配置Apache:
进入解压后的源码目录,并执行以下命令配置Apache web服务器:
./configure --prefix=/opt/apache2 --enable-mods-shared=all --enable-dav --enable-dav-fs --enable-so
配置的参数解释如下:
--prefix是指定安装到哪个目录,这里把apache安装到/opt/apache2目录下。
--enable-mods-shared=all是指定编译用共享模块的方式编译apache,启用所有的动态共享模块。
--enable-dav和--enable-dav-fs是SVN需要的参数,为把apache和SVN配合起来工作,必须加上这两个参数。启用webdav协议处理,启用DAV文件系统提供者。
--enable-so是启用动态共享库。
(3) make 编译Apache web服务器
(4) make install 安装Apache web服务器
(5) 启动Apache web服务器
用如下命令启动Apache服务器:
/opt/apache2/bin/apachectl start
如果一切正常,在客户端通过网页浏览器即可成功访问此Apache服务器。
3.架设Subversion服务器
(1) 准备好安装源码目录:
Subversion服务器的最新版本可以在http://subversion.apache.org/download/下载得到。这里选用最新的稳定源码包版本1.6.17版。下载完后使用以下命令解压得到Subversion的源码目录:
tar jxvf subversion-1.6.17.tar.bz2
解压之后,会在当前目录生成Sbversion的源码包subversion-1.6.17文件夹。
(2) 配置Subversion:
进入解压后的源码目录,并执行以下命令配置Subversion服务器:
./configure --prefix=/opt/subversion --with-apxs=/opt/apache2/bin/apxs
--with-apr=/opt/apache2/ --with-apr-util=/opt/apache2
配置的参数解释如下:
--prefix是指定安装到哪个目录,这里把Subversion安装到/opt/subversion目录下。
--with-apxs让SVN和apache结合,作为apache服务器的一个模块。
--with-apr和--with-apr-util 是指定apr和apr-util所在的目录,这里APR和APR-UTIL是被安装在/opt/apache2目录下。
(3) make 编译SVN服务器
(4) make install 安装SVN服务器
成功安装svn后会在/opt/apache2/conf/httpd.conf 中自动加上以下两句:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
这样,启动apache web服务器时,svn服务会以apache模块的方式一起启动。
(5) 配置SVN服务器
在/opt/apache2/conf/httpd.conf文件末尾加入如下location段:
DAV svn
SVNParentPath /data/svn ---------------------SVN库的存放路径
SVNListParentPath on ---------------------------允许查看SVN库目录列表
AuthType Basic -------------------------------------采用基本认证类型
AuthName ""BHBH Subversion.repository""-----------登录窗口的提示信息
AuthzSVNAccessFile /etc/svn.access ---------------指定权限配置文件
AuthUserFile /data/svn/authfile ----------------------指定用户认证文件
Require valid-user ------------------------------------强制使用身份验证
RedirectMatch ^(/svn)$ $1/------------------------------使url的/svn转义成/svn/
(6) 创建SVN库
依照上面配置文件中的设定,先用如下命令创建SVN服务器存放数据库的文件夹:
mkdir -p /data/svn
再用以下命令创建3个库分别用于硬件组(HW)、软件组(SW)、测试组(TEST)三个部门存储数据。
svnadmin create --fs-type fsfs /data/svn/HW
svnadmin create --fs-type fsfs /data/svn/SW
svnadmin create --fs-type fsfs /data/svn/TEST
注意库目录的权限设置,要确保每个库目录下的db子目录的所有文件可读写。下面是以HW库为例的设置方法,其余库类似。
chmod -R 777 /data/svn/HW/db
(7) 添加SVN用户
以下命令可以添加一个可访问svn服务器的用户,如硬件组的一个员工hw1,并把此用户的信息存储到/data/svn/authfile认证文件中:
htpasswd -c /data/svn/authfile hw1
按提示设置好hw1的svn服务器访问密码后,若要再添加其它用户,如添加硬件组的另一个员工hw2,可用下面的命令:
cd /data/svn
htpasswd authfile hw2
添加其他用户方法同上。这里设定添加了软件组的sw1和sw2,测试组的test1和test2四位员工,并添加了两位公司经理admin1和admin2,下面详述对各个用户访问SVN服务器的权限的精确控制方法。
4. SVN服务器访问权限的精确控制
通过设置访问控制文件/etc/svn.access可以实现各个用户访问SVN服务器的权限的精确控制。
编辑/etc/svn.access文件内容如下:
* =
@test = rw
@admin = r
用户访问SVN服务器某个库时,SVN服务器会按此权限配置文件里相应库逐行验证用户的权限。通常第一行*= 先把所有用户的权限
取消,避免权限设定的混乱。然后SVN服务器会继续检查后面是否有设定此用户的权限。若有,则按后面的设定赋予此用户具体的权限。
以上设置中,先在groups里设置好用户所属分组。比如上面把hw1和hw2两个用户设置为hw组,然后通过@hw就可以设定这两个用户的权限。@hw=rw表示hw1和hw2用户对SVN的HW库有读写权限。而通常公司经理只是对项目进度和质量进行审查,一般不参与项目的研发。为严格实现权限控制,避免误操作,这里通过@admin=r给公司经理设定了只读权限。
这样,就能实现每个研发部门的研发成员对本组的SVN库目录有读写权限,而不能随意访问其他组的资源。另外,公司经理对所有组的资源都有只读权限,方便审查项目的进展和质量。
参考文献:
[1] (美)皮拉拖,(美)苏斯曼,(美)费泽帕特里克著.使用subversion进行版本控制(影印版)[M].北京:开明出版社.2009:14-17.
[2] (美)梅森(Mason,M.)著,陶文 译.版本控制之道:使用Subversion(第2版)[M].北京:电子工业出版社[M].2007:50-52.
[3] 徐德民.操作系统原理Linux篇[M].北京:国防工业出版社,2004:18-20.
[4] 顾鹏,刘立刚,谢长生.数据存储系统备份技术研究与分析[J].计算机安全,2003,(6):32-35.
[5] 张韫福,陈曙晖,赵振宇.Linux网络应用技术[M].长沙:国防科学技术大学,1999:44-45.",##隔###