Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3016436
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: LINUX

2008-07-25 14:18:04

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

一、CVS 服务器端
1、设置启动CVS服务
在/etc/xinetd.d目录下编辑cvs文件,如下内容:
service cvspserver
{
        disable                 = no
        port                    = 2401
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = root
        passenv                 = PATH
        server                  = /usr/bin/cvs
        env                     = HOME=/var/home/cvs
        server_args             = -f --allow-root=/project pserver
#       bind                    = 127.0.0.1
}

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

然后重新动xinetd:

[root@RH opt]# service xinetd restart
[root@RH opt]# netstat -l |grep cvspserver
注:xinetd rhel5默认没有安装,光盘里有


2、下载安装CVSACL:
通过如下网址可以下载到CVSACL相关程序,目前最新版本是cvsacl-1.2.5:

cvsacl-1.2.5-for-cvs-1.11.22.tar.gz    //??干什么用的??
cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz //用于给系统中的CVS打补丁。

安装:cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz

[root@RH opt]# tar -zxvf cvs-1.11.22-cvsacl-1.2.5-patched.tar.gz
[root@RH opt]# cd cvs-1.11.22-cvsacl-1.2.5-patched  
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# ./configure   
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# make
[root@RH cvs-1.11.22-cvsacl-1.2.5-patched]# make install

如果显示以下内容表示安装成功
[root@RH opt]# cvs –version  
 
Concurrent Versions System (CVS) 1.11.22 (client/server)
with CVSACL Patch 1.2.5 (cvsacl.sourceforge.net)

注:如果系统中已安装CVS,不必删除,直接安装CVSACL即可.


3、在CVS服务器端建立仓库

//创建用于CVS的专用系统组和用户,以后要访问CVS服务的用户加入cvs这个组:
[root@RH opt]# groupadd cvs
[root@RH opt]# useradd -g cvs -s /sbin/nologin cvsroot
[root@RH opt]# passwd  cvsroot

//初始化cvs服务器环境
[root@RH opt]# mkdir /project
[root@RH opt]# cvs -d /project init 
注:添加多个仓库后,记得修改/etc/xinetd.d/cvs文件

//其实就是cvs初始化cvs环境的命令,会在 /project目录下生成CVSROOT文件夹,但是安装了CVSACL后,使用此命令CVSROOT文件夹中生成的文件会和不安装CVSACL的文件有所区别,会增加几个文件,稍后会详细介绍这几个文件的作用.
Aclconfig
Access
aclconfig,v

//设置CVS配置库归属及权限:
[root@RH opt]# chown -R cvsroot.cvs /project
[root@RH opt]# chmod -R 770 /project


4、创建CVS用户
取消使用系统的组用户,使用CVS的组用户,具体操作
[root@localhost /]# vi /project/CVSROOT/aclconfig
UseSystemGroups=no
UseCVSGroup=yes
改为“SUseSystemGroups =no”,/etc/passwd里的用户将不再生效,需要给开发者在CVSROOT/passwd里逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用

户帐号来使用,具体命令如:

[root@RH doc]# useradd -g cvs -M xiajc
[root@RH doc]# passwd bogus
将系统的shadow文件复制到CVSROOT, 并重命名为passwd:
[root@RH ~]# cp /etc/shadow /project/CVSROOT/passwd
[root@RH ~]# chmod 0644 /project/CVSROOT/passwd
修改passwd文件,将除刚才设定的可使用CVS的用户xiajc之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串cvsroot, 改为如下格式:
bogus:ND5$J8N9BW5DKV.nPdxfdsh:cvsroot
删除掉刚刚在系统中添加的那个用户xiajc:
[root@RH ~]# userdel -f xiajc


可以使用下面的脚本添加用户:

#!/bin/sh

cvspath=/project

chown -R cvsroot.cvs $cvspath

