实战:建立RHEL 5.0下版本控制服务器
 

2009-02-13 作者:华江 来源:IT168

 

版本控制(Revision control)是一种软件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号。这种方法是维护(maintenance) of 工程图(engineering drawings)的标准做法, 它伴随着工程图从图的诞生一直到图的定型。 一种简单的版本控制形式,例如,赋给图的初版一个版本等级“A”,当做了第一次改变后,版本等级改为“B”,以此类推等等。

版本控制包括两个方面:确保得到的是最新的版本,记录需求的历史版本。下图是版本控制的工作原理。

图1 版本控制工作原理

什么是Subversion? 

Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。下图是 Subversion的架构

图2是 Subversion的架构

    一端是保存你所有纳入版本控制的数据的Subversion版本库,在另一端是你的Subvesion客户端程序。 

安装Subversion服务器

1. 重新安装Apache服务器

RHEL 5默认安装的Apache没有并包含--enable-so选项,所以无法产生mod_dav_svn.没有这个模块,SVN就无法采用http方式运行,所以必须重新编译新的Apache 。
    #wget http://down.itlearner.com/Soft_Down.asp?UrlID=1&P=1&SoftID=2356
    #tar zxvf httpd-2.2.3.tar.gz
    #cd httpd-2.2.3
    #./configure --enable-dav --enable-so --enable-maintainer-mode
    #make
    #make install

此时会产生一个/usr/local/apache2系统目录。

2. 安装Subversion

    #wget http://www.iusesvn.com/bbs/download/subversion-1.4.0.tar.gz
    # tar zxvf subversion-1.4.0.tar.gz 
    # cd subversion-1.4.0 
    # ./configure --prefix=/usr/local/subverion --with-apxs=/usr/local/apache2/bin/apxs  
    # make
    # make install

说明:--with-apxs指定apxs的安装的目录,可以在安装过程中自动生成两个必要的模块文件mod_dav_svn.so和mod_authz_svn.so以及能够支持它们可以正常地工作。

Subversion安装完成后会生成如表-1组件:

表-1 Subversion组件

3. 通过svnserver命令检查版本

运行命令:
    #svnserver –version
    svnserve,版本 1.4.0 (r21228)
   编译于 May 16 2007,16:02:18
    Copyright (C) 2000-2006 CollabNet.
    Subversion is open source software, see http://subversion.tigris.org/
    This product includes software developed by CollabNet (http://www.Collab.Net/).
    The following repository back-end (FS) modules are available:
    * fs_fs : 模块与纯文本文件(FSFS)档案库一起工作。
    另外svnserver命令参数
    -d [--daemon]            : 后台模式
    --listen-port 参数     : 监听端口(后台模式)
    --listen-host 参数     : 监听主机名或IP地址(后台模式)
    --foreground             : 在前台运行(调试时有用)
    -h [--help]              : 显示这个帮助
    --version                : show program version information
    -i [--inetd]             : inetd 模式
    -r [--root] 参数       : 服务根目录
    -R [--read-only]         : force read only, overriding repository config file
    -t [--tunnel]            : 隧道模式
    --tunnel-user 参数     : 隧道用户名(模式是当前用户UID的名字)
    -T [--threads]           : 使用线程代替进程
    -X [--listen-once]       : 监听一次(调试时有用)
    --pid-file 参数        : write server process ID to file arg 

4. 建立Subversion 的数据库

Subversion 的数据库用来存放任意数量项目的受版本控管数据,建立方法很简单
    #svnadmin create /svndate

使用Apache 模块方式运行Subversion

Subversion服务器有两种运行方式,一是可以作为Apache 2.x的一个模块,以WebDAV/DeltaV协议与外界连通;另外,也可使用Subversion 自带的小型服务器程序svnserve。该程序使用的是自带的通讯协议,独立运行。

1、检查修改apache配置文件

# vi /usr/local/apache2/conf/httpd.conf
    查看是否有下面这两行,一般会自动加入,如果没有则要手工加入
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    将ServerName 修改为ServerName:80
     在末尾加上以下参数
    <Location /svn>
     DAV svndate
    SVNPath /mydate
    </Location>

2、 通过浏览器测试

在 Subversion的在服务器的浏览器中输入网址: http://localhost/svn/repository/

如果你看到图-3的界面:

图3 Subversion

这表明服务器已经以apache模块方式正常运行了。 

使用suvserver方式运行Subversion

以svnserve这种方式的运行又可以分为两种(standalone和xinted)

1. standalone方式运行Subversion

stand-alone模式工作原理见图4。

图4 stand-alone模式工作原理

首先打开防火墙的3690端口:
    iptables -A INPUT -p tcp -m tcp --sport 3690 -j ACCEPT
    iptables -A OUTPUT -p tcp -m tcp --dport 3690 -j ACCEPT
 直接运行 #svnserve –d即可启动服务器
 检查服务器运行情况和端口使用情况:
    分别使用netstat和ps命令检查服务器运行情况和端口使用情况,图5是进程运行情况。图6是端口情况。

图5 查看端口运行情况
 
图6 3690端口运行的是SVN服务器

2、  xinetd 方式运行Subversion

从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念。RHEL 5.0的网络守护进程是xinted(eXtended InterNET daemon)。和stand-alone模式相比xinted模式也称 Internet Super-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。xinetd模式工作原理见图6。

图7 xinetd工作模式

在/etc/xinetd.d/下手工建立一个文件svnserve内容如下
    service svnserve
    {disable = no
    socket_type = stream
    protocol = tcp
    wait = no
    user = apache
    server = /usr/local/bin/svnserve
    server_args = -i}
    下面说明每一行选项的含义。
    disable = no:表示启用这个服务。
    socket_type = stream:表示服务的数据包类型为stream。
    wait = no:表示不需等待,即服务将以多线程的方式运行。
    user = apache:表示执行此服务进程的用户是apache。
    server =/usr/local/bin/svnserve:启动脚本的位置。
    protocol = tcp  :服务类型是tcp 

    编辑 /etc/services 文件加入底下两行:
    svnserve 3690/tcp # Subversion svnserve
    svnserve 3690/udp # Subversion svnserve
    重启xinetd服务即可。

总结:

到此为止RHEL 5.0  下的版本控制服务器Subversion以及设置完成。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织