操作系統(tǒng)是:Fedora 7
(注意:以下操作是以root身份操作的#su root)
一、 cvs服務(wù)器安裝
首先確保系統(tǒng)安裝有cvs
# rpm -qa|grep cvs
cvs-1.11.22-9.fc7
如果命令輸出類似于上面的輸出則說明系統(tǒng)已經(jīng)安裝有cvs蕾额,否則就需要從安裝光盤中安裝cvs的rpm包。
但安裝完Fedora7后系統(tǒng)自己就安裝好CVS軟件了碌嘀。
前期工作:
Fedora7默認(rèn)是沒有安裝上xinetd服務(wù)沾乘,所以先安裝xinetd服務(wù)
#yum install xinetd
二擦剑、CVS服務(wù)器端的配置
1.創(chuàng)建cvs組和用戶
1)創(chuàng)建cvs組
#/usr/sbin/groupadd cvs
2)創(chuàng)建新用戶HOME目錄
#mkdir /home/cvsroot
3)添加新用戶cvsroot,并將其添加至cvs組峦剔,并指定其HOME目錄
#/usr/sbin/useradd -g cvs -G cvs -d /home/cvsroot cvsroot
4)設(shè)置cvsroot用戶的密碼档礁,我這里的密碼為:cvs123
#passwd cvsroot
Changing password for user cvsroot.
新的 UNIX 口令:
重新輸入新的 UNIX 口令:
passwd: all authentication tokens updated successfully.
5)更改/home/cvsroot/目錄及其子目錄的屬主和屬組
因?yàn)槭窃趓oot用戶下間的該目錄,他的屬主和屬組都是root,這里我們要將其屬主改為cvsroot,屬組改為cvs,保證cvs組的用戶對(duì)該目錄有相應(yīng)的權(quán)限吝沫。
# chown -R cvsroot.cvs /home/cvsroot/
6)更改/home/cvsroot目錄屬性
保證cvsroot同組(cvs組)的其他用戶也有讀寫和執(zhí)行權(quán)呻澜,我們以后要為cvs組添加用戶
# chmod -R 775 /home/cvsroot/
(注意:以下操作是以cvsroot身份進(jìn)行操作的)
2.切換至cvsroot用戶,并創(chuàng)建一個(gè)倉庫
1)切換用戶
#su cvsroot
口令:
bash-3.2$
2)設(shè)置全局變量CVSROOT惨险,指定倉庫所在的目錄
$export CVSROOT=/home/cvsroot/
3)創(chuàng)建倉庫
$ cvs init
OK,到目前為目止羹幸,就可以在本機(jī)上以cvsroot身份提交源代碼了
3.提交源入源代碼
1)進(jìn)入你想提交給CVS服務(wù)器的代碼所在目錄
我這里是/home/HelloWorld/
bash-3.2$ cd /home/HelloWorld/
bash-3.2$ ls
helloworld.cpp makefile
裝載cvs import -m "[repository test]" [cvstest] [vendortag] [releasetag]
-m后面引號(hào)內(nèi)填入log內(nèi)容,接下來是源代碼模塊名稱辫愉,接著是裝載者栅受,最后是標(biāo)識(shí)符號(hào),我這里是:
2)提交工程
$ cvs import -m "my cvs project" myProject cvsroot start
N myProject/makefile
N myProject/helloworld.cpp
No conflicts created by this import
此時(shí)恭朗,我們的源碼也提交了屏镊,說明module已經(jīng)建立了。其目錄為:/home/cvsroot/myProject/
$ ls -l /home/cvsroot
總計(jì) 20
drwxrwxr-x 3 cvsroot cvs 4096 10-14 10:59 CVSROOT
drwxrwxr-x 2 cvsroot cvs 4096 10-14 12:11 myProject
3)checkout工程
如果我們?cè)趓oot用戶(或者其他用戶痰腮,但必須保證該用戶對(duì)于存放module的目錄有寫的權(quán)限)下測(cè)試而芥,checkout出這一個(gè)module,可以執(zhí)行如下:
# cvs -d /home/cvsroot checkout myProject
cvs checkout: Updating myProject
U myProject/helloworld.cpp
U myProject/makefile
說明在本地可以checkout出來,而且他會(huì)自動(dòng)在當(dāng)前目錄下創(chuàng)建以該module名為名的目錄項(xiàng)膀值,不管你checkout出來的是一個(gè)源碼文件還是整個(gè)module棍丐。
4.創(chuàng)建登錄CVS服務(wù)器的用戶和密碼
CVS默認(rèn)使用系統(tǒng)用戶登錄误辑,為了系統(tǒng)安全性的考慮也可以使用獨(dú)立的用戶管理。CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中歌逢,格式為:
[cvs 用戶名]:[加密的口令]:[等效系統(tǒng)用戶名]
1)先創(chuàng)建一個(gè)passwd文件
$ cd /home/cvsroot/CVSROOT/
$ htpasswd -c passwd cvsuser
New password:
Re-type new password:
Adding password for user cvsuser
$ cat passwd
cvsuser:R9oDKNeysScdw
$vi passwd
在末尾添加 :cvsroot
作用是映射到cvsroot用戶巾钉,最終結(jié)果如下:
cvsuser:R9oDKNeysScdw:cvsroot
在創(chuàng)建其他用戶時(shí),不用帶參數(shù)
#htpasswd passwd 用戶名
New password:
Re-type new password:
要徹底防止使用系統(tǒng)帳號(hào)登陸,可以編輯CVSROOT目錄下的config文件趋翻,把:
#SystemAuth=yes
這一行前面的#去掉睛琳,改為如下形式:
SystemAuth=no
CVS就不會(huì)驗(yàn)證系統(tǒng)用戶了盒蟆,否則當(dāng)用戶名不在passwd文件中時(shí)踏烙,CVS會(huì)進(jìn)行系統(tǒng)用戶的驗(yàn)證。
2)配置cvs用戶的讀寫權(quán)限
使用 CVSROOT目錄下的readers和writers文件進(jìn)行這個(gè)工作历等。這2個(gè)文件默認(rèn)也是沒有的讨惩,沒關(guān)系,自己創(chuàng)建就可以了寒屯。
readers文件記錄 擁有只讀權(quán)限的用戶名荐捻,每行一個(gè)用戶;
writers文件記錄擁有讀寫權(quán)限的用戶名寡夹,也是每行一個(gè)用戶处面。
注意, readers文件比writers優(yōu)先菩掏,也就是說出現(xiàn)在readers中的用戶將會(huì)是只讀的魂角,不管writers文件中是否存在該用戶。
5.設(shè)置開機(jī)啟動(dòng)CVS服務(wù)
1)檢查/etc/services中智绸,cvspserver是否開啟野揪。
cvspserver是遠(yuǎn)程登錄CVS服務(wù)器時(shí)對(duì)用戶的驗(yàn)證方式。
$cat /etc/services | grep cvspserver
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
如果命令輸出類似于上面的輸出瞧栗,這說明我的系統(tǒng)已打開該服務(wù)斯稳。
2)創(chuàng)建cvspserver文件
切換至root用戶下:
#su root
cd /etc/xinetd.d/
#vi cvspserver
編輯該文件,內(nèi)容如下:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_success += USERID
log_on_failure += USERID
}
其中,--allow-root=/home/cvsroot即倉庫所在目錄迹恐。
注意:每行的第一個(gè)"="左右兩側(cè)要有一個(gè)空格挣惰。
3)然后更改/etc/xinetd.d/cvs
否則的話,在后面的遠(yuǎn)程登錄本機(jī)時(shí)會(huì)出現(xiàn)下面的問題
“沒有該倉庫”
[test@liu ~]$ cvs -d :pserver:cvsuser@10.15.5.89:/home/cvsroot login
Logging in to :pserver:cvsuser@10.15.5.89:2401/home/cvsroot
CVS password:
/home/cvsroot: no such repository
[test@liu ~]$
更改方法如下:
把disable=yes 改為 disable=no ;env和server_args中路徑改為你的cvsroot路徑殴边,我的是/home/cvsroot
更改后的內(nèi)容如下
# default: off
# description: The CVS service can record the history of your source "
# files. CVS stores all the versions of a file in a single "
# file in a clever way that only stores the differences "
# between versions.
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/home/cvsroot
server_args = -f --allow-root=/home/cvsroot pserver
# bind = 127.0.0.1
}
3)重啟xinetd服務(wù)憎茂,使配置生效
重啟xinetd
# /etc/init.d/xinetd restart
停止 xinetd: [確定]
啟動(dòng) xinetd: [確定]
確定cvspserver是否啟動(dòng)
#netstat -l | grep cvspserver
tcp 0 0 *:cvspserver *:* LISTEN
4)最后還必須檢查防火墻的設(shè)置,看2401端口是否打開打開
#/sbin/iptables -L&line;grep cvs
如果看到
ACCEPT tcp -- anywhere anywhere tcp dpt:cvspserver
說明端口已經(jīng)打開,否則請(qǐng)打開防火墻2401端口
#/sbin/iptables -A INPUT -i eth0 -p tcp --dport 2401 -j ACCEPT
#/sbin/service iptables save
至此找都,CVS服務(wù)器配置全部完成唇辨,下面進(jìn)行測(cè)試。
三能耻、客戶端測(cè)試
1赏枚、連接CVS服務(wù)器
剛才建立的CVS服務(wù)器端的IP為:10.15.5.89
客戶端主機(jī)使用非root用戶亡驰,我的用戶名為test
首先建立環(huán)境變量CVSROOT,以剛才建立的CVS用戶cvsuser登錄:
[test@liu ~]$ export CVSROOT=:pserver:cvsuser@10.15.5.89:/home/cvsroot
[test@liu ~]$ cvs login
Logging in to :pserver:cvsuser@10.15.5.89:2401/home/cvsroot
CVS password:
[test@liu ~]$
如果沒有錯(cuò)誤提示饿幅,則代表成功登錄CVS服務(wù)器凡辱。
---------------------------------------
在此卻很有可能出現(xiàn):unrecognized auth response from 10.15.5.89: cvs pserver: cannot open /home/cvsroot/CVSROOT/config: Permission denied
尤其是當(dāng)你的linux版本較高時(shí)。
這是由于selinux的原因栗恩,這是一種安全機(jī)制透乾,具體可以上網(wǎng)查。
只要關(guān)閉selinux就可以了:
編輯/etc/selinux/config磕秤,
將SELINUX設(shè)置為SELINUX=disabled乳乌,禁用SELINUX。
重啟電腦就好了
---------------------------------------
2市咆、檢出模塊
我們上面已經(jīng)建立了一個(gè)倉庫了: myProject
我們?cè)诳蛻舳藢⒃撃Kcheckout
[test@liu ~]$ cvs checkout myProject
cvs checkout: Updating myProject
U myProject/helloworld.cpp
U myProject/makefile
[test@liu ~]$
好了汉操,在當(dāng)前目錄下生成了目錄myProject,現(xiàn)在你就可以進(jìn)入myProject進(jìn)行修改蒙兰,刪除磷瘤,提交等操作了。
四搜变、現(xiàn)在我們來說說多倉庫的建立
注意,我們用cvsroot僅僅是用來管理,所以,不要在它$HOME下面創(chuàng)建任何倉庫
另外,cvsroot用戶的初始環(huán)境不應(yīng)該包含非空的$CVSROOT.(也就是必須設(shè)置環(huán)境變量) 使用cvsroot來進(jìn)行的任何管理工作都指明CVSROOT是一個(gè)好的習(xí)慣.
OK,開始給單個(gè)項(xiàng)目建倉庫
假設(shè)有兩個(gè)項(xiàng)目,project1,project2,希望單獨(dú)存放,便于管理
1采缚、分別給兩個(gè)工程建立各自的cvs主目錄
#mkdir /home/cvsroot/pro1
#mkdir /home/cvsroot/pro2
2、 分別更改pro1和pro2目錄及其子目錄的屬主和屬組
#chown cvsroot.cvs /home/cvsroot/pro1
#chown cvsroot.cvs /home/cvsroot/pro2
3挠他、更改目錄pro1和pro2的權(quán)限
#chmod 2775 /home/cvsroot/pro1
#chmod 2775 /home/cvsroot/pro2
(更高的安全要求則$chmod 2770 /home/cvsroot/pro1)
4扳抽、OK,開始建立倉庫
#su cvsroot
$cvs -d /home/cvsroot/pro1 init
$cvs -d /home/cvsroot/pro2 init
$chmod 2775 /home/cvsroot/pro1
$chmod 2775 /home/cvsroot/pro2
5、修改啟動(dòng)文件
#vi /etc/xinetd.d/cvspserver
內(nèi)容如下:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot/pro1 --allow-root =/home/cvsroot/pro2 pserver
log_on_success += USERID
log_on_failure += USERID
}
然后更改/etc/xinetd.d/cvs, 否則的話,在后面的遠(yuǎn)程登錄本機(jī)時(shí)會(huì)出現(xiàn)下面的問題
“沒有該倉庫”
[test@liu ~]$ cvs -d :pserver:cvsuser@10.15.5.89:/home/cvsroot/pro1 login
Logging in to :pserver:cvsuser@10.15.5.89:2401/home/cvsroot/pro1
CVS password:
/home/cvsroot/pro1: no such repository
[test@liu ~]$
更改方法如下:
把disable=yes 改為 disable=no 绩社;env和server_args中路徑改為你的cvsroot路徑摔蓝,我的是/home/cvsroot
更改后的內(nèi)容如下
# default: off
# description: The CVS service can record the history of your source "
# files. CVS stores all the versions of a file in a single "
# file in a clever way that only stores the differences "
# between versions.
service cvspserver
{
disable = no
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/home/cvsroot
server_args = -f –allow-root=/home/cvsroot/pro1 --allow-root=/home/cvsroot/pro2 pserver
# bind = 127.0.0.1
}
6、重啟xinetd服務(wù)愉耙,使配置生效
重啟xinetd
# /etc/init.d/xinetd restart
停止 xinetd: [確定]
啟動(dòng) xinetd: [確定]
7贮尉、建立更多的倉庫的技巧
由于xinetd的server_args長(zhǎng)度限制,當(dāng)你想運(yùn)行很多的單個(gè)倉庫的時(shí)候,可以這么做
1)修改cvspserver和cvs文件
#vi /etc/xinetd.d/cvspserver
#vi /etc/xinetd.d/cvs
修改它們的內(nèi)容中如下:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
server = /home/cvsroot/cvs.run
log_on_success += USERID
log_on_failure += USERID
}
2)然后寫腳本/home/cvsroot/cvs.run
#vi /home/cvsroot/cvs.run
腳本內(nèi)容如下:
#!/bin/bash
/usr/bin/cvs -f "
--allow-root=/home/cvsroot/pro1 "
--allow-root=/home/cvsroot/pro2 "
--allow-root=/home/cvsroot/pro3 "
--allow-root=/home/cvsroot/pro4 "
--allow-root=/home/cvsroot/pro5 "
--allow-root=/home/cvsroot/pro6 "
pserver
3)更改cvs.run的權(quán)限:
#chmod +x /home/cvsroot/cvs.run
4)重啟服務(wù):
#service xinetd restart
好了,現(xiàn)在多個(gè)獨(dú)立的倉庫也建立好了