Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2367700
  • 博文数量: 145
  • 博客积分: 8668
  • 博客等级: 中将
  • 技术积分: 3922
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-09 21:21
个人简介

work hard

文章分类

全部博文(145)

文章存档

2016年(1)

2015年(1)

2014年(1)

2013年(12)

2012年(3)

2011年(9)

2010年(34)

2009年(55)

2008年(20)

2007年(9)

分类: 系统运维

2009-10-25 23:15:19

虽然网上有很多关于CVS服务器的配置文档供大家参考,但是本着“纸上得来终觉浅,绝知此事要躬行”的态度,还是自己动手安装一下。因为别人配置的环境和 自己的毕竟不大一样,操作起来可能会有一些步骤有问题。只有我们自己遇到问题并解决时,才能够对CVS服务器的配置理解的更加深入。现在已经有了CVS的 替代版本SVN了,但是毕竟CVS依然还是使用最广泛的版本控制系统,也建议各位需要用到CVS的朋友也动手装一下,实现你自己的CVS服务器。

闲话少说,转入正题。我用的操作系统是:Debian GNU/Linux 2.6.21-2-686。

一、服务器端的安装与配置

(一)CVS的安装
  通常情况下,安装操作系统的时候就安装了CVS.这里首先使用root用户(其他用户下通过sudo)可以通过命令:
debian:~# whereis cvs
cvs: /usr/bin/cvs /usr/X11R6/bin/cvs /usr/bin/X11/cvs /usr/share/man/man1/cvs.1.gz /usr/share/man/man5/cvs.5.gz

这说明我的系统也已经安装了CVS,通常位于/usr/bin下.
如果系统尚未安装CVS的话,可以通过
debian:~# apt-get install cvs

对一个不同的发行版有不同的安装方法,最基本的方法就是下载源码包(.tar.gz的包),然后自己一步一步安装。主要就是解压,configure, make, make install这几步。

另外一个要提醒的是,曾有的文章中写到还要安装CVSD。本人Google了一下,得知CVSD是一个CVS的辅助工具,可以是CVS的配置更加方便。不 安装他也没关系,所以我们直接配置CVS,而且本生CVS的manual也说了这个安装好的CVS本身就即是服务器也是客户端,主要就是看如何对CVS的 配置了。

下面重点介绍CVS服务器段的配置。

(二)CVS服务器端的配置

1.创建cvs组和用户
1)创建cvs组
debian:~# groupadd cvs   

2)创建的新用户HOME目录
debian:~# mkdir /home/cvsroot

3)添加新用户cvsroot,并将其添加至cvs组,并指定其HOME目录
debian:~# useradd -g cvs -G cvs -d /home/cvsroot cvsroot

4)设置cvsroot用户的密码,我这里为:cvsroot
debian:~# passwd cvsroot
Enter new UNIX password:
Retype new UNIX password:
passwd:已成功更新密码

5)更改/home/cvsroot/目录及其子目录的属主和属组,因为是在root用户下间的该目录,他的属主和属组都是root,这里我们要将其属主改为cvsroot,属组改为cvs,保证cvs组的用户对该目录有相应的权限。
debian:~# chown -R cvsroot.cvs /home/cvsroot/

6)更改/home/cvsroot目录属性,保证cvsroot同组(cvs组)的其他用户也有读写和执行权,我们以后要为cvs组添加用户
debian:~# chmod -R 775 /home/cvsroot/

2.切换至cvsroot用户,并创建一个仓库

1)切换用户
debian~# su cvsroot

2)设置全局变量CVSROOT,指定仓库所在的目录
debian:/root$ export  CVSROOT=/home/cvsroot/

3)创建仓库
debian:/root$ cvs init

3.提交源入源代码
1)进入代码所在目录,也就是你想做成CVS控制的源代码目录,我这里是/home/usbprj/,目录下文件有:
debian:/root$ cd /home/usrprj/
debian:/home/usbprj$ ls
Makefile  Module.symvers  test.c  usb-skeleton.c

装载cvs import -m "[repository test]" [cvstest] [vendortag] [releasetag]
-m后面引号内填入log内容,接下来是源代码模块名称,接着是装载者,最后是标识符号,我这里是:
debian:/home/usbprj$ cvs import -m "Myproject" usbprj cvsroot start
N usbprj/Makefile
N usbprj/test.c
N usbprj/Module.symvers
N usbprj/usb-skeleton.c

No conflicts created by this import

此时,我们的源码也提交了,说明module已经建立了。其目录为:/home/cvsroot/usbprj/

2)如果我们在root用户(或者其他用户,但必须保证该用户对于存放module的目录有写的权限)下测试,checkout出这一个module,可以执行如下:
debian:/home/usbprj# cvs -d /home/cvsroot checkout usbprj
cvs checkout: Updating usbprj
U usbprj/Makefile
U usbprj/Module.symvers
U usbprj/test.c
U usbprj/usb-skeleton.c

说明在本地可以checkout出来,而且他会自动在当前目录下创建以该module名为名的目录项,不管你checkout出来的是一个源码文件还是整个module。我这里checkout出来的module路径为/home/usbprj/usbprj/下。

4.创建登录CVS服务器的用户和密码
1)在/home/cvsroot/CVSROOT/下创建passwd文件,并编辑内容如下:
cvsuser1:*****:cvsroot
cvsuser2:*****:cvsroot

这个文件的意思是有cvsuser1和cvsuser2两个登录cvs服务器的用户,登陆后的权限是cvsroot权限,即第三个字段指定。
注意:这里的新建用户的两个新建登录cvs服务器的用户和系统用户是不同的,这两个用户不能用来登录系统,只能登录cvs服务器。这里我们默认不允许系统用户登录cvs服务器。

2)其中,passwd文件中每行的第二个字段“*****”为用户cvsuser1和cvsuser2密码的加密口令。可以通过下面文件对用户密码加密。
文件名:passwdgen.pl.该文件是perl的脚本。必须保证系统安装了perl才可执行该文件。
内容如下:
#!/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";

为该文件添加可执行权限,
debian:~$ chmod +x passwdgen.pl

用户cvsuser1和cvsuser2用户生成加密口令:
debian:~$ ./passwdgen.pl cvsuser1
ZGzWKlE1mv4EY
debian:~$ ./passwdgen.pl cvsuser2
LFfpGaDMC/Cj6


用法:passwdgen.pl yourpasswd. 其中,yourpasswd即你所需要设定的密码。我这里给我的两个用户的密码和用户名同名,呵呵,为了方便。其中生成的加密口令为13个字符,是由 [0-9][A-Z][a-z][.][/]组成。把生成的加密口令替换到passwd文件中相应的“*****”字段即可。

5.设置开机启动CVS服务
我们这里使用xinetd启动,如果系统没有安装xinetd的话,安装之。
1)检查/etc/services中,cvspserver是否开启。cvspserver是远程登录CVS服务器时对用户的验证方式。
debian:~$ cat /etc/services | grep cvspserver
# sources like .
cvspserver      2401/tcp                        # CVS client/server operations
cvspserver      2401/udp

这说明我的系统已打开该服务。如果最后两行前面有“#”字符,把他删除就可以了。

2)创建cvspserver文件

切换至root用户下:
debian:~# cd /etc/xinetd.d/
debian:/etc/xinetd.d# touch cvspserver

编辑该文件,内容如下:
service cvspserver

{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_success += USERID
log_on_failure += USERID
}

其中,--allow-root=/home/cvsroot即仓库所在目录。
注意:每行的第一个"="左右两侧要有一个空格。

3)重启xinetd服务,使配置生效
重启xinetd
debian:/etc/xinetd.d# /etc/init.d/xinetd restart
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.

确定cvspserver是否启动
debian:/etc/xinetd.d# netstat -l | grep cvspserver
tcp        0      0 *:cvspserver            *:*                     LISTEN   

至此,CVS服务器配置全部完成,下面进行测试。

二.客户端测试
客户端的测试包括本地测试和远程测试。
1.本地测试上面我们已经用root用户checkout测试过了。
具体方法就是:
debian:/home# export CVSROOT=/home/cvsroot/
debian:/home# cvs login

如果没有提示出错的话,就代表成功了。
但如果在pserver启动以后,再用同种方法进行本地测试的话,就有问题了,提示如下:
debian:/home# cvs login
cvs login: can only use `login' command with the 'pserver' method
cvs [login aborted]: CVSROOT: /home/cvsroot/

提示的意思是说,现在这能使用通过pserver验证的方式登录服务器了。那么,在配置完pserver服务器后,本地和远程登录的方法就一样了,都要通过pserver验证。下面介绍远程登录的方法,同样适用于本地登录。

2.远程测试的方法如下:
1)CVS服务器端IP:192.168.1.248。使用另外一台主机,同样是Debian GNU/Linux,同样保证安装了CVS,IP为:192.168.1.244。 通过Windows下WinCVS同样可以登录。
客户端主机使用非root用户,我的用户名为david.
首先建立环境变量CVSROOT,以用户cvsuser1登录:
david@debian:~$ export CVSROOT=:pserver:cvsuser1@192.168.1.248:/home/cvsroot

然后登录
david@debian:~$ cvs login

如果没有错误提示,则代表成功登录CVS服务器。
但我这里出现了一个提示:
david@debian:~$ cvs login
Logging in to: :pserver:cvsuser1@192.168.1.248:2401/home/cvsroot
CVS password:
cvs login: CVS password file /home/david/.cvspass does not exist - creating a new file

该问题就是在客户端登录时要在HOME目录下有个.cvspass的文件即可。因此,解决方法就是在/home/david/下:
david@debian:~$ touch .cvspass

再次登录就没有提示了。本地登录也可以采用这种方法,或者将服务器的IP地址改为localhost.

2)检出模块
我们上面已经建立了一个仓库了,usbprj.我们在客户端将该模块checkout:
david@debian:~$ cvs checkout usbprj
cvs checkout: Updating usbprj
U usbprj/Makefile
U usbprj/Module.symvers
U usbprj/test.c
U usbprj/usb-skeleton.c

则在当前目录下生成目录usbprj.

进入该目录,可以对该目录执行文件的修改,添加,然后可以用commit命令对修改后的进行提交。具体CVS的操作,可以看CVS的手册,这里不再多说。

还有一个问题,我们这里CVS服务器有两个用户,cvsuser1和cvsuser2.如果需要对这两个用户设置不同的权限。可以在服务器端/home /cvsroot/CVSROOT/下建立两个文件,readers和writers。文件中每一行可写一个用户名。readers里面的用户具有只读权 限,writers里面的用户具有可读可写权限。

OK。花了整整一个上午的时间,一边配置服务器,一边总结。总算总结完了。希望能对初学CVS服务器配置的朋友有所帮助。
本文重点参考了两篇文章,这里给出链接:
... D2A1A17%21182.entry
og/cns!CA5914E1BD2A1A17!183.entry

欢迎交流和指正。
阅读(1793) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~