Linux下CVS配置

雖然網上有很多關於CVS服務器的配置文檔供大家參考,但是本着“紙上得來終覺淺,絕知此事須躬行”的態度,還是自己動手安裝一下。因爲別人配置的環境和 自己的畢竟不大一樣,操作起來可能會有一些步驟有問題。只有我們自己遇到問題並解決時,才能夠對CVS服務器的配置理解的更加深入。也建議各位需要用到CVS的朋友也動手裝一下,實現你自己的CVS服務器。
閒話少說,轉入正題。我用的操作系統是:Fedora 7
(注意:以下操作是以root身份操作的#su root)
一、cvs服務器安裝

首先確保系統安裝有cvs

# rpm -qa|grep cvs
cvs-1.11.22-9.fc7

如果命令輸出類似於上面的輸出則說明系統已經安裝有cvs,否則就需要從安裝光盤中安裝cvs的rpm包。
但安裝完Fedora7後系統自己就安裝好CVS軟件了。
前期工作:

Fedora7默認是沒有安裝上xinetd服務,所以先安裝xinetd服務

#yum install xinetd

二、CVS服務器端的配置


1.創建cvs組和用戶
1)創建cvs組
#/usr/sbin/groupadd cvs

2)創建新用戶HOME目錄
#mkdir /home/cvsroot

3)添加新用戶cvsroot,並將其添加至cvs組,並指定其HOME目錄
#/usr/sbin/useradd -g cvs -G cvs -d /home/cvsroot cvsroot

4)設置cvsroot用戶的密碼,我這裏的密碼爲:chongqing
#passwd cvsroot

Changing password for user cvsroot.

新的 UNIX 口令:

重新輸入新的 UNIX 口令:

passwd: all authentication tokens updated successfully.

5)更改/home/cvsroot/目錄及其子目錄的屬主和屬組
因爲是在root用戶下間的該目錄,他的屬主和屬組都是root,這裏我們要將其屬主改爲cvsroot,屬組改爲cvs,保證cvs組的用戶對該目錄有相應的權限。
# chown -R cvsroot.cvs /home/cvsroot/

6)更改/home/cvsroot目錄屬性
保證cvsroot同組(cvs組)的其他用戶也有讀寫和執行權,我們以後要爲cvs組添加用戶

# chmod -R 775 /home/cvsroot/

(注意:以下操作是以cvsroot身份進行操作的)

2.切換至cvsroot用戶,並創建一個倉庫
1)切換用戶
#su cvsroot

口令:

bash-3.2$

2)設置全局變量CVSROOT,指定倉庫所在的目錄
$export CVSROOT=/home/cvsroot/

3)創建倉庫
$ cvs init



OK,到目前爲目止,就可以在本機上以cvsroot身份提交源代碼了

3.提交源入源代碼
1)進入你想提交給CVS服務器的代碼所在目錄
我這裏是/home/HelloWorld/

bash-3.2$ cd /home/HelloWorld/

bash-3.2$ ls

helloworld.cpp makefile

裝載cvs import -m "[repository test]" [cvstest] [vendortag] [releasetag]
-m後面引號內填入log內容,接下來是源代碼模塊名稱,接着是裝載者,最後是標識符號,我這裏是:

2)提交工程
$ cvs import -m "my cvs project" myProject cvsroot start

N myProject/makefile

N myProject/helloworld.cpp



No conflicts created by this import

此時,我們的源碼也提交了,說明module已經建立了。其目錄爲:/home/cvsroot/myProject/

$ ls -l /home/cvsroot

總計 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工程
如果我們在root用戶(或者其他用戶,但必須保證該用戶對於存放module的目錄有寫的權限)下測試,checkout出這一個module,可以執行如下:

# cvs -d /home/cvsroot checkout myProject

cvs checkout: Updating myProject

U myProject/helloworld.cpp

U myProject/makefile

說明在本地可以checkout出來,而且他會自動在當前目錄下創建以該module名爲名的目錄項,不管你checkout出來的是一個源碼文件還是整個module。

4.創建登錄CVS服務器的用戶和密碼
CVS默認使用系統用戶登錄,爲了系統安全性的考慮也可以使用獨立的用戶管理。CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中,格式爲:
〔cvs 用戶名〕:〔加密的口令〕:〔等效系統用戶名〕

1)先創建一個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用戶,最終結果如下:

cvsuser:R9oDKNeysScdw:cvsroot

在創建其他用戶時,不用帶參數


#htpasswd passwd 用戶名

New password:

Re-type new password:

要徹底防止使用系統帳號登陸,可以編輯CVSROOT目錄下的config文件,把:
#SystemAuth=yes

這一行前面的#去掉,改爲如下形式:

SystemAuth=no

CVS就不會驗證系統用戶了,否則當用戶名不在passwd文件中時,CVS會進行系統用戶的驗證。

2)配置cvs用戶的讀寫權限
使用 CVSROOT目錄下的readers和writers文件進行這個工作。這2個文件默認也是沒有的,沒關係,自己創建就可以了。

readers文件記錄 擁有隻讀權限的用戶名,每行一個用戶;

writers文件記錄擁有讀寫權限的用戶名,也是每行一個用戶。

注意, readers文件比writers優先,也就是說出現在readers中的用戶將會是隻讀的,不管writers文件中是否存在該用戶。

