首页 > 代码库 > CVS服务器配置要点
CVS服务器配置要点
为了方便管理,可为 cvs 专门建立现存于操作系统中的一个组和其中的若干用户。后面还需要建立只属于 cvs 服务的 virtual 用户,并将他们映射到已建立的系统用户上。通过设置文件与目录的不同权限,则可以对 cvs 服务的 virtual 用户进行不同访问权限的控制。
由于 cvs 服务并不是采用 standalone模式始终在后台运行并监听端口,而是由 inetd或 xinetd守护进程来代劳。所以需要配置 /etc/services文件,将 cvs 服务的端口号(通常为2401)与服务名称关联起来,并配置 inetd.conf或在 /etc/xinetd.d/目录下生成相应的服务描述文件,指明 inetd或 xinetd以什么方式和参数来启动 cvs 程序,以及使用
--allow-root=/path/to/your/repository/
来指明 cvs 服务需保存的所有 repository。配置完成后需要重新启动 inetd或 xinetd,使其读入 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目录中修改文件 cvswrappers与 cvsignore。cvswrappers文件的目的是告诉 cvs 哪些文件是二进制文件,从而需要禁用 keyword expansion与 line-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
注意: 修改完 passwd、 cvswrappers、 cvsignore文件后,需将其权限设为 444 。
实质上,上述方法设置user passwd已经不再适用了。正确的做法是,应该将被映设的系统用户信息条目从/etc/passwd中添加到/var/lib/cvsd/etc/passwd中。否则,就会出现”cvsd: no such system user”的错误。同时,应该该用户添加到cvsd组中,否则用户将没有权限访问repository。(事实证明,这么做也不行,只能将cvs虚拟用户映到cvsd上)
最后,对生成的 repository及其所有子目录设置相应的用户与组权限。权限的设置可以通过设置文件与目录的操作系统级权限,也可以在 CVSROOT下建立 readers或 writers文件,来控制 cvs virtual用户的访问权限。这两个文件中均是 cvs 虚拟用户名的列表,每行写一个用户名,且在文件末尾留一空白行。写在 readers文件中的用户只有 read-only权限,写在 writers中的用户同时拥有读写权限。若在 CVSROOT下存在 writers文件,则凡是未列入该文件的用户都只有 read-only权限。