linux配置cvs版本服務(wù)器

操作系統(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ú)立的倉庫也建立好了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朴沿,一起剝皮案震驚了整個(gè)濱河市猜谚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赌渣,老刑警劉巖魏铅,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坚芜,居然都是意外死亡览芳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門鸿竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沧竟,“玉大人铸敏,你說我怎么就攤上這事∥虮茫” “怎么了杈笔?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)糕非。 經(jīng)常有香客問我蒙具,道長(zhǎng),這世上最難降的妖魔是什么朽肥? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任禁筏,我火速辦了婚禮,結(jié)果婚禮上鞠呈,老公的妹妹穿的比我還像新娘融师。我一直安慰自己,他們只是感情好蚁吝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舀射,像睡著了一般窘茁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脆烟,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天山林,我揣著相機(jī)與錄音,去河邊找鬼邢羔。 笑死驼抹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拜鹤。 我是一名探鬼主播框冀,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼敏簿!你這毒婦竟也來了明也?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤惯裕,失蹤者是張志新(化名)和其女友劉穎温数,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜻势,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撑刺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了握玛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够傍。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡次员,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出王带,到底是詐尸還是另有隱情淑蔚,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布愕撰,位于F島的核電站刹衫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搞挣。R本人自食惡果不足惜带迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望囱桨。 院中可真熱鬧仓犬,春花似錦、人聲如沸舍肠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠语。三九已至叽躯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肌括,已是汗流浹背点骑。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谍夭,地道東北人黑滴。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像紧索,于是被迫代替她去往敵國和親袁辈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容