成功进行CVS服务器的配置与测试

1年前 (2024-04-22)
一、服务器端的安装与配置

(一)CVS的安装
通常情况下,安装操作系统的时候就安装了CVS.这里首先使用root用户(其他用户下通过sudo)可以通过令:
debian:~#whereiscvs
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-getinstallcvs

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

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

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

(二)CVS服务器端的配置

1.创建cvs组和用户
1)创建cvs组
debian:~#groupaddcvs
2)创建的新用户HOME目录
debian:~#mkdir/home/cvsroot
3)添加新用户cvsroot,并将其添加cvs组,并指定其HOME目录
debian:~#useradd-gcvs-Gcvs-d/home/cvsrootcvsroot
4)设置cvsroot用户的密码,我这里为:cvsroot
debian:~#passwdcvsroot
EnternewUNIXpassword:
RetypenewUNIXpassword:
passwd:已成功更新密码
5)更改/home/cvsroot/目录及其子目录的属主和属组,因为是在root用户下间的该目录,他的属主和属组都是root,这里我们要将其属主改为cvsroot,属组改为cvs,保证cvs组的用户对该目录有相应的权限。
debian:~#chown-Rcvsroot.cvs/home/cvsroot/
6)更改/home/cvsroot目录属性,保证cvsroot同组(cvs组)的其他用户也有读写和执行权,我们以后要为cvs组添加用户
debian:~#chmod-R775/home/cvsroot/
2.切换cvsroot用户,并创建一个仓库

1)切换用户
debian~#sucvsroot
2)设置全局变量CVSROOT,指定仓库所在的目录
debian:/root$exportCVSROOT=/home/cvsroot/
3)创建仓库
debian:/root$cvsinit
3.提交源入源代码
1)进入代码所在目录,也就是你想做成CVS控制的源代码目录,我这里是/home/uprj/,目录下文件有:
debian:/root$cd/home/usrprj/
debian:/home/uprj$ls
MakefileModule.symverstest.cu-skeleton.c
装载cvsimport-m"[repositorytest]"[cvstest][vendortag][releasetag]
-m后面引号内填入log内容,接下来是源代码模块名称,接着是装载者,是标识符号,我这里是:
debian:/home/uprj$cvsimport-m"Myproject"uprjcvsrootstart
Nuprj/Makefile
Nuprj/test.c
Nuprj/Module.symvers
Nuprj/u-skeleton.c
Noconflictscreatedbythisimport


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

#p#分页标题#e#

2)如果我们在root用户(或者其他用户,但必须保证该用户对于存放module的目录有写的权限)下测试,checkout出这一个module,可以执行如下:

debian:/home/uprj#cvs-d/home/cvsrootcheckoutuprj
cvscheckout:Updatinguprj
Uuprj/Makefile
Uuprj/Module.symvers
Uuprj/test.c
Uuprj/u-skeleton.c
说明在本地可以checkout出来,而且他会自动在当前目录下创建以该module名为名的目录项,不管你checkout出来的是一个源码文件还是整个module。我这里checkout出来的module路径为/home/uprj/uprj/下。

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+xpasswdgen.pl

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

5.设置开机启动CVS服务
我们这里使用xinetd启动,如果系统没有安装xinetd的话,安装之。
1)检查/etc/services中,cvspserver是否开启。cvspserver是远程登录CVS服务器时对用户的验证方式。
debian:~$cat/etc/services|grepcvspserver
#sourceslikehttp://www.freebsd网站站点" rel="nofollow" /> debian:~#cd/etc/xinetd.d/
debian:/etc/xinetd.d#touchcvspserver
编辑该文件,内容如下:
servicecvspserver

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


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

#p#分页标题#e#

3)重启xinetd服务,使配置生效
重启xinetd

debian:/etc/xinetd.d#/etc/init.d/xinetdrestart
Stoppinginternetsuperserver:xinetd.
Startinginternetsuperserver:xinetd.

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

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

二.客户端测试

客户端的测试包括本地测试和远程测试。
1.本地测试上面我们已经用root用户checkout测试过了。
具体方法就是:

debian:/home#exportCVSROOT=/home/cvsroot/
debian:/home#cvslogin
如果没有提示出错的话,就代表成功了。
但如果在pserver启动以后,再用同种方法进行本地测试的话,就有问题了,提示如下:
debian:/home#cvslogin
cvslogin:canonlyuse`login'commandwiththe'pserver'method
cvs[loginaborted]:CVSROOT:/home/cvsroot/
提示的意思是说,现在这能使用通过pserver验证的方式登录服务器了。那么,在配置完pserver服务器后,本地和远程登录的方法就一样了,都要通过pserver验证。下面介绍远程登录的方法,同样适用于本地登录。

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

然后登录
david@debian:~$cvslogin

如果没有错误提示,则代表成功登录CVS服务器。
但我这里出现了一个提示:
david@debian:~$cvslogin
Logginginto::pserver:cvsuser1@192.168.1.248:2401/home/cvsroot
CVSpassword:
cvslogin:CVSpasswordfile/home/david/.cvspassdoesnotexist-creatinganewfile
该问题就是在客户端登录时要在HOME目录下有个.cvspass的文件即可。因此,解决方法就是在/home/david/下:
david@debian:~$touch.cvspass

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

2)检出模块
我们上面已经建立了一个仓库了,uprj.我们在客户端将该模块checkout:
david@debian:~$cvscheckoutuprj
cvscheckout:Updatinguprj
Uuprj/Makefile
Uuprj/Module.symvers
Uuprj/test.c
Uuprj/u-skeleton.c
则在当前目录下生成目录uprj.

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

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

上一页[1][2][3]