CVS服務器設置指南

我整理的這篇文章大部分內容是我在Red Hat Linux 8.0和9.0上驗證過的,希望對你有幫助。 服務器的安裝略過不提,因爲安裝了開發工具的話默認就已經有了CVS。就算沒有,更新軟件包就可以搞定,除非你一定要安裝最新版本。 1. 首先創建用於CVS的組和用戶:

      #groupadd 
      cvs
      #useradd 
      cvsroot -g cvs
      #passwd 
      cvsroot

OK,用戶已經建立好了,cvsroot就是我們做CVS操作使用的。

2. 修改配置文件:

      #more 
      /etc/services | grep cvspserver

看看是否有:

      cvspserver 
      2401/tcp #CVS client/server operations
      cvspserver 
      2401/udp #CVS client/server operations

這2行。系統自帶了CVS時,這2行也已經有了,只需要確認一下。如果沒有,請自己加上去。然後必須創建啓動腳本:

      #vi 
      /etc/xinet.d/cvspserver

內容如下:

      service 
      cvspserver
      {
      disable 
      = no
      flags 
      = REUSE
      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
      }

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

3. 初始化CVS

切換到cvsroot用戶,然後進行初始化:

      #cvs 
      -d /home/cvsroot init

這個路徑應該與cvspserver文件中指定的路徑相同,初始化後會在此路徑下面創建CVSROOT目錄,存放用於CVS管理的一些文件。此時重新啓動xinetd服務,CVS服務器應該能夠啓動了。:

      #service 
      xinetd restart

當然,重新啓動計算機也可以。確認是否啓動:

      #netstat 
      -l | grep cvspserver

如果能看到:

      tcp 
      0 0 *::cvspserver *::* LISTEN

說明已經正常啓動,沒有的話請重新檢查配置過程是否有錯誤或者遺漏。最後還必須檢查防火牆的設置,把2401端口打開。

4. 用戶管理

CVS默認使用系統用戶登錄,爲了系統安全性的考慮也可以使用獨立的用戶管理。CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中,格式爲:

      用戶名::密碼::系統用戶

也就是說,它把CVS用戶映射到系統用戶,這樣我們就可以通過系統用戶的權限設置來分配給用戶不同的權限,而不需要讓用戶知道系統用戶名和密碼。 passwd文件默認並不存在,我們必須自己創建。文件中的密碼字段使用MD5加密,不幸的是CVS沒有提供添加用戶名的命令,所以我們借用Apache的命令來完成這項工作:

      #htpasswd 
      passwd username

這個命令爲username指定密碼,並保存在passwd中,文件不存在時會自動創建。htpasswd命令不是爲CVS而設,因此總有一些遺憾,它不能自動添加映射到的用戶名,不過沒關係,我們設置好密碼後,自己把這部分加上。我的做法是映射到cvsroot用戶,如果需要映射其他的用戶,請注意給相應的目錄設置好權限,否則CVS用戶可能無法訪問源代碼倉庫。要徹底防止使用系統帳號登陸,可以編輯CVSROOT目錄下的config文件,把:

      #SystemAuth=no

這一行前面的#去掉,CVS就不會驗證系統用戶了,否則當用戶名不在passwd文件中時,CVS會進行系統用戶的驗證。此外還必須配置讀寫權限,使用CVSROOT目錄下的readers和writers文件進行這個工作。這2個文件默認也是沒有的,沒關係,自己創建就可以了。readers文件記錄擁有隻讀權限的用戶名,每行一個用戶;writers文件記錄擁有讀寫權限的用戶名,也是每行一個用戶。注意, readers文件比writers優先,也就是說出現在readers中的用戶將會是隻讀的,不管writers文件中是否存在該用戶。配置完畢,先測試一下:

      #cvs 
      -d “::pserver::[email protected]::/home/cvsroot” login

這裏假設用戶名是username,本機登陸。出現密碼提示,輸入正確的密碼後,登陸成功。如果提示訪問被拒絕,請檢查用戶權限、目錄權限以及防火牆設置。建議設置環境變量CVSROOT:

      #export 
      CVSROOT=::pserver::[email protected]::/home/cvsroot

以後就不需要輸入-d參數了,但-d參數會覆蓋這個環境變量的設置。

