在 RHEL4 上搭建一个完整的 CVS 服务器

CVS 是 Concurrent Version System(并行版本系统)的缩写,用 于版本管理.如果大家曾经参与过多人协作开发的项 目,大家肯定有这样的痛苦经历:由于多个人同时修改同一个文件,自己辛辛苦苦修改的程序被别人彻底删除了.另外,如果你的软件/程序已经发布了三个版本, 而这时候用户需要你修改第二个版本的东西,也许你会因为只保留了最新版本而痛哭流涕.还有就是你对程序做了一些修改,但是修改很少,你只想给远方的同事发 一个两个版本之间的差别文件,这样可以免于邮箱不够大,网速太慢之类的问题.为了解决类似这样的问题,以及诸如生成补丁文件,历史版本修改等,一帮黑客 (褒义)在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,开发了 CVS.(SCCS: Source Code Control System,RCS:Revision Control System)

CVS 的基 本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序.由仓库管理员统一管理这些源程序.这样,就 好象只有一个人在修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地.用户做的任何修改首先都是在本地进行,然后用  cvs 命令进行提交,由 cvs 仓库管理员统一修改.这样就可以做到跟踪文件变化,冲突控制等等.

由于 CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部分.不过大多数 CVS 软件都把它们合二为一了. 
  

结合文档和一些网上资源,我写一点非常简单的“速成”的教材.希望对大家有用. 
下面是我的步骤和做法: 

前提要求: 

root 权限; 
CVS软件,请找到相关的rpm,tgz,deb 等包装上,或者到  
http://www.cvshome.org/CVS/Dev/code 
下载原程序编译安装,这里我下载的是 cvs-1.12.13.tar.bz2 原码包,安装的方法是
# tar jxvf cvs-1.12.13.tar.bz2
# cd cvs-1.12.13
# ./configure
# make
# make install
编译安装完成后,我们还需要把服务加入到系统中,让 cvs 服务器随系统来起动.

1)进入 /etc/xinetd.d 目录,编辑一个 cvspserver 的文件,文件内容如下:
# default: on
# description: The cvs server sessions;
#
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
env = HOME=/home/cvsroot/CVSROOT
server = /usr/bin/cvs
server_args = -f  --allow-root=/home/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。
# chmod 644 cvspserver

2)修改 /etc/services 文件,在其中加入服务端口(对应上面文件的 port = 部分),服务名与上面的文件名相同,内容格式如下:
cvspserver      2401/tcp                        # Cvs Server
cvspserver      2401/udp                        # CVS Server

3)创建 cvs 组和 cvs 用户
假设我们建一个组叫cvs,用户名是cvsroot.建组和用户的命令如下 
# groupadd cvs 
# adduser cvsroot -s /bin/bash -g cvs -d /home/cvsroot

4)创建并编辑 /home/cvsroot/.bashrc 文件,其内容如下:
.bashrc
=========================================================================
# .bashrc

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
==========================================================================

5)初始化 CVS, 建立CVS仓库
# cd /home
# chown -R cvsroot:cvs cvsroot
# su - cvsroot
$ cvs -d /home/cvsroot init 此处对应上面创建的 cvsroot 路径

用 cvsroot 用户登陆,修改 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限: 

$chmod 771 . (或者770应该也可以) 
注意:这一部分工作是按照文档说明做的,是否一定需要这样没有试验,我会在做试验后在以后版本的教程说得仔细一点.如果您有这方面的经验请提供给我,谢谢. 

说明:上面的行是单独一整行,/usr/bin/cvs 应该是你的cvs版本的命令路径,请根据自己的系统调整./home/cvsroot 是你建立的CVSROOT的路径,也请根据上面建立目录的部分的内容做调整.

6)创建口令生成文件 passwdgen.pl (用 cvsroot 用户注册)
$ mkdir bin
$ cd bin
创建并编辑文件 passwdgen.pl ,内容如下:
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
$ chmod u+x passwdgen.pl

添加可以使用 CVS 服务的用户到 cvs 组: 
以  root 身份修改 /etc/group,把需要使用 CVS 的用户名加到 cvs  组里,比如我想让用户 work 和zzg 能够使用 CVS 服务,那么修改以后的  /etc/group 应该有下面这样一行: 
cvs:x:105:work,zzg

在你的系统上GID可能不是105,没有关系.主要是要把work和zzg用逗号分隔开写在最后一个冒号后面.当然,象RedHat等分发版有类似linuxconf这样的工具的话,用工具做这件事会更简单些.

重起inetd使修改生效:    
#killall -HUP inetd

如果使用的是 xinetd 的系统:
# services xinetd restart

7)创建 cvs 用户密码文件 passwd , 读权限文件 readers , 写权限文件 writers.
这三个文件位于 /home/cvsroot/CVSROOT 目录下.(用 cvsroot用户注册)
$ vi passwd
passwd 内容如下:
cvsroot::cvsroot
work::cvsroot
zzg::cvsroot
anonymous::cvsroot

8)用 passwdgen.pl 生成密码,加入到上面的 passwd 文件中的用户的 :: 之间,如你给 work 用户分配密码为 work123 ,可如此运行:
$ passwdgen.pl "work123"
系统会显示出一串字符,将上面的字符拷贝到 :: 中.

$ vi readers,内容如下:
anonymous

$ vi writers,内容如下:
work
zzg

(特别注意:在 readers 中添加了某个用户,那么该用户如果添加到 writes 文件中将没有任何意义,因为系统在 readers 文件中找到该用户后,将不会再到 writes 文件中去查找,这会造成你添加在 writers 文件中企图赋予"写"权限的用户,由于该用户已经在 readers 文件中存在,而失去"写"权限.)

最后,我们来测试一下:
用 work 用户登录 cvs (假设我的 IPADDERS = 192.168.0.5):
$ cvs -d :pserver:[email protected]:/home/cvsroot login
如果输入口令后,如果没有返回出错信息,则表示你的 cvs 服务器搭建成功.

你可能感兴趣的:(在 RHEL4 上搭建一个完整的 CVS 服务器)