您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > cvs
CVS服務(wù)器設(shè)置指南
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/1/24 15:20:00 ] 推薦標(biāo)簽:

  我整理的這篇文章大部分內(nèi)容是我在Red Hat Linux 8.0和9.0上驗(yàn)證過的,希望對你有幫助。 服務(wù)器的安裝略過不提,因?yàn)榘惭b了開發(fā)工具的話默認(rèn)已經(jīng)有了CVS。沒有的話,可以通過apt或yum來搞定.apt是的使用請參考http://www.bestunix.net/p/rhel4_apt.php

  1. 首先創(chuàng)建用于CVS的組和用戶:
代碼
/usr/sbin/groupadd cvs   
/usr/sbin/useradd cvsroot -g cvs
passwd cvsroot
  OK,用戶已經(jīng)建立好了,cvsroot是我們做CVS操作使用的。

  2. 修改配置文件:
  #cat/etc/services|grep cvspserver
  看看是否有:
  cvspserver    2401/tcp #CVS client/server operations   
  cvspserver    2401/udp #CVS client/server operations
  這2行。系統(tǒng)自帶了CVS時(shí),這2行也已經(jīng)有了,只需要確認(rèn)一下。如果沒有,請自己加上去。

  3. 然后必須創(chuàng)建啟動(dòng)腳本:
  vi /etc/xinet.d/cvspserver
  內(nèi)容如下:
代碼 

service cvspserver { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/bin/cvs server_args = -f --allow-root=/home/cvsroot pserverlog_on_failure += USERID }

  其中server指定CVS可執(zhí)行文件路徑,默認(rèn)安裝是/usr/bin/cvs。server_args指定源代碼庫路徑及認(rèn)證方式等,例子中把源代碼存放在cvsroot的主目錄中,也可以另外指定路徑,但必須注意權(quán)限設(shè)置,pserver是密碼認(rèn)證方式,這種方式的安全性要差一些,但操作起來比較簡單。請注意每行等號(hào)左右都有一個(gè)空格,否則無法啟動(dòng)服務(wù)。

事實(shí)上,這個(gè)文件的格式非常容易寫錯(cuò),而這些錯(cuò)誤是沒有任何提示的,所以我強(qiáng)烈建議你下載我寫好的一個(gè)范例文件,在這個(gè)基礎(chǔ)上修改會(huì)方便一些.

  4. 初始化CVS

  切換到cvsroot用戶,然后進(jìn)行初始化:
  cvs -d /home/cvsroot init
  這個(gè)路徑應(yīng)該與cvspserver文件中指定的路徑相同,初始化后會(huì)在此路徑下面創(chuàng)建CVSROOT目錄,存放用于CVS管理的一些文件。此時(shí)重新啟動(dòng)xinetd服務(wù),CVS服務(wù)器應(yīng)該能夠啟動(dòng)了。:
  /sbin/service xinetd restart
  當(dāng)然,重新啟動(dòng)計(jì)算機(jī)也可以。確認(rèn)是否啟動(dòng):
  netstat -anp|grep 2401

  如果能看到:
  tcp 0 0 0.0.0.0:2401


  說明已經(jīng)正常啟動(dòng),沒有的話請重新檢查配置過程是否有錯(cuò)誤或者遺漏。

后還必須檢查防火墻的設(shè)置,看2401端口是否打開打開。

/sbin/iptables -L&line;grep cvs

如果看到

ACCEPT tcp -- anywhere anywhere tcp dpt:cvspserver

說明端口已經(jīng)打開,否則請打開防火墻2401端口

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

/sbin/service iptables save

