您的位置:首页 > 运维架构 > Linux

linux下cvs1.11.22服务器的安装与配置

2007-01-18 16:39 519 查看
centOS4.3 上设置CVS-1.11.22服务器

cvs服务器的安装:
1,源码下载:
http://ftp.gnu.org/non-gnu/cvs/source/stable/1.11.22/
2. 编译安装

[lyb@eadd-lyb Desktop]$ tar -zxf cvs-1.11.22.tar.gz
[lyb@eadd-lyb Desktop]$ cd cvs-1.11.22
[lyb@eadd-lyb cvs-1.11.22]$ ls
acinclude.m4 contrib DEVEL-CVS man src
aclocal.m4 COPYING diff mdate-sh TESTS
AUTHORS COPYING.LIB doc MINOR-BUGS TODO
BUGS cvs-format.el emx missing tools
build.com cvsnt.dep FAQ mkinstalldirs vms
ChangeLog cvsnt.dsp HACKING mktemp.sh windows-NT
ChangeLog.zoo cvsnt.dsw INSTALL NEWS ylwrap
compile cvsnt.mak install-sh os2 zlib
config.h.in cvs.spec lib PROJECTS
configure cvs.spec.in Makefile.am README
configure.in depcomp Makefile.in README.VMS
[lyb@eadd-lyb cvs-1.11.22]$ ./configure --prefix=/usr/local/lyb/cvs
[lyb@eadd-lyb cvs-1.11.22]$ make
[lyb@eadd-lyb cvs-1.11.22]$ su
Password:
[root@eadd-lyb cvs-1.11.22]# make install
[root@eadd-lyb cvs-1.11.22]# cd /usr/local/lyb/cvs/
[root@eadd-lyb bin]# ./cvs -v

Concurrent Versions System (CVS) 1.11.22 (client/server)

Copyright (C) 2006 Free Software Foundation, Inc.

Senior active maintainers include Larry Jones, Derek R. Price,
and Mark D. Baushke. Please see the AUTHORS and README files from the CVS
distribution kit for a complete list of contributors and copyrights.

CVS may be copied only under the terms of the GNU General Public License,
a copy of which can be found with the CVS distribution kit.

Specify the --help option for further information about CVS

OK至此CVS安装成功。
3,简化命令输入
使使用方便,进行CVS的连接
代码如下:
#ln -d /usr/local/lyb/cvs/bin/cvs /usr/bin/cvs
这样以后,只要输入cvs就相当于输入/usr/local/lyb/cvs/bin/cvs

  3. 设置启动CVS服务

  在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了。这里我们使用xinetd来启动CVS服务。

  在/etc/xinetd.d目录下为CVS服务创建一个配置文件,比如:/etc/xinetd.d/cvspserver,编辑/etc/xinetd.d/cvspserver,输入如下内容:

service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/local/lyb/cvs/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_success += USERID
log_on_failure += USERID
}

  注:

  1)pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh来加密口令和数据流,不过这里为了用户使用的方便,仍然选的是pserver
  2)--allow-root是指定Repository的目录,可以建立多个Repository
  

然后重新启动xinetd:

[root@eadd-lyb bin]# /sbin/service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
[root@eadd-lyb bin]#

  重新启动xinetd服务后,CVS服务也开始工作了:

cvs服务器的配置
1.首先创建用于CVS的组和用户:

代码:
[root@eadd-lyb bin]# /usr/sbin/groupadd cvs
[root@eadd-lyb bin]# /usr/sbin/useradd cvsroot -g cvs
[root@eadd-lyb bin]# passwd cvsroot
Changing password for user cvsroot.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@eadd-lyb bin]#
OK,用户已经建立好了,cvsroot就是我们做CVS操作使用的。

2.修改配置文件

代码:
[root@eadd-lyb bin]# more /etc/services | grep cvspserver
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
[root@eadd-lyb bin]#
看看是否有

代码:
cvspserver 2401/tcp #CVS client/server operations
cvspserver 2401/udp #CVS client/server operations
这2行。系统自带了CVS时,这2行也已经有了,只需要确认一下。如果没有,请自己加上去。
然后必须创建启动脚本:

代码:
[root@eadd-lyb cvs-1.11.22]# vi /etc/xinetd.d/cvspserver
内容如下

代码:
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/local/lyb/cvs/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_success += USERID
log_on_failure += USERID
}

其中server指定CVS可执行文件路径,默认安装就是/usr/bin/cvs。server_args指定源代码库路径及认证方式等,例子中把源代码存放在cvsroot的主目录中,也可以另外指定路径,但必须注意权限设置,pserver是密码认证方式,这种方式的安全性要差一些,但操作起来比较简单。请注意每行等号左右都有一个空格,否则无法启动服务。

3.初始化CVS
切换到cvsroot用户,然后进行初始化:

