歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

cvs的配置和使用

[email protected] <安全焦點>   http://www.xfocus.org 2001-02-15     首先要嚴正聲明一下,文章的前一部分很多是拷貝粘貼自Linuxforum裡的帖子,如果有侵犯了你的著作 權,去找quack的律師談談:)     cvs是一種版本控制系統,它不同於一般的版本控制系統,它可以實現版本的並發管理,即可已有多個用 戶同時改動同一個文件而不會互相影響,然後不同的用戶將它們各自修改的文件提交到cvs服務器上,有 cvs來進行文件之間的比較,進而把這些不同的部分按照某種算法進行合並形成一個新的版本。     cvs服務器一般架設在unix系統上,雖然也有可以在Windows上運行的服務器版本,但是其性能表現遠不如 在unix上面表現的好, 但是cvs的客戶端在Windows下卻可以工作的很好。我在這裡講簡單地介紹一下在 Linux下配制cvs服務,以及在Windows下客戶端的設置情況。     首先我們先說一下如何在Linux上設置cvs服務,絕大多數的Linux發行拌種都包含了cvs,如果你的發行版 本中沒有或者你向是用最新的cvs版本,你可以到http://www.cvshome.org去取得最新的服務器版本,這 裡講述的是以1.10版為基礎的, 它應該適合更新的版本.     如果你是從http://www.cvshome.org上的到的.tar.gz形式的源代碼版本,參照源代碼中的相關的說明文 件,安裝指導來編譯程序,然後進行安裝,如果你是用Linux發行版中的cvs包進行安裝,執行相應的包管 理工具。比如在Redhat中你可以是用下面的命令來安裝cvs.   rpm -ivh cvs-1.10.8-3.i386.rpm     在安裝完成後,我們就可以進行相應的配置。一般cvs是用pserver的認證方式作為一種服務在Linux上運 行,先要確定系統裡/etc/services文件有cvs服務的入口,一般得有以下兩行:   cvspserver 2401/tcp # cvs client/server operations   cvspserver 2401/udp # cvs client/server operations     cvs服務是通過inetd或者是xinetd來啟動的。對於inetd,修改/etc/inetd.conf,添加以下的句子:   cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/cvsroot pserver     由於在較新的Linux發行版(如:RedHat7.x)中都是用新xinetd代替了inetd,要用xinetd來啟動cvs服務 你需要進入到/etc/xinetd.d/目錄,然後編輯一個文本文件(名字隨意),這裡是用cvspserver作為文件 名,這個文件的內容如下所示:   service cvspserver   {   socket_type = stream   wait = no   user = root   env = HOME=   server = /usr/bin/cvs   server_args = --allow-root=/cvsroot pserver   }   注意上面的service後面的名稱一定要和你在/etc/service文件中的cvs服務名稱一樣,在server_args行 我們指定了cvs使用pserver認證方式,可能容易產生誤解的是env = HOME=這一行,添加這一行的目的就 是為了解決在執行一些cvs操作時產生的讀取/root/.cvsignore文件的錯誤,上面env那行的意思就是在 運行cvs服務的時候將環境變量HOME置空,這樣雖然執行cvs的用戶是root,但是由於沒有了HOME這個環境 變量,所以cvs就不會在去讀取/root/.cvsignore文件了。     到這裡我們就配置完了cvs的啟動所需要的文件,但是要使cvs正常運行還需要對需要使用cvs的用戶進行 設置,下面是我在配置cvs是使用的方法。首先建立一個用戶組cvs,可以使用groupadd或者addgroup命名 ,也可以直接編輯/etc/group文件添加這個組,然後添加一個用戶cvsroot, 然後修改/etc/passwd文件 使cvsroot用戶的缺省組是cvs組,而不是cvsroot組。建立/cvsroot目錄,然後修改/cvsroot的屬主及屬 性:   #chown cvsroot.cvs /cvsroot   #chmod 755 /cvsroot   (原文這裡是771,但是我們要配置cvsweb.cgi,下面再談)。   對cvs進行初始化:cvs -d /cvsroot init   這樣cvs服務器就可以使用了,用cvs -d :pserver:cvsroot@host:/cvsroot login登陸,輸入cvsroot用 戶在服務器上的口令,沒有出現錯誤提示就表示成功了。     下面講述Windows下客戶端的配置,我只會用wincvs,覺得很不錯,不用記那些繁瑣對命令:)可以從 http://www.cvshome.org找到相應的下載地址,在linuxforum也有下載,3M多一點。啟動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服務了。我開始不知道成功了,還滿大街的問wincvs怎麼了:(   英文好就看wincvs自帶的幫助文擋,我也推薦兩個文檔:)   wincvs.pdf winHtml.zip     特別是這個pdf文檔確實不錯,還是中文的:)       如果你想在網頁裡給大家顯示你的項目,那麼cvsweb是一個不錯的選擇。這是一個perl程序,可以到以下 地址找到最新版:   http://stud.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi   現在的版本是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的問題。




 



Copyright © Linux教程網 All Rights Reserved