5.設置開機啓動CVS服務
1)檢查/etc/services中,cvspserver是否開啓。
cvspserver是遠程登錄CVS服務器時對用戶的驗證方式。

$cat /etc/services | grep cvspserver

cvspserver 2401/tcp # CVS client/server operations

cvspserver 2401/udp # CVS client/server operations

如果命令輸出類似於上面的輸出,這說明我的系統已打開該服務。

2)創建cvspserver文件
切換至root用戶下:

#su root

cd /etc/xinetd.d/

#vi cvspserver

編輯該文件,內容如下:

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即倉庫所在目錄。
注意:每行的第一個"="左右兩側要有一個空格。


3)然後更改/etc/xinetd.d/cvs
否則的話,在後面的遠程登錄本機時會出現下面的問題

“沒有該倉庫”

[test@liu ~]$ cvs -d :pserver:[email protected]:/home/cvsroot login

Logging in to :pserver:[email protected]:2401/home/cvsroot

CVS password:

/home/cvsroot: no such repository

[test@liu ~]$

更改方法如下:

把disable=yes 改爲 disable=no ;env和server_args中路徑改爲你的cvsroot路徑,我的是/home/cvsroot

更改後的內容如下

# 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服務,使配置生效

重啓xinetd

# /etc/init.d/xinetd restart

停止 xinetd: [確定]

啓動 xinetd: [確定]

確定cvspserver是否啓動

#netstat -l | grep cvspserver

tcp 0 0 *:cvspserver *:* LISTEN

4)最後還必須檢查防火牆的設置,看2401端口是否打開打開
#/sbin/iptables -L&line;grep cvs



如果看到

ACCEPT tcp -- anywhere anywhere tcp dpt:cvspserver


說明端口已經打開,否則請打開防火牆2401端口 

#/sbin/iptables -A INPUT -i eth0 -p tcp --dport 2401 -j ACCEPT

#/sbin/service iptables save

至此,CVS服務器配置全部完成,下面進行測試。

三、客戶端測試
1、連接CVS服務器
剛纔建立的CVS服務器端的IP爲:10.15.5.89

客戶端主機使用非root用戶,我的用戶名爲test
首先建立環境變量CVSROOT,以剛纔建立的CVS用戶cvsuser登錄:

[test@liu ~]$ export CVSROOT=:pserver:[email protected]:/home/cvsroot

[test@liu ~]$ cvs login

Logging in to :pserver:[email protected]:2401/home/cvsroot

CVS password:

[test@liu ~]$

如果沒有錯誤提示,則代表成功登錄CVS服務器。

---------------------------------------

在此卻很有可能出現:unrecognized auth response from 10.15.5.89: cvs pserver: cannot open /home/cvsroot/CVSROOT/config: Permission denied

尤其是當你的linux版本較高時。
這是由於selinux的原因,這是一種安全機制,具體可以上網查。
只要關閉selinux就可以了:

編輯/etc/selinux/config,

將SELINUX設置爲SELINUX=disabled,禁用SELINUX。
重啓電腦就好了
---------------------------------------

2、檢出模塊
我們上面已經建立了一個倉庫了: myProject

我們在客戶端將該模塊checkout

[test@liu ~]$ cvs checkout myProject

cvs checkout: Updating myProject

U myProject/helloworld.cpp

U myProject/makefile

[test@liu ~]$

好了,在當前目錄下生成了目錄myProject,現在你就可以進入myProject進行修改,刪除,提交等操作了。



四、現在我們來說說多倉庫的建立

注意,我們用cvsroot僅僅是用來管理,所以,不要在它$HOME下面創建任何倉庫
另外,cvsroot用戶的初始環境不應該包含非空的$CVSROOT.(也就是必須設置環境變量)  使用cvsroot來進行的任何管理工作都指明CVSROOT是一個好的習慣.


OK,開始給單個項目建倉庫

假設有兩個項目,project1,project2,希望單獨存放,便於管理

1、分別給兩個工程建立各自的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的權限
#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、修改啓動文件
#vi /etc/xinetd.d/cvspserver

內容如下:

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, 否則的話,在後面的遠程登錄本機時會出現下面的問題

“沒有該倉庫”

[test@liu ~]$ cvs -d :pserver:[email protected]:/home/cvsroot/pro1 login

Logging in to :pserver:[email protected]:2401/home/cvsroot/pro1

CVS password:

/home/cvsroot/pro1: no such repository

[test@liu ~]$

更改方法如下:

把disable=yes 改爲 disable=no ;env和server_args中路徑改爲你的cvsroot路徑,我的是/home/cvsroot

更改後的內容如下

# 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服務,使配置生效

重啓xinetd

# /etc/init.d/xinetd restart

停止 xinetd: [確定]

啓動 xinetd: [確定]

7、建立更多的倉庫的技巧
由於xinetd的server_args長度限制,當你想運行很多的單個倉庫的時候,可以這麼做

1)修改cvspserver和cvs文件 
#vi /etc/xinetd.d/cvspserver

#vi /etc/xinetd.d/cvs

修改它們的內容中如下:

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

腳本內容如下:

#!/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的權限:
#chmod +x /home/cvsroot/cvs.run

4)重啓服務:
#service xinetd restart

好了,現在多個獨立的倉庫也建立好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章