Linux下CVS的安装、配置与使用(二):服务器端配置与远程使用

 1. 服务器端工作环境:
a. 操作系统:Linux(CentOS6.3-64bit)
b. 安装CVS Server/Client版本:cvs-1.11.23。(Linux下CVS的安装、配置与使用(一):安装与本地使用)
客户端工作环境:
a. 操作系统:Windows7(64bit)
b. 可视化CVS客户端:TortoiseCVS version1.12.5。TortoiseCVS 是一款在Windows上运行的CVS客户端,摆脱了传统cvs的命令行交互方式,取而代之是更加直观的界面操作,当然底层的交互还是基于cvs命令。TortoiseCVS的另一个重要的特点就是完全结合到资源管理器的鼠标右键菜单中进行操作,异常简单和方便。
2. 服务器端的配置
a.  cvs -v查看CVS是否已经安装,如果没有安装先按照文章(一)安装   
[root@localhost Desktop]# cvs -v
Concurrent Versions System (CVS) 1.11.23 (client/server)
Copyright (C) 2006 Free Software Foundation, Inc.
b. 设置系统用户组
假设我们部门有两个项目组,代号分别是长江和黄河。正常情况下,长江组的成员不能去导出或者修改黄河组的代码,反过来也一样。为了限制不同项目组的权限,我们必须设置不同的系统用户组。另外我们可能还需要一个管理员,拥有并管理所有的项目组代码库。综上,我们设置CJ_GRP、HH_GRP系统用户组对应长江和黄河两个项目组,另外设置cvsroot用户作为资源库(repository)的所有者。
[root@localhost ~]# groupadd CJ_GRP
[root@localhost ~]# groupadd HH_GRP
[root@localhost Desktop]# useradd cvsroot
c. 设置各个用户组的用户
现在我们已经有两个个不同的用户组,接下来就是把开发人员的账号 加到各自的项目组中,并设置密码。假设cj_dev和hh_dev分别为长江和黄河项目组的开发人员账号。
[root@localhost ~]# useradd -g CJ_GRP cj_dev
[root@localhost ~]# useradd -g HH_GRP hh_dev
[root@localhost cvsroot]# passwd cj_dev
Changing password for user cj_dev.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost cvsroot]# passwd hh_dev
Changing password for user hh_dev.
New password: 
Retype new password:
[root@localhost ~]# id cj_dev
uid=504(cj_dev) gid=507(CJ_GRP) groups=507(CJ_GRP)
[root@localhost ~]# id hh_dev
uid=505(hh_dev) gid=508(HH_GRP) groups=508(HH_GRP)
d. 指定资源库(Repository)
切换到cvsroot用户,在/home/cvsroot/目录下新建一个cvsrepo目录,并指定为我们的代码库
[root@localhost ~]# su cvsroot
[cvsroot@localhost root]$ cd
[cvsroot@localhost ~]$ mkdir /home/cvsroot/cvsrepo
[cvsroot@localhost ~]$ cvs -d /home/cvsroot/cvsrepo/ init
指定repository之后,/home/cvsroot/cvsrepo/目录下生成了一个CVSROOT的目录,用以对repository的管理。
e. 导入(import)项目模块(module)
我们在/home/cvsroot/下新建cj_pro和hh_proj分别表示长江和黄河两个项目的文件夹,并到各自目录下将项目的文件导入repository。
[cvsroot@localhost ~]$ mkdir /home/cvsroot/cj_proj
[cvsroot@localhost ~]$ mkdir /home/cvsroot/hh_proj
[cvsroot@localhost ~]$ cd /home/cvsroot/cj_proj 
[cvsroot@localhost cj_proj]$ cvs -d /home/cvsroot/cvsrepo/ import -m "changjiang project" cj_proj vendortag releasetag
No conflicts created by this import
[cvsroot@localhost cj_proj]$ cd /home/cvsroot/hh_proj/
[cvsroot@localhost hh_proj]$ cvs -d /home/cvsroot/cvsrepo/ import -m "huanghe project" cj_proj vendortag releasetag
No conflicts created by this import
f. 设置Repository里各项目模块文件的权限
通过cvs import命令导入项目模块后,repository目录下就多了我们导入的两个项目模块。为了区别不同项目组的权限,把项目模块的所属的组改为各自项目对应的用户组(得切换到root用户才有权限修改)。另外,还要注意的是开发人员访问各自的项目目录时,需要在CVSROOT生成lock文件,所以CVSROOT必须对项目开发人员有读写权限。我们可以新增一个CVS_GRP组,使之成为各个开发人员的附加组。同时该CVSROOT目录所属的组为CVS_GRP,这样各个开发人员都有权限在CVSROOT创建lock文件,从而能够正常地导入导出项目代码。
[cvsroot@localhost hh_proj]$ cd /home/cvsroot/cvsrepo/
[cvsroot@localhost cvsrepo]$ ll
total 12
drwxrwxr-x. 2 cvsroot cvsroot 4096 Jan 15 20:05 cj_proj
drwxrwxr-x. 3 cvsroot cvsroot 4096 Jan 15 18:38 CVSROOT
drwxrwxr-x. 2 cvsroot cvsroot 4096 Jan 15 20:18 hh_proj
[cvsroot@localhost cvsrepo]$ su
Password: 
[root@localhost cvsrepo]#  groupadd CVS_GRP
[root@localhost ~]# usermod -G CVS_GRP cj_dev
[root@localhost ~]# usermod -G CVS_GRP hh_dev
[root@localhost cvsrepo]# chgrp -R CJ_GRP cj_proj
[root@localhost cvsrepo]# chgrp -R HH_GRP hh_proj
[root@localhost cvsrepo]# chgrp CVS_GRP CVSROOT
[root@localhost cvsrepo]# ll
total 12
drwxrwxr-x. 2 cvsroot CJ_GRP 4096 Jan 15 20:05 cj_proj
drwxrwxr-x. 3 cvsroot CVS_GRP 4096 Jan 15 18:38 CVSROOT
drwxrwxr-x. 2 cvsroot HH_GRP 4096 Jan 15 20:18 hh_proj

以上步骤就可以满足使用RSH/SSH作为远程访问repository的服务器端配置,其实这种方式并没有启用cvs的pserver服务器进程。剩下的步骤是要使用pserver方式远程访问时服务器还需要的配置。
g. 配置cvspserver服务
i. 在/etc/service中加入cvspserver服务。在文件末尾加入以下两行,表示cvspserver监听的端口为2401
cvspserver      2401/tcp                # CVS pserver service
cvspserver      2401/udp                # CVS pserver service
ii. 在/etc/xinetd.d/目录下新建cvspserver文件,输入下面的内容:
service cvspserver
{
       disable = no
       flags = REUSE
       socket_type     = stream
       wait            = no
       user            = root
       server          = /usr/local/bin/cvs
       server_args = -f --allow-root=/home/cvsroot/cvsrepo pserver
       log_on_failure += USERID
}
其中server是指cvs可执行文件所在的目录,可用which cvs查看,server_args的值不要遗漏-f参数,另外--allow-root=/home/cvsroot/cvsrepo是指cvs repository所在的目录。
[root@localhost cvsrepo]# which cvs
/usr/local/bin/cvs
iii. 重启xinetd
[root@localhost cvsrepo]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                             [  OK  ]
iv. 检查cvspserver是否启动
[root@localhost cvsrepo]# netstat -l|grep cvspserver
tcp      0      0 *:cvspserver       *:*      LISTEN
h. 设置cvs用户
对于采用pserver方式访问cvs repository,cvs服务器会要求登录。至于登录所用的用户名是什么呢,是不是我们前面添加的系统用户cj_dev跟hh_dev?其实cvs有自己一个机制来设置cvs用户和密码,而且cvs用户跟系统用户有一个多对一的关系,而密码是加密后的密码,加密算法跟Linux对系统用户密码的加密一样。cvs将用户名,密码,对应的系统用户等信息保存在cvs指定的repository目录中的CVSROOT/的passwd文件中(在我们这里就是/home/cvsroot/cvsrepo/CVSROOT/passwd,这个文件需要cvs管理员(这里为cvsroot)自行创建。
i. 创建生成密码的脚本
在/home/cvsroot/cvsrepo/CVSROOT/中新建passwdgen.pl的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";
增加可执行权限:
[cvsroot@localhost cvsrepo]$ cd /home/cvsroot/cvsrepo/CVSROOT/
[cvsroot@localhost CVSROOT]$ chmod ug+x /home/cvsroot/cvsrepo/CVSROOT/passwdgen.pl
现在我们就可以运行该文件来生成密码,如密码为“123456”时:
[cvsroot@localhost CVSROOT]$ ./passwdgen.pl "123456"
ZNtzRBiDmBAQM
运行输出的ZNtzRBiDmBAQM即为“123456”对应的加密结果,到时将其填入passwd中加密密码字段。注意,对于同一个密码,不同时间所生成的加密密码是不一样的,这个不要紧,都一样可以用的。。
ii. 创建passwd文件
在/home/cvsroot/cvsrepo/CVSROOT/中新建passwd文件,其内容如下:xiaochang:xxxxxx:cj_dev
xiaojiang:xxxxxx:cj_dev
xiaohuang:xxxxxx:hh_dev
xiaohe:xxxxxx:hh_dev
如上所示,我们设置了四个用户,长江组的开发人员小长、小江,黄河组的小黄、小何。并将xiaochang、xiaojiang映射到属于CJ_GRP用户组的cj_dev用户,xiaohuang、xiaohe映射到属于HH_GRP用户组的hh_dev用户。这样,xiaochang、xiaojiang登录pserver之后就拥有cj_dev的权限了,而xiaohuang、xiaohe则拥有hh_dev的权限。其中的xxxxxx表示加密密码,假如原始密码是“123456”,那么根据我们刚刚运行passwdgen.pl的结果,则实际内容应该如下
xiaochang:ZNtzRBiDmBAQM:cj_dev
xiaojiang:ZNtzRBiDmBAQM:cj_dev
xiaohuang:ZNtzRBiDmBAQM:hh_dev
xiaohe:ZNtzRBiDmBAQM:hh_dev
3. 客户端的配置
     远程客户端如果想通过网络来访问CVS Repository,常用的有两种方法:一、通过RSH或SSH远程访问;二、在CVS Repository所在的机子上运行pserver服务器。
a. 方法一是通过RSH或SSH(出于安全考虑,推荐使用SSH),这种方法其实是用系统用户和密码登录远程服务器。
        假设一个长江项目的开发人员要通过ssh导出服务器192.168.10.18(也可以是域名)服务器上的资源库中长江模块/home/cvsroot/cvsrepo/cj_proj,那么他必须使用我们之前设置的cj_dev这个用户来登录。在Windows中使用TortoiseCVS时的操作如下:
i. 在本地要导出项目代码的目录中,右键选择CVS->Preferences->Policy,在弹出的窗口中设置如下:

注意:第一项Prune empty folders表示删除空文件夹,默认是勾选的,我们这里要将其取消勾选,这样不够我们的模块中是否有文件,都可以checkout。
接下来进入本地准备存放项目代码的文件夹中,右键CVS Checkout,设置如下:

注意这里使用的是SSH方式,登录的用户名是对应的系统用户名,不是cvs用户名。设置好之后点击OK就可以checkout出cj_proj模块的代码了。

ii. 方法二:pserver
在客户端的操作与方法一接近,只是Protocol要选:pserver:,User name是cvs用户而不是系统用户。比如我们前面设置的长江组的xiaochang和xiaojiang,黄河组的xiaohuang和xiaohe,这次我们checkout黄河组的项目代码hh_proj,设置如下:



展开阅读全文

没有更多推荐了,返回首页