来自:http://blog.chinaunix.net/u/29089/showart_273085.html
2.1. CVS服务器设置
-
/etc/services
...
cvspserver 2401/tcp
cvspserver 2401/udp
...
-
用xinetd运行:
/etc/xinetd.d/cvs
service cvspserver
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/repos/root1 --allow-root=/repos/root2 pserver
disable = no
}
-
用inetd运行:
/etc/inetd.conf
...
cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/repos/project --allow-root=/repos/user pserver
...
-
创建系统帐号
假设目录
/repos/project
作为多人共享项目的版本控制根目录,需要用组权限控制;/repos/user
作为存放个人独占地版本控制根目录。管理员帐号为cvsroot,项目版本控制的公共帐号为 cvsproject,用户版本控制的公共帐号为 cvsuser,相应的用户组为 cvsroot, cvsproject, cvsuser。$ groupadd cvsproject
$ groupadd cvsuser
$ groupadd cvsroot
$ useradd -g cvsproject -s /sbin/nologin cvsproject
$ useradd -g cvsuser -s /sbin/nologin cvsuser
$ useradd -g cvsroot -G cvsproject,cvsuser cvsroot
$ useradd -g cvsuser -s /sbin/nologin cvs_jiangxin
$ useradd -g cvsuser -s /sbin/nologin cvs_johnson
-
创建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 2775 /repos/user
$ su - cvsroot
$ cvs -d /repos/project init
$ cvs -d /repos/user init
运行完毕 cvs init 之后,在CVS根目录下创建了配置目录
CVSROOT
,权限如下:$ ls -l /repos/project/CVSROOT/
-r--r--r-- 1 cvsroot cvsroot 493 Jan 21 10:37 checkoutlist
-r--r--r-- 1 cvsroot cvsroot 696 Jan 21 10:37 checkoutlist,v
-r--r--r-- 1 cvsroot cvsroot 760 Jan 21 10:37 commitinfo
-r--r--r-- 1 cvsroot cvsroot 963 Jan 21 10:37 commitinfo,v
-r--r--r-- 1 cvsroot cvsroot 527 Jan 21 10:37 config
-r--r--r-- 1 cvsroot cvsroot 730 Jan 21 10:37 config,v
-r--r--r-- 1 cvsroot cvsroot 753 Jan 21 10:37 cvswrappers
-r--r--r-- 1 cvsroot cvsroot 956 Jan 21 10:37 cvswrappers,v
-r--r--r-- 1 cvsroot cvsroot 1025 Jan 21 10:37 editinfo
-r--r--r-- 1 cvsroot cvsroot 1228 Jan 21 10:37 editinfo,v
drwxrwxr-x 2 cvsroot cvsroot 4096 Jan 21 10:37 Emptydir
-rw-rw-rw- 1 cvsroot cvsroot 0 Jan 21 10:37 history
-r--r--r-- 1 cvsroot cvsroot 1141 Jan 21 10:37 loginfo
-r--r--r-- 1 cvsroot cvsroot 1344 Jan 21 10:37 loginfo,v
-r--r--r-- 1 cvsroot cvsroot 1151 Jan 21 10:37 modules
-r--r--r-- 1 cvsroot cvsroot 1354 Jan 21 10:37 modules,v
-r--r--r-- 1 cvsroot cvsroot 564 Jan 21 10:37 notify
-r--r--r-- 1 cvsroot cvsroot 767 Jan 21 10:37 notify,v
-r--r--r-- 1 cvsroot cvsroot 649 Jan 21 10:37 rcsinfo
-r--r--r-- 1 cvsroot cvsroot 852 Jan 21 10:37 rcsinfo,v
-r--r--r-- 1 cvsroot cvsroot 879 Jan 21 10:37 taginfo
-r--r--r-- 1 cvsroot cvsroot 1082 Jan 21 10:37 taginfo,v
-rw-rw-rw- 1 cvsroot cvsroot 0 Jan 21 10:37 val-tags
-r--r--r-- 1 cvsroot cvsroot 1026 Jan 21 10:37 verifymsg
-r--r--r-- 1 cvsroot cvsroot 1229 Jan 21 10:37 verifymsg,v
可以看出文件 history, val-tags 的权限是任何人可读写,其它文件的权限是任何帐号只读。
文件
CVSROOT/val-tags
用来确定是否一个TAG是可用的;文件CVSROOT/history
用来记录CVS的访问记录。 -
创建 CVS 用户帐号
使用系统帐号不安全,而CVS提供了独立于系统的用户帐号管理。
使用配置文件
CVSROOT/passwd
,CVSROOT/passwd
,CVSROOT/passwd
,来管理帐号。$ cat /repos/project/CVSROOT/passwd
jiangxinroot:_passwd_here_:cvsroot
jiangxin:_passwd_here_:cvsproject
johnson:_passwd_here_:cvsproject
anonymous::cvsproject
$ cat /repos/project/CVSROOT/readers
anonymous
-
CVS 用户修改口令
我写了一个程序,作为用户登录的 shell,允许用户远程 SSH 登录,修改自己的 Unix 系统口令以及 CVS 账号口令,参见:附件。如果您有更好的方法,不吝赐教。
只能以 cvsroot 用户创建工程。因为 cvs 根目录的权限设置为 cvsroot 帐户可写。
-
在客户端创建工程
client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project login
client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project import -m "add module test, vendor jiangxin, init_tag start." test jiangxin start
$ ls -l /repos/project
drwxrwxr-x 3 cvsroot cvsroot 4096 Jan 21 10:54 CVSROOT
drwxrwsr-x 2 cvsroot cvsroot 4096 Jan 21 11:00 test
$ chown -R cvsproject:cvsproject test
$ chmod -R 770 test
$ chmod -R g+s test
client$ cvs -d :pserver:jiangxin@10.0.0.7:/repos/project co test
client$ cvs -d :pserver:johnson@10.0.0.7:/repos/project co -d test2 test
于是创建了多用户共享的工程 test。
-
另一种创建工程的方法:在服务器端创建工程
可以直接在服务器端创建目录,设置权限,即完成工程的创建。当然这样创建的工程只是一个空的工程,需要在客户端为空的工程逐个添加文件和目录。
$ cat /repos/project/CVSROOT/passwd
jiangxroot:_passwd_here_:cvsroot
anonymous:_passwd_here_:cvsuser
jiangxin:_passwd_here_:cvs_jiangxin
johnson:_passwd_here_:cvs_johnson
$ cd /repos/project
$ mkdir jiangxin; chown -R cvs_jiangxin:cvsuser jiangxin; chmod -R 2700 jiangxin
$ mkdir johnson; chown -R cvs_johnson:cvsuser johnson; chmod -R 2700 johnson
于是创建了两个用户独占的工程。