`
yanwenhan
  • 浏览: 114798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cvs安装配置

    博客分类:
  • CVS
阅读更多

cvs的安装配置

可以查看是否安装cvs
#rpm -qa|grep cvs
如果未安装,到www.cvshome.org下载一个最新的rpm安装即可

一、创建系统帐号

假设目录 /repos/project 作为多人共享项目的版本控制根目录,需要用组权限控制;
         /repos/user    作为存放个人独占地版本控制根目录。

管理员帐号为 cvsroot
项目版本控制的公共帐号为 cvsproject
用户版本控制的公共帐号为 cvsuser
相应的用户组为 cvsroot, cvsproject, cvsuser。

# groupadd cvsroot
# groupadd cvsproject
# groupadd cvsuser

设置 cvsroot 属于多个组,这样 cvsroot 用户除了进行系统维护外(如添加新的工程),还可以和其它组用户一样具有管理代码的权限。
# useradd -g cvsroot -G cvsproject,cvsuser cvsroot

# useradd -g cvsproject -s /sbin/nologin cvsproject
# useradd -g cvsuser -s /sbin/nologin cvsuser

用来和CVS用户帐号一一对应的系统帐号。系统帐号禁止登录,密码设置在相应的 CVS 对应帐号文件中设置。
# useradd -g cvsuser -s /sbin/nologin cvs_yan
# useradd -g cvsuser -s /sbin/nologin cvs_wen


二、创建CVS根目录
# mkdir -p /repos/project
# mkdir -p /repos/user
# chown cvsroot.cvsroot /repos/project
# chown cvsroot.cvsroot /repos/user
# chmod 775 /repos
# chmod 2775 /repos/project  或 (  # chmod 775 /repos/project 然后 # chmod g+s /repos/project  )
# chmod 2775 /repos/user  或 (  # chmod 775 /repos/user 然后 # chmod g+s /repos/user  )


设置 g+s,是为了当设置一个用户属于多个时,操作不同工程时,能够保障文件的组id维持不变。否则可能影响其它用户的权限。

三、加入cvs服务(缺省安装的通常缺省就有cvs服务)
#vi /etc/services
#cvspserver 2401/tcp #pserver cvs service
#cvspserver 2401/udp #pserver cvs service

把cvs服务放到xinetd系统服务中
#cd /etc/xinetd.d
#vi cvspserver
文件内容:
service cvspserver
{
disable           = no
port              = 2401
flags             = REUSE
socket_type       = stream
protocol          = tcp
wait              = no
user              = root
server            = /usr/bin/cvs
server_args       = -f --allow-root=/repos/project --allow-root=/repos/user  pserver
#log_on_success   += USERID
#log_on_failure   += USERID
}

或者,如果cvs仓库比较多可以采用如下格式(server_args 有长度限制):
service cvspserver
{
disable           = no
port              = 2401
flags             = REUSE
socket_type       = stream
protocol          = tcp
wait              = no
user              = root
server            = /real/bin/cvs.run
#log_on_success   += USERID
#log_on_failure   += USERID
}

注意:#log_on_success   += USERID #log_on_failure   += USERID 加上这两个属性会导致win系统链接cvs服务器很慢,而在linux系统下没有问题。


vi /real/bin/cvs.run
==============================
#!/bin/bash
/usr/bin/cvs -f \
--allow-root=/repos/project \
--allow-root=/repos/user \
pserver
==============================


四、初始化CVS

初始化CVS切换到cvsroot用户,然后进行初始化
初始化cvs源代码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件

# su - cvsroot
# cvs -d /repos/project init
# cvs -d /repos/user init


在服务器端创建工程
# mkdir test
# chown -R cvsproject.cvsproject test
# chmod -R 2770 test


五、创建 CVS 用户帐号

cvs用户和服务器用户可以是不一样的
设置 CVSROOT目录中config文件的 systemauth = no ,表示必须在passwd中存在用户名称和密码的才可以使用cvs服务器。

# chmod 644 /repos/project/CVSROOT/config
# vi /repos/project/CVSROOT/config
设置 SystemAuth = no

# chmod 644 /repos/user/CVSROOT/config
# vi /repos/user/CVSROOT/config
设置 SystemAuth = no


使用配置文件 CVSROOT/passwd 来管理帐号。
用户管理 CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。
CVS用户名和密码保存在CVSROOT目录下的passwd文件中,
格式为:   用户名:密码:系统用户
也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。

passwd文件默认并不存在,我们必须自己创建。
文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以我们借用Apache的命令来完成这项工作:
htpasswd命令不是为CVS而设,它不能自动添加映射到的用户名,我们设置好密码后,自己把这部分加上。

创建一个新文件同时创建一个cvs用户
# htpasswd -c /repos/project/CVSROOT/passwd cvs_yan
添加新的cvs用户
# htpasswd /repos/project/CVSROOT/passwd cvs_wen

密码也可以使用下列脚本生成:
vi /real/bin/passwdgen.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}\n";
===================================

# /real/bin/passwdgen.pl your_password


vi /repos/project/CVSROOT/passwd
===================================
cvs_yan:1rV3EIhq1NczU:cvsroot
cvs_wen:KIutquskGh4YU:cvsproject
anonymous::cvsproject
===================================
 

$ cat /repos/project/CVSROOT/readers
anonymous

密码也可以使用Linux系统用户的密码,从 /etc/shadow 文件里拷贝出密码

六、配置读写权限

使用CVSROOT目录下的readers和writers文件进行这个工作。这2个文件默认也是没有的,自己创建就可以了。
readers文件记录拥有只读权限的用户名,每行一个用户;
writers文件记录拥有读写权限的用户名,每行一个用户。
注意,readers文件比writers优先,也就是说出现在readers中的用户将会是只读的,不管writers文件中是否存在该用户。

vi /home/cvsroot/wen/CVSROOT/readers
===================================
anonymous
===================================

vi /home/cvsroot/wen/CVSROOT/writers
===================================
cvs_yan
cvs_wen
===================================

 

七、启动cvs
重新启动xinetd服务,CVS服务器应该能够启动了
# /etc/rc.d/init.d/xinetd restart
或者
# service xinetd restart

检查cvspserver服务是否已经启动
#netstat -l |grep cvspserver
应该有如下结果,表明cvs服务器安装成功:
tcp 0 0 *:cvspserver *:* LISTEN


八、modules文件
更进一步的管理 CVSROOT目录下还有很多其他功能,其中最重要的就是modules文件。
这个文件定义了源代码库的模块,下面是一个例子:
代码:
Linux Linux
Kernel Linux/kernel
这个文件的内容按行排列,每一行定义一个模块,首先是模块名,然后是模块路径,这是相对于CVS根目录的路径。
它定义了两个模块,第一个是Linux模块,它位于Linux目录中,第二个是Kernel模块,这是Linux模块的子模块。 modules文件并非必须的,它的作用相当于一个索引,部分CVS客户端软件通过它可以快速找到相应的模块,比如WinCVS。


九、源代码仓库的备份

完全可以用文件备份的方式进行备份。
需要注意的只是,应该确认备份的过程中没有用户提交修改,具体的做法可以是停止CVS服务器或者使用锁等等。
恢复时只需要把这些文件按原来的目录结构存放好,因为CVS的每一个模块都是单独的一个目录,与其他模块和目录没有任何瓜葛。
甚至只需要在仓库中删除一个目录或者文件,便可以删除该模块的一些内容,不过并不建议这么做,使用CVS的删除功能将会有一个历史记录,而对仓库的直接删除不留任何痕迹,这对项目管理是不利的。


十、移动仓库
与备份相似,只需要把该模块的目录移动到新的路径,便可以使用了。


=================================================================
CVS CVSROOT里的文件
=================================================================
文件 CVSROOT/val-tags 用来确定是否一个TAG是可用的;
文件 CVSROOT/history 用来记录CVS的访问记录。
文件 CVSROOT/cvsignore 设置版本控制过程中,忽略的文件。更新文件时,这些文件将被隐藏,不在显示为 "?" 类型文件。例如:
*.db
*.info
*.[Sp]o
*.core
*.aps
*.clw
*.exe
*.ncb
*.obj
*.opt
*.plg
Debug
Release


文件 CVSROOT/cvswrappers 匹配文件名,并作相应处理。如: -k b 即以二进制方式处理文件。
文件 CVSROOT/modules 设置数据仓库中的模块名,可以通过命令:“cvs co -c”察看当前数据仓库(repository)中包含的模块/工程名称。也可以在调整服务器端目录结构时,设置 modules 来保持和以前设置的兼容性。
文件 CVSROOT/checkoutlist 列在 checkoutlist 中的文件,在 checkin 后,能够自动在服务器 CVSROOT 目录中重建。
文件 CVSROOT/commitinfo
Commit 事件要触发三个脚本文件,依次是 commitinfo, verifymsg, loginfo。其中先遍历整个目录树对所有需要 commit 的文件执行 commitinfo文件。再分别针对每一个目录执行 verifymsg, loginfo 脚本。
commitinfo 完成的功能:通过用户主机名、用户名来检查权限;确认CVS服务器的版本号不低于某个版本;将遍历目录树的结果(最后一个目录名)记录下来,以便接下来运行 verifymsg, loginfo的脚本能够确认运行结束等。
相关文件:CVSROOT/commitcheck,CVSROOT/cvs_acls.pl,CVSROOT/avail,CVSROOT/commit_prep.pl,CVSROOT/exclude,CVSROOT/cfg.pm,CVSROOT/cfg_local.pm


文件 CVSROOT/avail,用以精细控制权限。例如:
group|meisters|peter,jdp,markm,joe
# Pick up the list of bad users from ncvs/CVSROOT/badcommitters  See that
# file for details
group|penaltybox|!badcommitters
unavail
avail||CVSROOT
avail||distrib
avail||doc
avail||ports
avail||src
unavail||src/contrib/binutils,src/contrib/file
avail|obrien|src/contrib/binutils,src/contrib/file
unavail||src/contrib/tcpdump
avail|fenner,nectar|src/contrib/tcpdump
avail||www
avail|:meisters
unavail|:penaltybox
 
文件 CVSROOT/cfg.pm,是 perl脚本的核心包。可以根据需要加入所需的代码。

文件 CVSROOT/verifymsg
相关文件:CVSROOT/logcheck。
用于检查和格式化 commit log。禁止在版本控制提交时,使用空的 commit log。对于 wincvs 在用户不提交 commit log 时,会自动使用“no message”作为commit log。

文件 CVSROOT/loginfo
相关文件:CVSROOT/log_accum.pl,CVSROOT/cfg.pm ,CVSROOT/cfg_local.pm。
将 commit log 分门别类存储在目录 CVSROOT/commitlogs 下,并同时通过邮件外发。为了防止一次事件触发多次的邮件外发,该脚本利用到 commitinfo 的运行结果,只有确认到了目录树的最后,才发送邮件。 模块和存储日志文件以及用户邮件列表在文件CVSROOT/cfg_local.pm中定义。

 

 

 

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics