首页 > 代码库 > CVS服务器配置要点

CVS服务器配置要点

<style></style>
  • 为了方便管理,可为 cvs 专门建立现存于操作系统中的一个组和其中的若干用户。后面还需要建立只属于 cvs 服务的 virtual 用户,并将他们映射到已建立的系统用户上。通过设置文件与目录的不同权限,则可以对 cvs 服务的 virtual 用户进行不同访问权限的控制。

  • 由于 cvs 服务并不是采用 standalone模式始终在后台运行并监听端口,而是由 inetdxinetd守护进程来代劳。所以需要配置 /etc/services文件,将 cvs 服务的端口号(通常为2401)与服务名称关联起来,并配置 inetd.conf或在 /etc/xinetd.d/目录下生成相应的服务描述文件,指明 inetdxinetd以什么方式和参数来启动 cvs 程序,以及使用
    --allow-root=/path/to/your/repository/
    来指明 cvs 服务需保存的所有 repository。配置完成后需要重新启动 inetdxinetd,使其读入 cvs 新的配置。
    下面是各配置文件中相关的内容:

    # /etc/servicescvspserver 2401/tcpcvspserver 2401/udp# /etc/inetd.confcvspserver stream tcp nowait root /usr/local/bin/cvs cvs    --allow-root=/usr/local/newrepository pserver# /etc/xinetd.d/cvspserverservice cvspserver {      socket_type = stream      wait = no      user = root      env = HOME=      server = /usr/bin/cvs      server_args = --allow-root=/cvsroot/program --allow-root=/cvsroot/linuxconf                  --allow-root=/cvsroot/official --allow-root=/cvsroot/pub pserver }
  • 根据 --allow-root=/path/to/your/repositary/中指定的路径,生成相应的目录作为 repository,然后使用 cvs init对每一个 repository初始化:

    cvs -d /path/to/your/repository init
  • repository初始化后,会在其目录下生成 CVSROOT子目录。然后,在 CVSROOT目录中创建 passwd文件,设置使用 cvs virtual用户名、密码,及其所映射的操作系统用户:

        foo:blah-blah:cvsroot    goo:blah-blah:cvsroot

    这里即将 cvs virtual用户 foo goo 映射为操作系统用户 cvsroot 。而 blah-blah 部分对应的是由下面的 Perl 脚本加密后生成的密码:

    #!/usr/bin/perl    # Run me like this: crypt.pl "username"    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";
  • CVSROOT目录中修改文件 cvswrapperscvsignorecvswrappers文件的目的是告诉 cvs 哪些文件是二进制文件,从而需要禁用 keyword expansionline-ending conversion 。而 cvsignore文件列出了哪些文件是需要忽略不参予 cvs 管理的,诸如 *.~ *.bak 等文件。下面分别给出这两个文件的内容:

    # cvswrappers*.gif -k ‘b‘*.jpg -k ‘b‘*.JPG -k ‘b‘*.dvi -k ‘b‘*.pdf -k ‘b‘*.doc -k ‘b‘*.eps -k ‘b‘*.caj -k ‘b‘*.ps -k ‘b‘*.exe -k ‘b‘*.com -k ‘b‘*.png -k ‘b‘*.bmp -k ‘b‘*.PNG -k ‘b‘*.BMP -k ‘b‘*.dia -k ‘b‘*.fig -k ‘b‘*.FIG -k ‘b‘*.mat -k ‘b‘*.MAT -k ‘b‘*.a -k ‘b‘#cvsignore_region_.tex*.log*.efmt_region_.prv*.out*.snm*.aux*.nav*.toc*.bbl*.blg*.mpo*.mpx*.tmptmpgraph.texrelax.*#*#*.bak*.BAK*~*.asv*.dsemantic.cache

    注意: 修改完 passwdcvswrapperscvsignore文件后,需将其权限设为 444

  • 实质上,上述方法设置user passwd已经不再适用了。正确的做法是,应该将被映设的系统用户信息条目从/etc/passwd中添加到/var/lib/cvsd/etc/passwd中。否则,就会出现”cvsd: no such system user”的错误。同时,应该该用户添加到cvsd组中,否则用户将没有权限访问repository。(事实证明,这么做也不行,只能将cvs虚拟用户映到cvsd上)

  • 最后,对生成的 repository及其所有子目录设置相应的用户与组权限。权限的设置可以通过设置文件与目录的操作系统级权限,也可以在 CVSROOT下建立 readerswriters文件,来控制 cvs virtual用户的访问权限。这两个文件中均是 cvs 虚拟用户名的列表,每行写一个用户名,且在文件末尾留一空白行。写在 readers文件中的用户只有 read-only权限,写在 writers中的用户同时拥有读写权限。若在 CVSROOT下存在 writers文件,则凡是未列入该文件的用户都只有 read-only权限。