Tuesday, August 16, 2005

Redhat7.0下CVS server 及webcvs配置

Redhat7.0下CVS server 及webcvs配置
文章屬性:整理
文章來源:個人實踐及linxforum.net的貼子

配置CVS server,,其中引用其他作者的文字我用[/c&v]... [c&v/]指出了

我的系統為Redhat 7.0,運行Apache

1.CVS Server配置

RHLinux# mount /mnt/cdrom (如果不好用的話,你可以試一下mount -t iso9669 /dev/cdrom /mnt/cdrom)

RHLinux# cd /mnt/cdrom/Redhat/RPM (不用解釋了吧)

RHLinux# rpm -ivh cvs-1.10.8.8.i386.rpm (安裝cvs,你可以用rpm -qpl ...看安裝的詳細資訊)

RHLinux# vi /etc/service
(應該有
cvspserver 2401/tcp # cvs client/server operations
cvspserver 2401/udp # cvs client/server operations
這兩行)



要使cvs正常運行還需要對需要使用cvs的用戶進行設置,下面是我在
配置cvs使用的方法。首先建立一個用戶組cvs,可以使用groupadd或者
addgroup命名,也可以直接編輯/etc/group檔添加這個組,然後添加
一個用戶cvsroot, 然後修改/etc/passwd檔使cvsroot用戶組
是cvs組,而不是cvsroot組。建立/cvsroot目錄,然後修改/home/cvsroot的
屬主及屬性[c&v/])
RHLinux# groupadd cvs
RHLinux# adduser cvsroot
RHLinux# passwd cvsroot

修改/cvsroot的屬主及屬性
RHLinux# chown cvsroot.cvs /home/cvsroot
RHLinux# chmod 755 /home/cvsroot(原本應該是771,但是我們要配置cvsweb.cgi,下面再談)。

---------------------------------------------------------------------------------------------------
RHLinux# cd /etc/xinetd.d

RHLinux# vi cvspserver(創建一個新檔,檔案名隨意,注釋為檔內容)
/*********************分隔線***************************


Multi-User

指定一個群組給需要使用 cvs 的使用者, 假設為該群組叫 cvs
groupadd cvs
10.將要使用 cvs 的使用者加入該群組, 編輯 /etc/group 或使用 userconf
cvs:x:GID:user1,user2,user3
11.將 CVSROOT 設為該群組, 讓使用者能新增專案
chgrp -R cvs /home/cvs
chmod ug+rwx /home/cvs/CVSROOT

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


# (service後面的名稱一定要和你在/etc/service檔中的cvs服務名稱
# 一樣,但是我不知道/etc/service檔中的cvs服務名稱可以改否,rpm
# 方式安裝完後,那兩行就在那了)

# (multi: --allow-root )
service cvspserver

{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = --allow-root=/home/cvsroot --allow-root=/backb pserver
log_on_failure += USERID
}


**************分隔線**********************************/

RHLinux# cvs -d /home/cvsroot init
(對cvs進行初始化,你會發現/home/cvsroot下多了一個CVSROOT的子目錄)

RHLinux# /etc/init.d/xinetd restart (重新啟動xinetd)
cvs -d :pserver:cvsroot@host:/home/cvsroot login
(輸入cvsroot用戶在伺服器上的口令,沒有出現錯誤提示就表示成功了.)

(如果cvspserver成功起動後,netstat -l | grep tcp應能看到以下行:
tcp 0 0 *:cvspserver *:* LISTEN)






2.WinCvs(Windows下用戶端的配置):
[/c&v] 啟動wincvs在Admin功能表中選擇preferences然後在global頁中設置CVSROOT,就是

:pserver:cvsroot@host:/cvsroot。在認證方式中選擇passwd file on the cvs server,
在下面的版本號中選擇合適的版本,執行Admin功能表中的login,在提示框輸入口令,如果
Output視窗出現以下提示:
*****CVS exited normally with code 0*****
就表示我們現在可以在Windows下使用cvs服務了。[c&v/]



如何使用wincvs把自己的專案加到cvs中去

1) Make sure that all the source files you want to check into CVS are on one directory (or

subdirectories). This directory (folder) should NOT contain anything else! That is, it should not

contain executables, object files (.o), class files (.class), etc. It should only contain the

source files.

1) 確認你想加入的原始檔案全部在一個目錄下。這個目錄僅僅應當包含原始檔案,不應該有其他任何的可執行體、
*.O,*.class....等類型的文件
2) 在wincvs "Modules"窗口中包含你的原始檔案的目錄被選中
3) 在功能表"Create" ->"Import Module"選擇目錄,把它導入CVS
4) 重命名你的目錄
5) 其他相關的內容請看wincvs文檔

cvsweb配置

[/c&v]cvsweb是一個perl程式,現在的版本是1.93,記得要用新版,1.8以下有一個小小的漏洞,可以到綠盟查

一查。
由於是cgi程式,是以nobody用戶執行的,所以/cvsroot的屬性要設成775。開始我按章照搬,把屬性改成
771,結果專案的目錄就是不出來,埋葬了半天的青春:(還有記得把/cvsroot/CVSROOT/history的屬性
改成666。cvsweb.conf裏%CVSROOT陣列的Configuration設成/cvsroot,就是cvs倉庫的路徑不要那個長長
CVSROOT變數。這些其實在它的說明文檔和程式注釋裏都講到了,只是這個世界是懶人的世界:)

一切都陽春白雪,可以埋頭寫程式了?只是cvs還有一個小小的DoS漏洞要跟大家說一下:(
每個cvs的操作過程會以操作用戶的身份在/tmp下臨時建一個鎖定了的目錄cvs_servPID,這時如果有人建
了大量的同類檔就會使cvs的操作出錯,會提示:
cannot change permissions on temporary directory
Operation not permitted
下面是測試的perl程式:
#!/usr/bin/perl
#$min和$max的值根據實際情況修改
$min=400;
$max=4000;
for ($x=$min;$x<=$max;$x++) {
open CVSTMP, ">>/tmp/cvs-serv$x" or die "/tmp/cvs-serv$x: $!";
chmod 0600, "/tmp/cvs-serv$x";
close CVSTMP;
}

解決方法:
使用server.c中的mktemp(3)函數或者其他任何可以產生唯一檔案名的方法。在/tmp/目錄所在的分區使
用空間配額也能解決部分問題。 主要還是紮緊籬笆,莫讓別人闖進來,這畢竟是一個local的問題。
[c&v/]

RHLinux# rpm -ivh cvsweb-1.79-3.noarch.rpm(顧不了那麼多了,饑不擇食嘛)

RHLinux# cp /home/httpd/cvsweb.cgi /var/www/cgi-bin

RHLinux# cd /etc/httpd/conf
RHLinux# vi cvsweb.conf
/************************************************************************
找到%CVSROOT項
更改其子項 'Configuration'=>'/home/cvsroot',
*************************************************************************/
在流覽器中敲入http://RHLinux/cgi-bin/cvsweb.cgi如果出現CVS Repository頁面也不要高興的太早
繼續進入下一級頁面,如果出錯,那麼
RHLinux# rlog (如果shell提示沒有這個命令的話,找這個檔rcs-xx.-xx.i386.rpm)

RHLinux# rpm -ivh rcs.........

(OK了嗎?沒有?那你自己再找找原因吧,我沒碰到過這種問題)