歡迎您光臨本站 註冊首頁

LINUX作CVS伺服器之二

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
作者:Linuxaid sunmoon


軟體庫的備份與移動

備份軟體庫中的文件和備份其他文件並沒有不同,但你需要一個備份工具開鎖住CVS.這樣,你必須先註冊一個可以讀取軟體庫的用戶,打開CVS軟體庫, 你需要編輯`#cvs.rfl』文件.

當你想用一備份的軟庫,恢復原來的庫時,如果原庫在你備份後作過改動.CVS將報錯.你必須按以下的步驟來

? 得到一個新的工作目錄

? 拷貝上一次提交失敗的文件(,當然不能拷貝CVS的目錄文件)

? 在新目錄下工作,使用cvs update 或cvs diff 等命令指出那些作過改動,在使用cvs commit 將改動保存到軟體庫.

你如果想移動一個軟體庫到其他地方也很簡單.最簡單的方法是將向要移動的目錄創到一個新的目錄中去.如果你想重新使用原來的目錄的話,只能手工修改`CVS/Repository' 和 `CVS/Root',除非你精於此道,否則不建議使用.

4.2 CVS 的遠程用戶管理

作為一個CVS 伺服器,應該滿足兩點.保證軟體庫有足夠大的空間. 其次保證有不小於32M 的內存, 伺服器為每一個連接它的用戶產生兩個進程,在子進程上的花銷較小.但如果網路帶寬不夠,在父進程上的花銷是巨大的.

另外一個大的花銷是diff 文件,當源文件很大時,對他進行驗證或檢測的花銷也很大.

遠程用戶的登錄認證方式

以rsh為例行遠程登錄

Cvs 伺服器使用rsh 允許用戶連接時應該配置.rshosts ,假設在遠程主機tom.exsample.com 上的用戶tom 需要連接到funame.simple.com 這個cvs 伺服器上工作.應該編輯伺服器端的bach 目錄的.rshosts ,在其中加入

Tom.exsample.com tom

客戶端可運行 rsh –l bach funame.simple.com 『 echo @PATH

以確定自己可以連接到CVS 伺服器上,並且客戶應將顯示的這個路徑寫入 .bashrc 或 cshrc (而不是.logiin 或.profile.)



除此之外,客戶端還可以定義環境變數CVS_SEVER.來定義主機的位置. 在伺服器端,修改/etc/ineted.conf文件,來告訴伺服器,在獲得特定埠的連接時,運行cvssever .這個埠號預設值是:2041.當然為了不再每次使用時都要進行設置,可以在用戶端通過定義環境變數CVS_AUTH_PORT來使用.

如客戶端的ineted 允許使用原始調用,只需在/etc/ineted.conf 文件中添加下面的句子即可2401 stream tcp nowait root/usr/local/bin/cvs cvs –f –allow –root=/cvsroot pserver

另外還可以用- T 選項來定義緩衝目錄.

—allow – root 定義了可供用戶使用的軟體庫,如果伺服器上有更多的軟體庫需要重新使用這個句子. 另外,內部用戶可以這樣定義環境變數CVSROOT

:pseve:usr@funam.simple.com:/cvsroot

其中 usr是用戶名(linux系統的)funam.simple.com 是cvs 伺服器,並假設 /cvsroot是軟體庫的目錄名.遠程用戶可用下面的形式:

:etx:psever:usr@funam.silple.com:/cvsroot

:etx: 定義了是遠程用戶,其餘同上.

如果客戶的ineted 採用一般調用,只需在 /etc/seveice 中加入下面這一句:

cvspsever 2401/tcp

重新啟動ineted 使其讀取初始化文件即可.

CVS 對於用戶的管理.在預設狀態下(如用telnet登陸),是和linux 系統使用同樣的用戶名與密碼.即:只要你登陸linux 系統,就擁有$CVSROOT的只讀許可權..當然,對某一軟體的開發者來說必須擁有相對應目錄的讀寫許可權,才能完成源代碼的升級等工作.因此,CVS 也提供了自己的用戶認證體系以更加方便的管理用戶.

在伺服器端的$CVSROOT/CVSROOT 下可以有一個passwd 文件(可以用環境變數CVS_PASSFILE 來定義.)來記錄cvs的用戶信息.他採用的是和linux etc/passwd 同樣的組織形式 .同樣,它的passwold 也是經過linux標準加密方式的.下面是一個passwd 的內容



anyone:

tom:xyzkue

mary:yuio:pubcvs

第一行的意思是,當用anyone 的身份登錄時,不需要任何密碼.即使打入空串也可以.當然在這種方式下你得到的可能只是只讀權.第二行的意思是,tom 登錄時需要敲入passwold.該passworld 加密后是xyzkue.以這種方式登錄后.一般可以獲得較高的許可權.

第三行的意思是,當mary 登錄時需要敲入密碼.進入和系統用戶相同的軟體庫.這樣作的目的是.cvs 將紀錄它的用戶在軟體庫中的所有的動作.定義和系統使用者不同的身份.使用cvs.

例如;使用用戶tom可以用以下的方式登錄:

$cvs –d :etx:tom@funam.simple.com:/cvsroot login

(如果tom 這個用戶名在遠端可內部是相同的,則tom@ 還可以省略)

同時,可以使用cvs loginout 將所有的環境變數撤銷.

使用GASSAPI 接入

CVS 還支持使用 GASSAPI 的TCP 直接接入.在使用安轉之前,需要將CVS 重新編譯以獲得 GASSAPI 的支持.運用 –with –gassapi 來連接,或者用-a 選向來連接.使用GASSAPI 的認證等方式餘地一種方式相同.

但在登錄時.需要重新定義$CVSROOT 如:

$cvs –d :gsever:usr@cvssever.com:/cvsroot login

使用kerberos 直接連接

最簡單的使用rsh 的方法如上說述.這種方法的主要特點是所有數據都通過一個額外的程序.非常費時.如果安裝了kerberos.可以直接用TCP 連接.

同樣CVS 需要重新編譯以獲得keberos的支持可用--with-krb4 來連接.這樣傳輸的數據是沒有加密的.如果要獲得安全.必須在服務端和客戶端都用`--enable-encryption來連接.此時,你應用通用的變數-x來要求加密.

在服務端需要編輯inetd.conf 來運行cvs kserver .客戶端的預設埠號是1999,如果想用其他埠號.需在用戶端定義CVS_CLIENT_PORT

此時的登錄命令應是

cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo



用fork連接

用這方式,可以通過遠程協議連接本地硬碟的軟體庫.換句話說,他能和:local:有相同的功能用這種方式的登錄命令是

cvs -d :fork:/usr/local/cvsroot login

和用:etx:一樣.預設的主機名是cvs

三、cvs伺服器架與應用實例

1.伺服器安裝配置

假設目前有一工作項目,需要用cvs 來管理員碼.這個開發組為內部3人,器ip 分別是:192.168..1.2(用戶名t1),192.168.1.3)(用戶名時t3),193.168.1.3(用戶名t3),遠程用戶一人,其主機是 tom.example.com.(用戶名是tom)

如果你已經安裝了cvs,建立一cvs 主機為 cvs.exam.org的伺服器非常簡單.步驟大致如下:

1.1 以root 身份登錄.建立軟體庫(repository)

$export CVSROOT=/cvsroot

$mkdir /cvsroot

$cd /cvsroot

$cvs init

1.2設置執行許可權

$chmod /cvsroot/CVSROOT 744 (/ccvsroo/CVSOOT設置為只讀)

$chmod /cvsroot 764 組號 (/cvsroot 對開發組可讀寫)

修改文件以利於其他人使用,開發組人員是系統用戶,在這裡用系統的用戶名和password是比較好的.先編輯.rhosts件如下:

tom.example.com. tom

修改伺服器上的 /etc/inetd.conf文件,加入如下的句子

2401 stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/cvsroot pserver

這樣一來,一個基本的cvs 伺服器就建好了.

我們這裡只是提供了一個基本的應用.cvs 真正的細節應用非常複雜.我們這裡只進行一些拋磚引玉的介紹.與興趣的朋友可以細讀它的安裝文檔.

2.應用實例

(使用主機上的cvs 系統,可以telnet 到主機上,然後使用,和本機使用沒什麼差別,本文一直不提)

假設上例中的tom 想使用 cvs 主機上的cvs系統以和大家協作開發.它營配置自己的一些環境變數.編輯/etc/services'加入:



cvspserver 2401/tcp

然後在.profile 文件中加入如下代碼

CVSROOT=:etx:psever:tom@cvs.exam.org:/cvsroot

Export CVSROOT

這樣他便可以使用$cvs login 來登錄了.下面我們便以tom 的具體使用為例子講一下cvs 的應用.和其他linux 命令一樣.cvs 也有大量的參數.我么將在下一節做一個列表.

Tom 在/usr/test 目錄下有如下文件

Ecample.c exampl2.c tes1.c test2.c utimel.c tty.c

如果想在軟體庫建立自己的目錄

$cd /usr/test

~test$ cvs import –m 「tom first creation」 tomdir tom tomwork

N tomdit/example.c

N tomdit/exampl2.c

N tomdir/test1.c

N tomdir/test2.c

N tomdir/utmel.c

N tomdit/tty.c

No conflicts creat by this import
命令說明 import 提交命令 –m 后加描述.tom 發行商 tomwork 是發行標號.如果提示CVSROOT 不對,可以用- -d 加CVSROOT

注:一切cvs 的命令 可以用 cvs command –H 來獲得幫助. 這時伺服器端的/cvs 目錄下多了一個 tomdir 子目錄.內容下:

example.c,v exampl2.c,v test1.c,v test2.c,v tty.c,v utimel.c,v

至此首次提交完成.

這樣便是一不小心刪除了test 目錄也不用擔心.使用如下命令,可從軟體庫中檢出源文件的備份

$/cd usr

`usr$/cvs checkout test tomdir-r 1.1

U test/exsample.c

U test/exampl1.c

U test/test1.c

U test/test2.c

U test/tty.c

U test/ulnem.c

cvs checkout命令預設是得到最新版本.我們也可以得到某一個老版本,此命令是將tomdir的1.1版的代碼取出. 恢復后test 目錄增加了一個CVS 目錄是用來管理的,以便在你下一次提交或修改的時候,和伺服器上的管理文件相介面,保證版本好.這個例子非常小,現實中工程非常可能文件非常多,這樣可以先恢復 CVSROOT 的模塊

~usr/$cvs checkout CVSROOT/mouldes



~/usr/$vi CVSROOT/mouldes 編輯模塊名,如我們在文件尾加上

src project/src

print project/src/print

cvs commit

以後我們就可以用cvs checkout print來代替

cvs checkout project/src/print

編輯完后即可以提交文件

~usr/$cvs commit –m 「edit of mouldes name」 CVSROOT/mould除了可以恢復整個目錄后也可以恢復單個文件或模塊

~usr/test/$cvs checkout –m 「newer file 「 tty.c

在恢復了文件以後, tom 便可以使用各種編輯器,對源文件進行修改,修改完成以後就可以提交它的工作成果了

~/usr/cvs commit test tomdir.

這樣,tom 便完成了一次源文件的升級.其他的同理可得


[火星人 ] LINUX作CVS伺服器之二已經有486次圍觀

http://coctec.com/docs/linux/show-post-56415.html