#mv cvsroot to CVSROOT/passwd
if [ "`grep "^cvsroot" $cvspath/CVSROOT/passwd`" = "" ]; then
        grep "^cvsroot\>" /etc/shadow |awk -F ":" '{print $1 ":" $2 ":cvsroot"}' >>$cvspath/CVSROOT/passwd
fi

#add new user

echo -ne "Input the user name which you want to added: "
read user

if [ "`grep $user /etc/shadow`" != "" ] || [ "`grep $user $cvspath/CVSROOT/passwd`" != "" ]; then
        echo "user exiest or it is a system user, you can not add it"
        exit 1
else
        /usr/sbin/useradd -g cvs -M $user
        passwd $user
        grep "$user\>" /etc/shadow |awk -F ":" '{print $1 ":" $2 ":cvsroot"}' >>$cvspath/CVSROOT/passwd
        chmod 0644 $cvspath/CVSROOT/passwd
        userdel -f $user
       echo "user add successful"
fi

5、创建CVS组

在CVSROOT文件夹中创建group文件,并将cvs的用户添加到此组中
[root@RH CVSROOT]# touch /project/CVSROOT/group
[root@RH CVSROOT]# vi /project/CVSROOT/group
Group文件格式如下
        group1:x:1: login_name1, login_name2, login_name3
        login_name之间以”,”隔开
    注:cvsacl有个bug,必须在组用户最前边添加一个不存在的cvs用户,group文件才会生效。即login_name1为一个不存在的cvs用户(没有在passwd文件中无此用户)
[root@RH opt]# chown -R cvsroot.cvs /project
[root@RH opt]# chmod -R 770 /project

6、 使用cvsacl细化权限:(可以针对用户,也可以针对组设置权限)


    使用cvs -d racl 命令设置权限,命令执行成功后,会在屏幕中显示执行结果,并且会在access文件(就是我在”初始化cvs服务器环境”中提到的使用acl在CVSROOT中多出

来的3个文件之一)中记录用户对于指定目录的权限信息.

命令说明

1. 命令格式:cvs –d 配置库位置 racl [用户||组:权限] [-Rl] [-r tag] [模块…] [文件…]

2. 权限参数
权限        参数    说明
没有权限    n    用户不能做任何cvs操作
读权限        r    可以执行annotate, checkout, diff, export, log, rannotate, rdiff, rlog, status命令
写权限        w    可以执行commit/checkin命令
tag        t    可以执行tag/rtag命令,依赖读权限
创建        c    可以执行add import 命令
删除        d    可以执行rm命令
全部权限    a    可以执行所有cvs命令处理cvsacl管理命令
管理权限    p    可以执行所有命令

3. 命令参数
- R 进行目录递归
- r rev 设定版本/标签
- l列出已定义的ACLs权限
    
4. 如果没有通过cvs -d racl指定用户或组对某个文件的权限,那么这个用户或组会对此目录具有最大权限( 只受文件本身属性限制)
    因此在实际对CVS中的项目进行权限设置时,必须指定用户对每一个文件的权限.

5. 最后举个例子,以下命令会使test无权访问通讯程序/mm7_batch下的所有文件
    [root@localhost CVSROOT]# cvs -d /home/cvsroot/pro3 racl test:n -R 通讯程序/mm7_batch
    查看access文件会发权限设置信息,由于在命令中使用了-R(递归),你会发现,access对通讯程序/mm7_batch的每个目录都进行了权限设定.
    [root@localhost CVSROOT]# vi access
    # CVS ACL definitions file. DO NOT EDIT MANUALLY
    具体的文件列表就不给大家看了,这可是公司机密:)

cvs -d /project racl qq:w -R cvstest  修改
cvs -d /project racl qq:wc -R cvstest 修改+创建
cvs -d /project racl qq:rw -R cvstest 报错

6、测试
新建个用户 qq
对项目cvstest赋权限,允许qq读,不允许写。
[root@RH project]# cvs -d /project racl qq:r -R cvstest
X cvstest
[root@RH CVSROOT]# cat /project/CVSROOT/access
# CVS ACL definitions file. DO NOT EDIT MANUALLY
d:cvstest:HEAD:qq!r:
使用wincvs登陆,修改这个cvstest下的文件,修改后为红色,提交时提示被拒绝,权限设置成功。

