18
三
三
代码是各自为政。cvs管理员又落到了我的身上。
可以在同一代cvs服务器上维护多个代码仓库吗?如何做呢?
下面我们就一步步来在同一台机器上搭建多个cvs仓库,以project0和project1为例,仓库分别位于/cvsroot/project0和/cvsroot/project1目录
- 安装cvs。
在redhat的系统上,使用rpm -qa | grep cvs查看是否安装了cvs包,如果没有找光盘安装下,或到rpmfind网站上找。当然也可以使用源代码安装。 - 建立cvs专用的用户组和用户
# groupadd cvs
# useradd -g cvs -d /cvsroot cvs - 设置xinet.d
# vi /etc/xinetd.d/cvspserver
把disable = YES改为disable = NO
把server_args = 后台的参数改为-f –allow-root=/cvsroot/project0 –allow-root=/cvsroot/project1 pserver
# chkconfig –level 345 xinetd on
# service xinetd restart - 建立并初始化仓库
# mkdir -p /cvsroot/project0
# mkdir /cvsroot/project1
# chown -R cvs:cvs /cvsroot
# chmod 770 -R /cvsroot
# cvs -d /cvsroot/project0 init
# cvs -d /cvsroot/project1 init - 好了,现在netstat -nl,看是否在2401端口监听。如果有,一切ok,下面来管理帐号
- 关于帐号
每个cvs项目下有个目录CVSROOT,是cvs用管管理项目的一些文件。里面的passwd是cvs的帐号密码文件(cvs可以使用自己的密码,也可以使用系统的密码,也可以两者一起用),如果没有这个文件直接添加。我们来编辑这个文件。在编辑这个文件之前,需要提一下这个密码, 他使用的标准的crypt()函数进行加密,与unix帐号一样。最简单的方法可以在linux上随便添加一个帐号,然后从密码文件中把加密的密码复制出来再加到cvs的passwd文件中,然后把系统帐号删除。当然我提供一个脚本来生成这个密码。
密码文件分三列,第一个为使用cvs客户端登陆时使用的用户名,第二列为密码(可为空), 第三列为使用的系统帐号。(当然,每个项目创建单独的系统帐号来映射,会带来更好的效果)
#vi /cvsroot/project0/CVSROOT/passwd
添加如下内容:
foo:di35EudwM2NdU:cvs
ufo:adoifeojfoeajo9:cvs
# vi /cvsroot/project1/CVSROOT/passwd bar:aasdfeawe334a:cvs
ufo:sasdfaefaoeajo9:cvs bar:adoifeojfoeajo9:cvs - 对于更深层的控制,可以使用CVSROOT/readers和CVSROOT/writers。这两个文件是简单以换行符分割的cvs用户名列表。如果在readers文件中列出,则此用户为只读;如果在writers文件中被列出,则此用户可写,否则为只读。如果某个用户在两个文件中都读,吼吼,冲突了吧?为了安全,这时候是只读权限。
- 这时候登陆看看,是否可以登陆?
cvs -d :pserver:foo@cvs.host.com:/cvsroot/project1 login - 附:生成密码的perl脚本:
#!/usr/bin/perl -w
#
use strict;print "Enter content to crypt:";
chomp(my $string = <STDIN>);print "\nEnter two random char as salt:";
chomp(my $salt = <STDIN>);my $crypt = crypt($string, $salt);
print "The crypt passwd is:\t$crypt; - 参考文献:
cvs使用手册