23.3. 更新你的 Source

FreeBSD 計劃原始碼有許多透過網路(或 email)的方式來更新, 無論是更新那一塊領域,這些全由您自行決定。 我們主要提供的是 Anonymous CVSCVSupCTM

警告雖然可以只更新部分原始碼,但唯一支援的更新流程是更新整個 tree, 並且重編 userland(比如:由使用者去執行的所有程式,像是 /bin/sbin 內的程式)以及 kernel 原始碼。 若只更新部分的 source tree、或只有 kernel 部分、或只有 userland 部分,通常會造成一些錯誤,像是:編譯錯誤、kernel panic、資料毀損等 。

Anonymous CVSCVSup 均是採 pull 模式來更新原始碼。 以 CVSup 為例, 使用者(或 cron script)會執行 cvsup 程式,後者會與某一台 cvsupd 伺服器作些互動, 以更新相關原始碼檔案。 您所收到更新會是當時最新的, 而且只會收到需更新的部分。 此外,也可以很輕鬆去設定要更新的範圍。 更新會由伺服器跟本機比對之後,丟出當時您所需要的更新檔案給你。 Anonymous CVS 的概念相對於 CVSup 來得更簡單些,因為它只是 CVS 的延伸而已,一樣讓你可從遠端的 CVS repository 取出最新原始碼。 然而 CVSup 在這方面會更有效率,不過 Anonymous CVS 對新手而言,是用起來比較簡單。

另一種方式則是 CTM。 它並不是以交談式介面來比對您所擁有的 sources 和伺服器上的 sources 或是您取得的更新部份。 相反的,會有一個 script 檔專門用來辨識變更過的檔案,這個程式是由 CTM 伺服器來執行, 每天會比對數次,並把兩次執行期間內變更過的檔案加以壓縮, 並給它們一個序號,然後就加以編碼(只用 printable ASCII 字元), 並以 email 的方式寄出。 當您收到它的時候,這些 “CTM deltas” 就可以由 ctm_rmail(1) 程式來處理,該程式會自動解碼、確認、 套用這些變更。 這程序比 CVSup 來說是快得多了, 而且,這個模式對我們的伺服器來說是比較輕鬆的,因為這是一個 push 的模式,而非 pull 的模式。

當然,這樣做也會帶來一些不便。 若不小心把您部份的程式清除掉了, CVSup 會偵測出來,並自動為您把不足的部份補齊。 CTM 並不會為您做這些動作。 若清掉了您的部份 source (而且沒備份),您可以從頭開始(從最新的 CVS “base delta”)並用 CTM 來重建它們 ,或是用 Anonymous CVS 來完成, 只要把不正確的地方砍掉,再重新做同步的動作即可。

本文及其他文件,可由此下載:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。
關於本文件的問題,請洽詢 <doc@FreeBSD.org>。