CVS在项目开发中使用的非常广泛,有些新手对于linux不太熟悉,配置CVS时错误百出,我也是从新手一步步过来的,结合自己的工作心得和使用经验,写了这篇指南,希望对初学者有所帮助。
********************************
* 版权所有:Matrics
* 转载请注明出处 http://matrics.cublog.cn
********************************
OS版本:RHEL 4 u3
cvs版本:1.11.17 (系统自带rpm包)
目标 :安全控制, 多仓库管理,网络访问
申明:
由于使用的是系统自带的cvs服务器rpm版本,故此略过安装步骤。
重要的配置文件:
/etc/passwd
/etc/xinetd.d/cvspserver(新创建)
cvs仓库位置:
/opt/cvsbase/srchome
cvs管理员:cvsadmin
cvs用户组:cvs
配置步骤:
1、创建cvs管理员和组
#mkdir -p /opt/cvsbase/srchome
#groupadd cvs
#useradd -g cvs -G cvs -d /opt/cvsbase/cvsadmin cvsadmin
#chown cvsadmin.cvs /opt/cvsbase/srchome
2、更改cvsadmin的密码
passwd cvsadmin
3、多仓库
由于/etc/xinetd.d/cvspserver文件中,server_args项只能指定的一个CVS仓库,所以要想使用多个仓库需要特殊的方法——脚本。
编辑/etc/xinetd.d/cvspserver文件内容如下:
# File begin
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /opt/cvsbase/cvsrepos.run
log_on_failure += USERID
}
# EOF
编辑仓库脚本文件 /opt/cvsbase/cvsrepos.run
# File begin
#!/bin/bash
CVSHOME=/opt/cvsbase/srchome
/usr/bin/cvs -f \
--allow-root=$CVSHOME/proj1 \
--allow-root=$CVSHOME/proj2 \
--allow-root=$CVSHOME/proj3 \
...
...
pserver
# EOF
注意每个“--allow-root”项末尾的 \ 后不能有空格,否则会报告错误。
以后重启xinet服务
# chmod +x /opt/cvsbase/cvsrepos.run
# service xinetd restart
4、初始化cvs仓库(XXX为项目名)
#su - cvsadmin
#mkdir /opt/cvsbase/srchome/XXX
#cvs -d /opt/cvsbase/srchome/XXX init
5、cvs用户验证
普通cvs用户不使用linux系统帐户,而是使用cvs自身的用户验证系统,映射cvs用户到linux的系统帐户上。
常用的方法是,为每个工程建立一个等效系统帐户,限制其登录,只作为映射使用,且此帐户应该是cvs组的成员。
命令如下:(XXX用实际的项目名代替)
#adduser -g cvs -G cvs -s /bin/false -d /opt/cvsbase/srchome/XXX -M XXXcvs
创建cvs用户
可以使用htpasswd工具生成加密后的密文,也可以使用perl编写小的passwd加密脚本。
方法一:perl脚本
加密用的perl脚本内容如下:
# File begin
#!/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";
# EOF
文件保存到/opt/cvsbase/cvspasswd.pl,并赋予可执行权限:
#chmod +x /opt/cvsbase/cvspasswd.pl
这样,通过运行
#/opt/cvsbase/cvspasswd.pl "密码"
就可以得到密码加密后的密文。
方法二:htpasswd工具
#htpasswd -c cvspasswd cvsusername
输入两次密码后,加密后的密文就保存到了cvspasswd文件里。冒号后的一段就是密文。
不管用哪种方法,得到密文后,编辑项目cvs仓库下的/CVSROOT/passwd文件,以如下格式添加用户:
cvsusername:加密后的密文:XXXcvs
上例共三部分,分别是要添加的cvs用户名、cvs用户密码加密后的密文、被映射到的linux系统帐户。
cvs用户名自定义,密文用上面的cvspasswd.pl脚本生成,被映射的linux系统帐户在第5步开始处建立。
如果cvs用户需要有写的权限,那么用户名添加到项目cvs仓库的CVSROOT/writers文件里,每行一个用户。
#echo cvsusername >> writers
如果需要只读权限,就把用户名添加到项目cvs仓库的CVSROOT/readers文件里,每行一个用户。
#echo cvsusername >> readers
需要注意的是,拥有写权限的用户名不能再次出现在readers文件中,换句话说,每个用户在两个文件中最多只能出现一次。
6、启动cvs服务器
#service xinetd restart
使用命令查找cvs服务是否正常启动:
netstat -l | grep cvspserver
如果有显示,说明cvs服务器已经正常启动。
7、防火墙配置
cvs服务器默认使用2401端口监听连接请求,所以想要开通远程cvs连接的话,需要在防火墙上打开2401端口的tcp连接。可以使用system-config-securitylevel-tui工具进行可是可视化配置, Customize -> Allow incoming:Other ports: 输入2401:tcp,如果已存在其他项,则彼此用空格隔开。
保存退出。
熟悉iptables命令的人也可以直接编辑/etc/sysconfig/iptables文件添加规则,然后重新启动iptables服务也可。
然后,使用cvs客户端工具进行连接测试。
至此,linux上的cvs服务器配置完毕。
如果用户提交 出错 c vs cannot mkdir
把cvsroot目录所有者给cvsroot 命令:chown cvsroot /home/cvsroot/ -R