关于:建立多个仓库?
[root@RH ~]# mkdir ads
[root@RH ~]# mkdir camp
[root@RH ~]# cvs –d /project/ads init
[root@RH ~]# cvs –d /project/camp init
[root@RH ~]# chmod –R 770  /project

[root@RH ~]# vi /etc/xinetd.d/cvs
service cvspserver
{
        disable                 = no
        port                    = 2401
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = root
        passenv                 = PATH
        server                  = /usr/bin/cvs
        env                     = HOME=/var/cvs
        server_args             = -f --allow-root=/project/ads --allow-root=/project/camp pserver
#       bind                    = 127.0.0.1
}

server_args= -f --allow-root=/home2/cvsroot/project1 --allow-root=/home2/cvsroot/project2
注:由于xinetd的server_args长度限制,当你想运行很多的单个仓库的时候,可以这么做:
[root@RH ~]# vi /etc/xinetd.d/cvs
service cvspserver
{
        disable                 = no
        port                    = 2401
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = root
        passenv                 = PATH
        server                  = /project/cvs.run
#       bind                    = 127.0.0.1
}
编写cvs.run脚本

#> vi /project/cvs.run

#!/bin/bash
/usr/bin/cvs -f
--allow-root=/project/ads
--allow-root=/project/camp
pserver



二、客户端的使用
wincvs

需要Python,TCL,也可从上面的网站下载,注意Python版本
装python时建议把html doc去掉
注:关于wincvs的一些设置的保存位置:注册表-Hkey_CURRENT_USER-software-wincvs,删除wincvs后需要清除wincvs的配置时删除即可。

建立文件夹D:\work

1、配置
管理-设置-普通-〉
验证方式选择:pserver
路径project
主机:192.168.7.251
用户:cvsroot(这是我开的帐户)
CVSROOT:项如下所示:
cvsroot@192.168.7.251:/project
CVS-HOME-〉填写:d:\work

2、更改本地工作目录
项目|模块 :默认是C:\
改变默认工作路径到D:\目录:点击第二栏菜单路径旁边的重
置,将工作路径更改到D:\work

3、登陆
管理-登陆-在提示框中输入口令,如果在Output窗口出现以下提示:

*****CVS exited normally with code 0*****
0就表示现在可以在Windows下使用cvs服务了。


4、添加项目到cvs中。

(1)建立一个新的CVS项目,比如叫 cvstest:
切换左下方的窗口到资源管理器栏目,选中包含你的源文件的目录,然后在菜单“远程”->”导入项目|模块”,把它导入CVS在文件过滤之后点击继续,在导入设置项中填
入如下几项,如:

目录文件名:cvstest (用于导出项目时填写)
开发商标记:avendor
版本标记:arelease
CVS客户端提示信息如下:

Filtering 'F:\cvstest'...
Filtering 'F:\cvstest'...
No conflicts created by this import

*****CVS exited normally with code 0*****

这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目文件cvstest删除。试验一下如何从仓库获取文件。

(2)导出项目
菜单“远程”->”导出项目|模块”
服务器上的模块名和路径:cvstest

在“项目|模块”栏目里就会出现 cvstest这个项目了。现在可以在对项目源文件进行修改了。

5、修改与提交
当你修改了工作目录中的文件后,在wincvs里,你就可以看到这个文件变成红色了。有一个好习惯是,在你准备提交到服务器之前,先更新一下,因为有可能别的开发者在
你修改这个文件的同时,也可能也修改了这个文件,这就有可能会存在冲突,我们总是在提交前先处理冲突。





关于错误
cvs [login aborted]: unrecognized auth response from 192.168.7.223: cvs pserver: cannot open /project/ads/CVSROOT/config: Permission denied
查看是否启用了selinux



阅读(2013) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~