5. 源代碼倉庫的備份和移動

基本上,CVS的源代碼倉庫沒有什麼特別之處,完全可以用文件備份的方式進行備份。需要注意的只是,應該確認備份的過程中沒有用戶提交修改,具體的做法可以是停止CVS服務器或者使用鎖等等。恢復時只需要把這些文件按原來的目錄結構存放好,因爲CVS的每一個模塊都是單獨的一個目錄,與其他模塊和目錄沒有任何瓜葛,相當方便。甚至只需要在倉庫中刪除一個目錄或者文件,便可以刪除該模塊的一些內容,不過並不建議這麼做,使用CVS的刪除功能將會有一個歷史記錄,而對倉庫的直接刪除不留任何痕跡,這對項目管理是不利的。移動倉庫與備份相似,只需要把該模塊的目錄移動到新的路徑,便可以使用了。如果不幸在備份之後有過一些修改並且執行了提交,當服務器出現問題需要恢復源代碼倉庫時,開發者提交新的修改就會出現版本不一致的錯誤。此時只需要把 CVS相關的目錄和文件刪除,即可把新的修改提交。

6. 更進一步的管理

CVSROOT目錄下還有很多其他功能,其中最重要的就是modules文件。這個文件定義了源代碼庫的模塊,下面是一個例子:

      Linux    
      Linux
      Kernel   
      Linux/kernel

這個文件的內容按行排列,每一行定義一個模塊,首先是模塊名,然後是模塊路徑,這是相對於CVS根目錄的路徑。它定義了兩個模塊,第一個是Linux模塊,它位於Linux目錄中,第二個是Kernel模塊,這是Linux模塊的子模塊。 modules文件並非必須的,它的作用相當於一個索引,部分CVS客戶端軟件通過它可以快速找到相應的模塊,比如WinCVS。

7. 協同開發的問題

默認方式下,CVS允許多個用戶編輯同一個文件,這對一個協作良好的團隊來說不會有什麼問題,因爲多個開發者同時修改同一個文件的同一部分是不正常的,這在項目管理中就應該避免,出現這種情況說明項目組內部沒有統一意見。而多個開發者修改文件的不同部分,CVS可以很好的管理。如果覺得這種方式難以控制,CVS也提供瞭解決辦法,可以使用cvs admin -l進行鎖定,這樣一個開發者正在做修改時CVS就不會允許其他用戶checkout。這裏順便說明一下文件格式的問題,對於文本格式,CVS可以進行歷史記錄比較、版本合併等工作,而二進制文件不支持這個操作,比如word文檔、圖片等就應該以二進制方式提交。對於二進制方式,由於無法進行合併,在無法保證只有一個用戶修改文件的情況下,建議使用加鎖方式進行修改。必須注意的是,修改完畢記得解鎖。從1.6版本開始,CVS引入了監視的概念,這個功能可以讓用戶隨時瞭解當前誰在修改文件,並且CVS可以自動發送郵件給每一個監視的用戶告知最新的更新。

8. 建立多個源代碼倉庫

如果需要管理多個開發組,而這些開發組之間不能互相訪問,可以有2個辦法::

a.共用一個端口,需要修改cvspserver文件,給server_args指定多個源代碼路徑,即多個—allow-root參數。由於xinetd的 server_args長度有限制,可以在cvspserver文件中把服務器的設置重定向到另外一個文件,如:

      server 
      = /home/cvsroot/cvs.run

然後創建/home/cvsroot/cvs.run文件,該文件必須可執行,內容格式爲:

      #!/bin/bash
      /usr/bin/cvs 
      -f 
      --allow-root=/home/cvsroot/src1 
      --allow-root=/home/cvsroot/src2 
      pserver

注意此時源代碼倉庫不再是/home/cvsroot,進行初始化的時候要分別對這兩個倉庫路徑進行初始化,而不再對/home/cvsroot路徑進行初始化。

b. 採用不同的端口提供服務

重複第2步和第3步,爲不同的源代碼倉庫創建不同服務名的啓動腳本,併爲這些服務名指定不同的端口,初始化時也必須分別進行初始化。

http://www.linuxfans.org/nuke/modules.php?name=News&file=print&sid=2519

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