什么是CVS服务器?

什么是CVS服务器?,第1张

CVS(Concurrent Version System)版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。实际上CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其并行操作。CVS基于客户端/服务器的行为使其可容纳多个用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。

所有重要的免费软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括GNOME、KDE、THE GIMP和Wine等。

CVS的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。由源代码库管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,最后用CVS命令进行提交,由CVS源代码库统一管理修改。这样,就好象只有一个人在修改文件一样,既避免了冲突,又可以做到跟踪文件变化等。(

CVS使用速成配置

一 CVS服务器的安装:

1。查看你的操作系统上是否安装了CVS:

#>rpm -qa|grep cvs

如果没有安装你可以在Redhat 第2张光盘上找到,另外你也可以在网上下载到最新的rpm包。很容易找,其实不存在什么linux版本。

2。建立cvs用户组:

#>groupadd cvs

3。建立cvs组的cvsroot用户和所属的目录:

#>useradd -g cvs -G cvs –d /cvsroot cvsroot

4。为cvsroot用户添加密码:

#>passwd cvsroot

5。改变 /cvsroot/ 的目录属性:

#>chmod –R 770 /cvsroot

6。改变用户登陆身份:

#>su cvsroot

7。开始创建单个项目:

#>cd /cvsroot

#>mkdir project1

#>mkdir project2

8。开始建立仓库:

#>cvs –d /cvsroot/project1 init

#>cvs –d /cvsroot/project2 init

#>chmod –R 770 ./project1/ ./project2/

9。建立CVS服务启动文件,我们使用xinetd方式:

#>[Crtl]+[d] 切换到root用户身份

#>cd /etc/xinetd.d

#>vi cvspserver

service cvspserver

{

disable = no

flags = REUSE

socket_type = stream

wait = no

user = root

server= /usr/bin/cvs

server_args= -f --allow-root=/home2/cvsroot/project1 --allow-root=/home2/cvsroot/project2 pserver log_on_failure += USERID

}

注:由于xinetd的server_args长度限制,当你想运行很多的单个仓库的时候,可以这么做:

#>vi cvspserver

service cvspserver

{

disable = no

flags = REUSE

socket_type = stream

wait = no

user = root

server = /cvsroot/cvs.run

log_on_failure += USERID

}

编写cvs.run脚本

#>vi /cvsroot/cvs.run

#!/bin/bash

/usr/bin/cvs -f

--allow-root=/cvsroot/project1

--allow-root=/cvsroot/project2

pserver

#>chmod +x /cvsroot/cvs.run

10。加入cvs服务:

#>vi /etc/services

cvspserver 2401/tcp #pserver cvs service

cvspserver 2401/udp #pserver cvs service

11。启动cvs服务:

#>/etc/init.d/xinetd restart

12。检查cvspserver服务是否已经启动:

#>netstat -l |grep cvspserver

应该有如下结果:

tcp 0 0 *:cvspserver *:* LISTEN

二。CVS服务的用户管理:

上面我们已经建立了project1和project2两个CVS仓库,下面我们分别给两个仓库建立cvs用户。

13。创建可以登陆cvs服务器的用户名和密码:

#>su cvsroot

#>vi /cvsroot/project1/CVSROOT/passwd

trotter:*****:cvsroot

mimi:*****:cvsroot

#>vi /cvsroot/project2/CVSROOT/passwd

trotter:*****:cvsroot

gary:*****:cvsroot

这两个文件的意思是有trotter,mimi,gary三个cvs用户,mimi拥有project1的使用权限,gary拥有project2的使用权限,trotter拥有project1和project2的使用权限。登陆后的权限是cvsroot权限。

注意:这里的cvs用户和系统用户是不同的。

14。*****为密码,由以下文件生成:

#>vi /cvsroot/passwd.pl

#!/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}

"

#>chmod a+x /cvsroot/passwd.pl

15。如果你想生成一个密码是“123456”,则:

#>/cvsroot/passwd.pl “123456”

回车即可得到加密密码,用其替换passwd文件中的*****

16。Ok,cvs现在已经全部安装完成了,如果你想让一个用户拥有project1的权限,你就在 /cvsroot/project1/CVSROOT/passwd中给他加入一个用户;如果你想让一个用户同时具有project1和project2 的权限,你就给/cvsroot/project1/CVSROOT/passwd和/cvsroot/project2/CVSROOT/passwd 里给他加一个用户名和密码相同的用户即可。最后,我们试用一下:

#>cvs -d :pserver:trotter@192.168.1.200:/cvsroot/project1 login

敲入命令回车后提示输入trotter的密码,你按照自己设置的密码输入,如果没有什么错误信息出现就是成功了(我的机器IP地址是192.168.1.200)

***CVS服务器建立和权限配置

建立一个源代码库主要有以下几步:

(1)初始化cvs服务器环境。

#cvs -d/usr/local/source init

之后进入/usr/local/source,可以看到有一个目录CVSROOT, 下面是初始化后的CVS服务器配置文件。暂且保持不动。

(2)把cvs服务放到xinetd系统服务中。

首先在/etc/xinetd.d目录下生成任务配置文件cvspserver,文件名称可以随便用。

其中内容大致如下:

service cvspserver

{

flags = REUSE

socket_type = stream

wait= no

user= root

protocol= tcp

server = /usr/bin/cvs

server_args = -f --allow-root=/usr/local/source pserver

disable = no

}

其中server_args一个参数指定了源代码库路径,一个指定了服务器使用密码认证方式。

第二,要确认/etc/services文件中,有cvspserver关键词,并分配了端口,如:cvspserver 2401/tcp。

第三,重新启动xinetd服务,cvs服务就可以用了。

(3)测试。假定cvs服务器在192.168.0.205上,系统上有一个用户cvs。登陆另一台linxu机器,执行下列命令可以完成测试:

$export CVSROOT=:pserver:cvs@192.168.0.205:2401/usr/local/source

$cvs login

输入密码,没有出错提示表示登陆成功。

如果想在一个linux系统上建多个源代码库,分别提供cvs服务。重复上面步骤就可以了。

第一步时候要注意使用一个不同路径。

第二步放到xinetd系统服务中稍微麻烦点。/etc/xinetd.d目录下要生成一个新的任务配置文件,例如cvspserver1,文件中service名称一定要区分第一个,例如service cvspserver1,server_args做相应变动。还要在/etc/services文件中,加入新的服务端口号,例如: cvspserver1 2402/tcp。重新启动xinetd服务.

第三步测试时候,可以这样设定:

$export CVSROOT=:pserver:cvs@192.168.0.205:2402/usr/local/source1

cvs作为并行版本控制系统,多用户读写是需要的。但有时候希望有些用户只能check out,不能提交新代码。有时希望cvs上的某些用户不能check out一些代码,例如和另一个开发组共用一个CVS,希望另一个组的成员不能check out自己组代码。

cvs服务器有一套自己的用户认证机制,我使用时候没采用,而是使用了系统上用户直接作为cvs服务器用户,采用linux组、用户权限实现了这样的功能。

举例说明,在linxu系统上模拟实际两个开发组a、b,分别有用户a-user1,a-user2,b-user1,b-user2。

模块a-source,希望a组成员都可以读写,b组成员没有任何权限。可以使用以下系列命令:

#chown -R a-user1 a-source

#chgrp -R a a-source

#chmod -R 770 a-source

如果希望模块a-source,只有a-user1可以写,同组其它用户可以读,b组成员没有任何权限,把chmod命令改成-R 750就行了。

必须说明的,cvs中默认一个用户checkout代码时候,会在当前模块下生成一个锁文件,如果这个用户对当前模块没有写权限,读是不可能的。配合上面的权限设置,必须改一下cvs服务器配置。改成不在当前模块目录下生成锁文件,把锁文件集中到一个所有用户都有读写权限的目录。修改配置文件CVSROOT/config:

# Put CVS lock files in this directory rather than directly in the repository.

#LockDir=/var/lock/cvs

把LockDir设上就可以了。

CVS源自Unix系统,其Windows的移植版并没有服务器功能。在Windows下一般采用安装CVSNT这个软件来建立CVS Repository,但CVSNT的操作方法和原始的CVS略微不同。

CVS本身是命令行形式,其配置过程比较繁杂。

CVS的多帐户配置需要手动修改Repository的CVSROOT文件夹里的文件,缺乏统一的界面。

在安装了CVSNT服务器之后,默认的用户就是建立Repository的Windows系统的登陆帐户,但在多人开发的时候,肯定没人希望大家都使用同一个名字来Commit;更重要的是,我们可能需要配置开发人员的权限,例如限制某些人只能看程序,而某些人可以Commit程序,某些人可以添加新的Module。以下是详细的步骤,环境是CVSNT 2.5.03 (Build 2151) + TortoiseCVS 1.8.25:

1. 使用CVSNT建立一个Repository。假设初始使用Windows的管理员administrator密码登陆,Repository使用Pserver协议,IP是1.2.3.4,端口号是2401,Repository名称是/TestRep,密码是123。这时的administrator也是此Repository的管理员。

2. 为了进行多用户配置,必须修改Repository的CVSROOT目录的几个文件。首先在客户端将:pserver:administrator@1.2.3.4/TestRep设为CVSROOT环境变量(请注意区分CVSROOT目录和CVSROOT环境变量)。然后用administrator登陆到CVS,最后Check Out出此CVSROOT目录。命令如下所示:

cvs login

//输入密码123

cvs co CVSROOT

3. 在服务器端为Windows添加一个专门用于CVS操作的Windows帐户。所有的CVS帐户都要映射到这个Windows帐户上进行实际的操作。虽然很多资料并没有提到需要建立Windows帐户,但我在实验中发现没有这种帐户,CVS在后边执行任何操作时都会报告没有此帐户的错误。假如这个新的帐户叫做cvsuser。使用Windows命令

net user cvsuser cvsuserpassword /Add

可以添加此帐户。在添加完成之后,一定要记得将/TestRep在服务器上的实际文件夹的权限里添加cvsuser的读写权限,否则到最后任何映射到cvsuser的CVS帐户都会因为没有写权限无法进行正常的commit操作。首先在服务器上的资源管理器里的“工具”菜单里找到“文件夹选项”,在随后出现的“查看”选项卡里找到“使用简单文件夹共享”的项目,取消掉前面的勾,单击确定。然后右击/TestRep所在文件夹,单击“属性”。在随后打开的对话框里可以看到“安全”选项卡。我们需要在这里添加cvsuser的读写权限。

4.为CVS添加自己的帐户。通过使用命令cvs passwd我们可以添加任意多个CVS帐户(当然,只是针对当前的Repository)。所有的帐户信息会被保存在CVSROOT目录的passwd文件当中。然而这个文件是不能Check Out出来的,只能在服务器那里看到它,并且其保存的密码信息是被加过密的。我们可以添加cvsadmin,user1,user2,anonymous等用户。例如添加cvsadmin时的命令是:cvs passwd -a -r cvsuser cvsadmin

//输入cvsadmin的密码

//再次输入cvsadmin的密码

这样就新添了cvsadmin帐户,并将其映射到Windows帐户cvsuser上(-a表示添加一个账户,-r表示影射到操作系统的帐户中。我期望将cvsadmin作为以后/TestRep的管理员。这一点十分重要,如果这时候不设置的话,再将CVS改为“仅使用CVS帐户校验模式”之后就再也没有机会添加管理员了(因为只有管理员可以看得到和操作CVSROOT目录)。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/412395.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存