技术开发 频道

CVS使用经验谈

    二、管理CVS服务器

    服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?

    不难,在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:

    passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:

    {cvs 用户名}:[加密的口令]:[等效系统用户名]

    如果你希望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你需要以 cvs 管理员用户手工创建,当然要按照上面格式,第二个字段是该用户的加密口令,就是用 crypt (3)加密的,你可以自己写一个程序来做加密,也可以用我介绍的偷懒的方法:先创建一个系统用户,名字和 cvs 用户一样,口令就是准备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后再把这个用户删除。这个方法对付数量少的用户比较方便,人一多就不合适了,而且还有冲突条件(race condition)的安全隐患,还要 root 权限,实在不怎么样。不过权益之计而已。写一个小程序并不难,可以到 linuxforum 的编程版搜索一下,有个朋友已经写了一个贴在上面了。

    第三个字段就是等效系统用户名,实际上就是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了。

    readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。

    writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。

    上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧。假设我们有下面几个用户需要使用 cvs:

    laser, gumpwu, henry, betty, anonymous。

    其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。那么好,我们先做一些准备工作,先创建一个 cvspub 用户,这个用户的责任是代表所有非系统用户的 cvs 用户读写 cvs 仓库。

    #adduser

    ...

    然后编辑 /etc/group,令 cvspub 用户在 cvs 组里,同时把其它有系统用户权限的用户加到 cvs 组里。(见上文)

    然后编辑 cvs 管理员家目录里 CVSROOT/passwd 文件,加入下面几行:

    laser:$xxefajfka;faffa33:cvspub

    gumpwu:$ajfaal;323r0ofeeanv:cvspub

    henry:$fajkdpaieje:cvspub

    betty:fjkal;ffjieinfn/:cvspub

    anonymous::cvspub

    注意:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成。

    编辑 readers 文件,加入下面几行:

    anonymous

    betty

    编辑 writers 文件,加入下面几行:

    laser

    gumpwu

    henry

    注意:writers中的用户不能在readers中,要不然不能上传更新文件。

    对于使用CVS的用户要修改它的环境变量,例如laser用户的环境变量,打开/home/laser(laser的宿主目录)下的.bash_profile文件,加入

    CVSROOT=/home/cvsroot

    export CVSROOT

    用laser登陆就可以建立CVS项目,如果要root使用,可以修改/etc/profile文件。

    现在我们各项都设置好了,那么怎么用呢,我在这里写一个最简单的(估计也是最常用的)命令介绍:

    首先,建立一个新的CVS项目,一般我们都已经有一些项目文件了,这样我们可以用下面步骤生成一个新的CVS项目:

    进入到你的已有项目的目录,比如叫 cvstest:

    $cd cvstest

    运行命令:

    $cvs import -m "this is a cvstest project" cvstest v_0_0_1 start

    说明:import 是cvs的命令之一,表示向cvs仓库输入项目文件。 -m参数后面的字串是描述文本,随便写些有意义的东西,如果不加 -m 参

    数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量EDITOR来改成你喜欢用的编辑器。)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字命名的仓库里。)

    v_0_0_1是这个分支的总标记。没啥用(或曰不常用。)

    start 是每次 import 标识文件的输入层次的标记,没啥用。

    这样我们就建立了一个CVS仓库了。

    建立CVS仓库的文件夹应该是“干净”的文件夹,即只包括源码文件和描述的文件加,而不应该包括编译过的文件代码等!

0
相关文章