關(guān)于防火墻的詳細(xì)配置請見http://www.bestunix.net/p/iptables_enter.php

  5. 用戶管理

  CVS默認(rèn)使用系統(tǒng)用戶登錄,為了系統(tǒng)安全性的考慮也可以使用獨(dú)立的用戶管理。CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中,格式為:
  用戶名:密碼:系統(tǒng)用戶

  也是說,它把CVS用戶映射到系統(tǒng)用戶,這樣我們可以通過系統(tǒng)用戶的權(quán)限設(shè)置來分配給用戶不同的權(quán)限,而不需要讓用戶知道系統(tǒng)用戶名和密碼。這里的系統(tǒng)用戶一般為cvsroot這個(gè)用戶. passwd文件默認(rèn)并不存在,我們必須自己創(chuàng)建。文件中的密碼字段使用MD5加密,不幸的是CVS沒有提供添加用戶名的命令,所以我們借用Apache的命令來完成這項(xiàng)工作:

先創(chuàng)建一個(gè)passwd文件

htpasswd -c passwd username

其他用戶直接創(chuàng)建,不用帶參數(shù)
  htpasswd passwd username

  這個(gè)命令為username指定密碼,并保存在passwd中,文件不存在時(shí)會(huì)自動(dòng)創(chuàng)建。htpasswd命令不是為CVS而設(shè),因此總有一些遺憾,它不能自動(dòng)添加映射到的用戶名,不過沒關(guān)系,我們設(shè)置好密碼后,自己把這部分加上。我的做法是映射到cvsroot用戶,如果需要映射其他的用戶,請注意給相應(yīng)的目錄設(shè)置好權(quán)限,否則CVS用戶可能無法訪問源代碼倉庫。要徹底防止使用系統(tǒng)帳號(hào)登陸,可以編輯CVSROOT目錄下的config文件,把:
  #SystemAuth=no

  這一行前面的#去掉,CVS不會(huì)驗(yàn)證系統(tǒng)用戶了,否則當(dāng)用戶名不在passwd文件中時(shí),CVS會(huì)進(jìn)行系統(tǒng)用戶的驗(yàn)證。此外還必須配置讀寫權(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文件中是否存在該用戶。配置完畢,先測試一下:
  #cvs -d :pserver:username@127.0.0.1:/home/cvsroot login

  這里假設(shè)用戶名是username,本機(jī)登陸。出現(xiàn)密碼提示,輸入正確的密碼后,登陸成功。如果提示訪問被拒絕,請檢查用戶權(quán)限、目錄權(quán)限以及防火墻設(shè)置。建議設(shè)置環(huán)境變量CVSROOT:

  #export CVSROOT=:pserver:username@127.0.0.1:/home/cvsroot
  以后不需要輸入-d參數(shù)了,但-d參數(shù)會(huì)覆蓋這個(gè)環(huán)境變量的設(shè)置。

  6. 源代碼倉庫的備份和移動(dòng)

  基本上,CVS的源代碼倉庫沒有什么特別之處,完全可以用文件備份的方式進(jìn)行備份。需要注意的只是,應(yīng)該確認(rèn)備份的過程中沒有用戶提交修改,具體的做法可以是停止CVS服務(wù)器或者使用鎖等等;謴(fù)時(shí)只需要把這些文件按原來的目錄結(jié)構(gòu)存放好,因?yàn)镃VS的每一個(gè)模塊都是單獨(dú)的一個(gè)目錄,與其他模塊和目錄沒有任何瓜葛,相當(dāng)方便。甚至只需要在倉庫中刪除一個(gè)目錄或者文件,便可以刪除該模塊的一些內(nèi)容,不過并不建議這么做,使用CVS的刪除功能將會(huì)有一個(gè)歷史記錄,而對倉庫的直接刪除不留任何痕跡,這對項(xiàng)目管理是不利的。移動(dòng)倉庫與備份相似,只需要把該模塊的目錄移動(dòng)到新的路徑,便可以使用了。如果不幸在備份之后有過一些修改并且執(zhí)行了提交,當(dāng)服務(wù)器出現(xiàn)問題需要恢復(fù)源代碼倉庫時(shí),開發(fā)者提交新的修改會(huì)出現(xiàn)版本不一致的錯(cuò)誤。此時(shí)只需要把 CVS相關(guān)的目錄和文件刪除,即可把新的修改提交。

  7. 更進(jìn)一步的管理
  CVSROOT目錄下還有很多其他功能,其中重要的是modules文件。這個(gè)文件定義了源代碼庫的模塊,下面是一個(gè)例子:
  Linux  
  Linux
  Kernel 
  Linux/kernel
  這個(gè)文件的內(nèi)容按行排列,每一行定義一個(gè)模塊,首先是模塊名,然后是模塊路徑,這是相對于CVS根目錄的路徑。它定義了兩個(gè)模塊,第一個(gè)是Linux模塊,它位于Linux目錄中,第二個(gè)是Kernel模塊,這是Linux模塊的子模塊。 modules文件并非必須的,它的作用相當(dāng)于一個(gè)索引,部分CVS客戶端軟件通過它可以快速找到相應(yīng)的模塊,比如WinCVS。

  8. 協(xié)同開發(fā)的問題
  
  默認(rèn)方式下,CVS允許多個(gè)用戶編輯同一個(gè)文件,這對一個(gè)協(xié)作良好的團(tuán)隊(duì)來說不會(huì)有什么問題,因?yàn)槎鄠(gè)開發(fā)者同時(shí)修改同一個(gè)文件的同一部分是不正常的,這在項(xiàng)目管理中應(yīng)該避免,出現(xiàn)這種情況說明項(xiàng)目組內(nèi)部沒有統(tǒng)一意見。而多個(gè)開發(fā)者修改文件的不同部分,CVS可以很好的管理。如果覺得這種方式難以控制,CVS也提供了解決辦法,可以使用cvs admin -l進(jìn)行鎖定,這樣一個(gè)開發(fā)者正在做修改時(shí)CVS不會(huì)允許其他用戶checkout。這里順便說明一下文件格式的問題,對于文本格式,CVS可以進(jìn)行歷史記錄比較、版本合并等工作,而二進(jìn)制文件不支持這個(gè)操作,比如word文檔、圖片等應(yīng)該以二進(jìn)制方式提交。對于二進(jìn)制方式,由于無法進(jìn)行合并,在無法保證只有一個(gè)用戶修改文件的情況下,建議使用加鎖方式進(jìn)行修改。必須注意的是,修改完畢記得解鎖。從1.6版本開始,CVS引入了監(jiān)視的概念,這個(gè)功能可以讓用戶隨時(shí)了解當(dāng)前誰在修改文件,并且CVS可以自動(dòng)發(fā)送郵件給每一個(gè)監(jiān)視的用戶告知新的更新。

  9. 建立多個(gè)源代碼倉庫
  
  如果需要管理多個(gè)開發(fā)組,而這些開發(fā)組之間不能互相訪問,可以有2個(gè)辦法::
  
  a.共用一個(gè)端口,需要修改cvspserver文件,給server_args指定多個(gè)源代碼路徑,即多個(gè)—allow-root參數(shù)。由于xinetd的 server_args長度有限制,可以在cvspserver文件中把服務(wù)器的設(shè)置重定向到另外一個(gè)文件,如:

   server = /home/cvsroot/cvs.run

  然后創(chuàng)建/home/cvsroot/cvs.run文件,該文件必須可執(zhí)行,內(nèi)容格式為:
  #!/bin/bash /usr/bin/cvs -f --allow-root=/home/cvsroot/src1 --allow-root=/home/cvsroot/src2 pserver
  注意此時(shí)源代碼倉庫不再是/home/cvsroot,進(jìn)行初始化的時(shí)候要分別對這兩個(gè)倉庫路徑進(jìn)行初始化,而不再對/home/cvsroot路徑進(jìn)行初始化。

  b. 采用不同的端口提供服務(wù)

  重復(fù)第2步和第3步,為不同的源代碼倉庫創(chuàng)建不同服務(wù)名的啟動(dòng)腳本,并為這些服務(wù)名指定不同的端口,初始化時(shí)也必須分別進(jìn)行初始化。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd