运行CVS服务器

运行CVS服务器

这一部分将介绍如何架设和管理CVS服务器,并确保它的安全性。

CVS服务器依赖于:
cvs-1.11.5openssh-3.6.1p1

架设CVS服务器

我们将讨论如何利用OpenSSH作为远程访问手段来假设CVS服务器。 其他的访问手段,包括:pserver:和:server:不能用来对CVS仓库进行写访问。 :pserver:通过网络发送密码明文,而CVS的所有端口都不支持:server:。 在这节末尾介绍了如何用:pserver:对CVS进行匿名只读访问。

配置我们的CVS服务器包括以下四个步骤:

1. 创建仓库。

以root身份登录,用下面的命令创建一个新的CVS仓库:

mkdir /cvsroot &&
chmod 1777 /cvsroot &&
export CVSROOT=/cvsroot &&
cvs init

2. 将原代码导入仓库。

用CVS仓库本机上的用户账号执行下面的命令,将源码模块导入仓库:

export CVSROOT=/cvsroot &&
cd sourcedir &&
cvs import -m "repository test" cvstest vendortag releasetag

3. 检查仓库的本地访问权限。

用下面的命令测试对CVS仓库的访问,这里使用与第二步中相同的用户账号:


cvs co cvstest

4. 检查仓库的远程访问权限。

用下面的命令测试远程机器对CVS仓库的访问,这里使用能通过ssh访问CVS服务器的用户账号:

注: 用放置CVS仓库的机器的IP地址或主机名替换命令中的"servername"。 在CVS执行checkout之前会提示你输入用户shell账号的密码。

export CVS_RSH=/usr/bin/ssh &&
cvs -d:ext:servername:/cvsroot co cvstest

配置CVS以使用匿名只读访问。

用root登录并执行下面的命令可以设置CVS允许通过:pserver:进行匿名只读访问:

(grep anonymous /etc/passwd || useradd anonymous -s /bin/false) &&
echo anonymous: > /cvsroot/CVSROOT/passwd &&
echo anonymous > /cvsroot/CVSROOT/readers

如果你使用了inetd,下面的命令将在/etc/inetd.conf中添加pserver条目:

echo "2401  stream  tcp  nowait  root  /usr/bin/cvs cvs -f \
        --allow-root=/cvsroot pserver" >> /etc/inetd.conf

执行killall -HUP inetd命令,重新读入修改后的inetd.conf文件。

如果你使用了xinetd,下面的命令将在/etc/xinetd.conf中添加pserver条目:

cat >> /etc/xinetd.conf << "EOF"
     service cvspserver
     {
          port        = 2401
          socket_type = stream
          protocol    = tcp
          wait        = no
          user        = root
          passenv     = PATH
          server      = /usr/bin/cvs
         server_args = -f --allow-root=/cvsroot pserver
     }
EOF

执行killall -HUP xinetd命令,重新读入修改后的xinetd.conf文件。

要测试对新的仓库的匿名访问,需要一个能从另一台机器通过网络访问 CVS服务器的账号。我们不需要CVS仓库的账号。用非特权用户登录到另外一台机器并执行下面 的命令以完成对CVS仓库匿名访问的测试:

cvs -d:pserver:anonymous@servername:/cvsroot co cvstest

注: 用CVS服务器的IP地址或主机名替换命令中的"servername"。

命令解释

mkdir /cvsroot : 建立CVS仓库目录。

chmod 1777 /cvsroot : 为CVSROOT修改访问权限标志位。

export CVSROOT=/cvsroot : 为所有的cvs命令指定新的CVSROOT变量。

cvs init : 初始化新的CVS仓库。

cvs import -m "repository test" cvstest vendortag releasetag : 所有的源码模块在使用前必须用cvs import命令导入CVS仓库中。 标志-m为新的模块指定初始的描述。参数"cvstest"是此模块的名字,其他的cvs命令将用此名字来操作 该模块。参数"vendortag"和"releasetag"用于区分每一个CVS模块的不同版本。这两个是强制性使用的。

(grep anonymous /etc/passwd || useradd anonymous -s /bin/false) : 检查anonymous用户是否已存在,如果没有则创建该用户。

echo anonymous: > /cvsroot/CVSROOT/passwd : 将anonymous用户加入CVS的passwd文件。在配置过程中这个文件只有这里用到。

echo anonymous > /cvsroot/CVSROOT/readers : 将anonymous用户加入CVS的readers文件。 这个文件包含了对仓库拥有只读访问权限的用户列表。