代码:
[cvsroot@eadd-lyb bin]$ /usr/local/lyb/cvs/bin/cvs -d /home/cvsroot init

这个路径应该与cvspserver文件中指定的路径相同,初始化后会在此路径下面创建CVSROOT目录,存放用于CVS管理的一些文件。此时重新启动xinetd服务,CVS服务器应该能够启动了。

代码:
#service xinetd restart
当然,重新启动计算机也可以。确认是否启动:

代码:
#netstat -l | grep cvspserver
如果能看到

代码:
tcp 0 0 *:cvspserver *:* LISTEN
说明已经正常启动,没有的话请重新检查配置过程是否有错误或者遗漏。最后还必须检查防火墙的设置,把2401端口打开。

4.用户管理
CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。CVS用户名和密码保存在CVSROOT目录下的passwd文件中,格式为:

代码:
用户名:密码:系统用户
也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。
passwd文件默认并不存在,我们必须自己创建。文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以我们借用Apache的命令来完成这项工作:

代码:
#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参数会覆盖这个环境变量的设置。

5.源代码仓库的备份和移动
基本上,CVS的源代码仓库没有什么特别之处,完全可以用文件备份的方式进行备份。需要注意的只是,应该确认备份的过程中没有用户提交修改,具体的做法可以是停止CVS服务器或者使用锁等等。恢复时只需要把这些文件按原来的目录结构存放好,因为CVS的每一个模块都是单独的一个目录,与其他模块和目录没有任何瓜葛,相当方便。甚至只需要在仓库中删除一个目录或者文件,便可以删除该模块的一些内容,不过并不建议这么做,使用CVS的删除功能将会有一个历史记录,而对仓库的直接删除不留任何痕迹,这对项目管理是不利的。移动仓库与备份相似,只需要把该模块的目录移动到新的路径,便可以使用了。
如果不幸在备份之后有过一些修改并且执行了提交,当服务器出现问题需要恢复源代码仓库时,开发者提交新的修改就会出现版本不一致的错误。此时只需要把CVS相关的目录和文件删除,即可把新的修改提交。

6.更进一步的管理
CVSROOT目录下还有很多其他功能,其中最重要的就是modules文件。这个文件定义了源代码库的模块,下面是一个例子:

代码:
Linux Linux
Kernel Linux/kernel
这个文件的内容按行排列,每一行定义一个模块,首先是模块名,然后是模块路径,这是相对于CVS根目录的路径。它定义了两个模块,第一个是Linux模块,它位于Linux目录中,第二个是Kernel模块,这是Linux模块的子模块。
modules文件并非必须的,它的作用相当于一个索引,部分CVS客户端软件通过它可以快速找到相应的模块,比如WinCVS。

7.协同开发的问题
默认方式下,CVS允许多个用户编辑同一个文件,这对一个协作良好的团队来说不会有什么问题,因为多个开发者同时修改同一个文件的同一部分是不正常的,这在项目管理中就应该避免,出现这种情况说明项目组内部没有统一意见。而多个开发者修改文件的不同部分,CVS可以很好的管理。
如果觉得这种方式难以控制,CVS也提供了解决办法,可以使用cvs admin -l进行锁定,这样一个开发者正在做修改时CVS就不会允许其他用户checkout。这里顺便说明一下文件格式的问题,对于文本格式,CVS可以进行历史记录比较、版本合并等工作,而二进制文件不支持这个操作,比如word文档、图片等就应该以二进制方式提交。对于二进制方式,由于无法进行合并,在无法保证只有一个用户修改文件的情况下,建议使用加锁方式进行修改。必须注意的是,修改完毕记得解锁。
从1.6版本开始,CVS引入了监视的概念,这个功能可以让用户随时了解当前谁在修改文件,并且CVS可以自动发送邮件给每一个监视的用户告知最新的更新。

8.建立多个源代码仓库
如果需要管理多个开发组,而这些开发组之间不能互相访问,可以有2个办法:
a.共用一个端口,需要修改cvspserver文件,给server_args指定多个源代码路径,即多个—allow-root参数。由于xinetd的server_args长度有限制,可以在cvspserver文件中把服务器的设置重定向到另外一个文件,如:

代码:
server = /home/cvsroot/cvs.run
然后创建/home/cvsroot/cvs.run文件,该文件必须可执行,内容格式为:

代码:
#!/bin/bash
/usr/bin/cvs -f /
--allow-root=/home/cvsroot/src1 /
--allow-root=/home/cvsroot/src2 /
pserver
注意此时源代码仓库不再是/home/cvsroot,进行初始化的时候要分别对这两个仓库路径进行初始化,而不再对/home/cvsroot路径进行初始化。
b.采用不同的端口提供服务
重复第2步和第3步,为不同的源代码仓库创建不同服务名的启动脚本,并为这些服务名指定不同的端口,初始化时也必须分别进行初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: