免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1187 | 回复: 0
打印 上一主题 下一主题

版本控制之cvs安装配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-12 17:45 |只看该作者 |倒序浏览
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中定义。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19489/showart_1860614.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP