cvs的安装方式大致有两种
一种是cvs+cvsd,另一种是cvs+xinetd,我选择的是cvs+xinetd,这种做法比较节省资源,xinetd是一个后台服务管理程序,除了管理cvs之外还可以管理其它的后台服务,理论上讲会比较节省资源一些。
环境
os:ubuntu 12.04
cvs:(CVS) 1.12.13 (client/server)
xinietd:2.3.14
安装过程如下
1.安装相关包
1.1.安装cvs和xinetd
jim@jim-laptop:~ sudoapt−getinstallcvscvsdxinetdjim@jim−laptop: ……
注意:刚才安装cvsd并不是需要cvsd在后台运行,而是因为cvsd自带的几个小工具挺好使,可以省去不少力气,装完了把cvsd服务删除就可以了,如下所示
jim@jim-laptop:~
sudo/etc/init.d/cvsdstopjim@jim−laptop:
sudo rm /etc/init.d/cvsd
jim@jim-laptop:~$
1.2.安装文件介绍
cvs会安装到这么几个地方
/usr/bin/cvs //执行文件
/etc/cvsd/ //cvsd存放配置文件的地方,因为没有用到cvsd,因此这个目录可以删除,不删留着也不影响
/var/lib/cvsd //cvs的主目录,所有的执行文件,临时文件都在这里,也是RootJail变量默认指向的目录,我建议不要改默认的RootJail,如果希望把repository放到别的地方,可以考虑使用符号连接的办法实现。
2.生成库
2.1.生成repositories目录
/var/lib/cvsd是默认的起始目录,代码库应该放到这里。
注意:如果你希望把代码库放到别处,我建议你可以在cvs搭建成功之后用符号链接迁移到别处,目前暂时别乱改,否则出现问题不容易找到解决办法。
假设代码库的名字叫做 cvs-root
ncut@ncut-virtual-machine:~
sudomkdir/var/lib/cvsd/cvs−root//创建代码库目录ncut@ncut−virtual−machine:
sudo chown ncut:cvsd /var/lib/cvsd/cvs-root -R //修改目录的所有者为当前用户
ncut@ncut-virtual-machine:~$ sudo chmod ug+rwx /var/lib/cvsd/cvs-root -R //修改cvs-root目录的读写权限,设置为除了所有者之外,别的用户也可以读写
ok,现在/var/lib/cvsd/cvs-root已经拥有了写入权限,可以执行个小测试
ncut@ncut-virtual-machine:~ touch/var/lib/cvsd/cvs−root/ancut@ncut−virtual−machine:
没提示出错就说明可以了
2.2.初始化repositories
执行如下代码
ncut@ncut-virtual-machine:~
cvs−d/var/lib/cvsd/cvs−rootinitncut@ncut−virtual−machine:
ls /var/lib/cvsd/cvs-root
CVSROOT
2.3.为cvs-root添加用户并初始化密码
ncut@ncut-virtual-machine:~ cvsd−passwd/var/lib/cvsd/cvs−rootncut/usr/sbin/cvsd−passwd:addinguser‘jim′to‘/var/lib/cvsd/cvs−root/CVSROOT/passwd′Enternewpassword:<输入密码123>Retypenewpassword:<重复输入密码123>ncut@ncut−virtual−machine:
2.4.配置代码库的config文件
我这里执行完init之后,cvs-root/CVSROOT里的文件都是只读的,必须增加改变文件属性才能编辑
ncut@ncut-virtual-machine:~
sudochmod+rw/var/lib/cvsd/cvs−root/CVSROOT/∗ncut@ncut−virtual−machine:
ncut@ncut-virtual-machine:~$ gedit /var/lib/cvsd/cvs-root/CVSROOT/config
增加内容如下
SystemAuth=no
PamAuth=no
LockDir=/var/lib/cvsd/tmp/locked #锁目录,这是个绝对路径
创建刚才的锁目录
ncut@ncut-virtual-machine:~ sudomkdir/var/lib/cvsd/tmp/lockedncut@ncut−virtual−machine:
3.配置xinet.d的配置文件
xinet.d的配置文件在/etc/xinetd.d/目录下,在这个目录下找找有没有一个cvspserver文件,如果已经有了就直接编辑它,如果没有就创建它,
内容如下
service cvspserver
{ #这个花括号一定要另起一行,否则会解析错误
#主要添加的是加粗部分,12.04默认有该文件
#端口号
**port = 2401**
socket_type = stream
#协议
**protocol = tcp**
#用户名(这里一定要是root或者cvs默认组cvsd,不然会出错!)
user = cvsd
wait = no
**type = UNLISTED**
#cvs执行文件路径
server = /usr/bin/cvs
#这个是cvs服务参数,其中的/var/lib/cvsd/cvs-root是代码库的绝对路径,日后访问cvs的时候也要提供这个路径(如果嫌这个名字太长,可以使用符号链接解决名字太长的问题)
server_args = -f --allow-root /var/lib/cvsd/cvs-root pserver
disable = no
}
注意:
a.花括号要独占一行
b.等号前后要有空格
c.如果你和我一样喜欢使用gedit编辑cvs文件的话,就得小心在保存的时候gedit会自动创建一个名为cvs~的备份文件,这样在启动xinetd服务的时候会出现地址已经被占用的警告信息(系统日志中可以看到),解决办法就是把这个cvs~备份文件删除。
5.重启xinetd服务
在重启之前要先看看/etc/services服务里有没有开启cvs服务端口
ncut@ncut-virtual-machine:~cat /etc/services |grep 2401
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp
ncut@ncut-virtual-machine:~
ok,已经配置好端口了,现在可以重启xinetd服务了,输入如下命令
ncut@ncut-virtual-machine:~ sudo/etc/init.d/xinetdrestart∗Stoppinginternetsuperserverxinetd[OK]∗Startinginternetsuperserverxinetd[OK]ncut@ncut−virtual−machine:
6.连接测试
首先查看端口是否开启
ncut@ncut-virtual-machine:~$ telnet localhost 2401
Trying ::1…
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
出现上面的字样说明cvs服务器端口已经打开了,如果出现Connection refused的提示,可能表示xinetd配置失败,建议看看系统日志,从中会得到帮助。
注:telnet: Unable to connect to remote host: Connection refused
查看了下端口 netstat -ntpl (tcp端口状态)
补充: netstat -nupl(udp端口状态)
一看才知道自己粗心把之前cvspserver文件中的port写为2410了。
试试使用cvs登录
ncut@ncut-virtual-machine:~ cvs−d:pserver:jim@localhost:/var/lib/cvsd/cvs−rootloginLogginginto:pserver:jim@localhost:2401/var/lib/cvsd/cvs−rootCVSpassword:ncut@ncut−virtual−machine:
如果什么提示都不出就说明连接成功了
7.把冗长的/var/lib/cvsd/cvs-root改用符号链接简化
讲述一下如何将冗长的/var/lib/cvsd/cvs-root简化成/cvs-root
在xinetd的cvs配置文件 /etc/xinetd.d/cvs
….
server_args = -f –allow-root /var/lib/cvsd/cvs-root pserver
….
server-args参数指向的绝对路径就是连接测试时输入的冗长的代码路路径,把它修改成下面的样子
….
server_args = -f –allow-root /cvs-root pserver
….
然后执行下面的命令
jim@jim-laptop:/ sudoln−s/var/lib/cvsd/cvs−rootcvs−rootjim@jim−laptop:/
ok,改完了,再测试一下
jim@jim-laptop:~ cvs−d:pserver:jim@localhost:/var/lib/cvsd/cvs−rootloginLogginginto:pserver:jim@localhost:2401/cvs−rootCVSpassword:jim@jim−laptop:
ok,连接成功了
8.设置读写权限
还没完事,目前cvs还只是能登录,如果执行cvs add update等操作的时候会出现一错误提示
cvs add “blueprint-demo”
cvs add: cannot mkdir /var/lib/cvsd/cvs-root/blueprint-demo: Permission denied
这是因为目录还没有设置读写权限,执行下面的脚本就可以了
jim@jim-laptop:~
sudousermod−a−Gcvsdjim//将jim用户加入cvsd用户组jim@jim−laptop:
sudo chmod ug+rwx /var/lib/cvsd/tmp -R //设置临时目录的写入权限
jim@jim-laptop:~
sudochmodug+rwx/var/lib/cvsd/cvs−root−R//设置工程目录的写入权限jim@jim−laptop:
sudo chmod ug+rwx /var/lib/cvsd/cvs-root/CVSROOT/* //设置工程CVSROOT具有读写权限