亡羊补牢,为时未晚:开始构架CVS服务器,跟随分布式开发的脚步... ...

今天在看linux资料的时候看到了CVS(concurrent version server)服务。这就是我理想中分布式开发的利器,其实人家已经用了n年了,但是我觉得亡羊补牢,为时未晚。于是花了整整一天来研究这个东东,呵呵终于给我整出来了,哈哈哈^_^!下面就谈一下构架一个CVS框架的简单过程。
A:你至少需要两台计算机,一个装linux,另一个可以随便(不过我选择了熟悉的windows)。
B:用linux当cvs服务器, windows当客户端。

其实一个基本的CVS框架还是比较简单的,如果能顺利的构架上CVS服务器那么客户端可以找一些工具来使用(我用的是winCvs1.3中文版)。下面就说一下linux下的CVS服务器架设过程:

【datatime】2006-08-15
【title】CVS的架设
1. 首先创建用于CVS的组和用户:
代码
/usr/sbin/groupadd cvs   
/usr/sbin/useradd cvsroot -g cvs
passwd cvsroot
cvsroot就是我们做CVS操作使用的。

2. 修改配置文件:
#cat/etc/services | grep cvspserver
看看是否有:
cvspserver    2401/tcp #CVS client/server operations   
cvspserver    2401/udp #CVS client/server operations
这2行。系统自带了CVS时,这2行也已经有了,只需要确认一下。如果没有,请自己加上去。

3. 然后必须创建启动脚本:
vi  /etc/xinetd.d/cvspserver
内容如下:
代码

service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot
pserverlog_on_failure += USERID
}
  其中server指定CVS可执行文件路径,默认安装就是/usr/bin/cvs。server_args指定源代码库路径及认证方式等,例子中把源代码存放在cvsroot的主目录中,也可以另外指定路径,但必须注意权限设置,pserver是密码认证方式,这种方式的安全性要差一些,但操作起来比较简单。


4. 初始化CVS

切换到cvsroot用户,然后进行初始化:
cvs -d /home/cvsroot init
这个路径应该与cvspserver文件中指定的路径相同,初始化后会在此路径下面创建CVSROOT目录,存放用于CVS管理的一些文件。此时重新启动xinetd服务,CVS服务器应该能够启动了。
/etc/rc.d/init.d/xinetd restart
当然,重新启动计算机也可以。确认是否启动:
netstat -anp|grep 2401

如果能看到:
tcp 0 0 0.0.0.0:2401 *.* LISTEN
说明已经正常启动,没有的话请重新检查配置过程是否有错误或者遗漏。
最后还必须检查防火墙的设置,看2401端口是否打开打开。
/sbin/iptables -L&line;grep cvs
如果看到 ACCEPT tcp -- anywhere anywhere tcp dpt:cvspserver
说明端口已经打开,否则请打开防火墙2401端口
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 2401 -j ACCEPT
/sbin/service iptables save

5. 用户管理
  CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。CVS用户名和密码保存在CVSROOT目录下的passwd文件中,格式为:
  用户名:密码:系统用户
  也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。这里的系统用户一般为cvsroot这个用户. passwd文件默认并不存在,我们必须自己创建。文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以借用Apache的命令来完成这项工作:
先创建一个passwd文件
htpasswd -c passwd username /* 这里的passwd是一个文件名是在你的CVSROOT下要被创建的 */
其他用户直接创建,不用带参数
htpasswd passwd username
  这个命令为username指定密码,并保存在passwd中,文件不存在时会自动创建。htpasswd命令不是为CVS而设,因此总有一些遗憾,它不能自动添加映射到的用户名,不过没关系,我们设置好密码后,自己把这部分加上。我的做法是映射到cvsroot用户,如果需要映射其他的用户,请注意给相应的目录设置好权限,否则CVS用户可能无法访问源代码仓库。要彻底防止使用系统帐号登陆,可以编辑CVSROOT目录下的config文件,把:
  #SystemAuth=no
  这一行前面的#去掉,CVS就不会验证系统用户了,否则当用户名不在passwd文件中时,CVS会进行系统用户的验证。此外还必须配置读写权限,使用CVSROOT目录下的readers和writers文件进行这个工作。这2个文件默认也是没有的,没关系,自己创建就可以了。readers文件记录拥有只读权限的用户名,每行一个用户;writers文件记录拥有读写权限的用户名,也是每行一个用户。注意, readers文件比writers优先,也就是说出现在readers中的用户将会是只读的,不管writers文件中是否存在该用户。配置完毕,先测试一下:
  #cvs -d :pserver:username@127.0.0.1:/home/cvsroot login
  这里假设用户名是username,本机登陆。出现密码提示,输入正确的密码后,登陆成功。如果提示访问被拒绝,请检查用户权限、目录权限以及防火墙设置(特别注意,这个)。建议设置环境变量CVSROOT:
  #export CVSROOT=:pserver:username@127.0.0.1:/home/cvsroot
  以后就不需要输入-d参数了,但-d参数会覆盖这个环境变量的设置。

这里再介绍一下CVS客户端的使用心得(我用的是WinCvs):
呵呵,看来版本太高了也是问题,我一开始用的是2.0.3的英文版winCvs,搞的我真是晕头转向的也没搞出来。后来决定到网上求助,老天有眼找到了一个中文版的winCvs,哈哈哈,竟然还带安装说明和使用说明。天哪,开源真是太好了,以后也要为开源尽一份力!所以具体的操作我就不写了,中文的文档写的一定比我好,呵呵,具体的资料上google搜索一下winCvs中文版都会有的。!!!!!!!!!!!!!特别提醒的是那个python和Tcl安装文件都得下来装,否则shell不能用。

posted @ 2006-08-15 23:46  moonz-wu  阅读(541)  评论(0编辑  收藏  举报