新浪網

  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(62):升級系統
 


FreeBSD連載(62):升級系統

http://www.sina.com.cn 2000年1月3日 13:55 王波

升級系統

  通過CD-Rom或Internet能夠很方便的獲得FreeBSD的新版本,由于每一次版本升級都修正了原 有版本中存在的問題,并增加了一些新特性。因此保持系統與最新版本相一致是十分有益的事情。

  升級內核的最直接想法是直接編譯新內核,可以將新版本的內核展開到系統中的目錄中,然后按照前面的步驟編譯安 裝新內核。這個方法在同一版本分支中作子版本的升級十分方便,例如從FreeBSD 2.2.7release升級到 2.2.8release。如果要從2.2.x版本升級到3.x版本,由于升級了主版本號,基本系統有了較大改動,因 此不僅要升級內核,還需要升級系統中的應用程序。此時一般應使用sysinstall中的Upgrade選項進行升級 。

  • 使用源碼升級系統

  除了使用sysinstall直接升級之外,另一種升級方法是從系統的源代碼中升級系統。這要安裝要 升級版本的全部源碼,從而能重新編譯整個系統,包括系統內核和各個應用程序。可以通過下面的辦法 手工安裝系統源碼。

# cd /cdrom/src
# ./install.sh

  重新編譯整個系統是一個漫長的時間,根據使用的系統硬件不同,將需要几個小時的時間或更長 時間來完成這個任務。這個編譯命令被稱為 “make world” ,表示重新編譯構建整個FreeBSD系統。

# cd /usr/src
# make world

  如果是從2.2版本或3.0-release升級到3.1-stable,那么直接這樣make world會遇到問題。主要 原因是3.0-stable之后,系統的執行文件格式從原有的a.out轉向了ELF(3.0-release的執行文件雖然是 ELF格式的,但其內核還保持a.out格式)。make world就提示用戶使用make upgrade進行升級,因此使 用者就應該按照make world的提示進行操作:

# make upgrade

  其他的make目標有:

  buildworld:編譯所有的源代碼﹔

  installworld:安裝buildworld編譯產生的結果﹔

  world:執行buildworld和installworld,重新編譯安裝整個系統﹔

  aout-to-elf-build:編譯從aout到elf升級系統所需的源代碼﹔

  aout-to-elf-install:在aout-to-elf-build的基礎上升級系統﹔

  aout-to-elf:依賴于aout-to-elf-build和aout-to-elf-install,進行a.out系統到elf系統的升級轉換﹔

  update:進行系統升級,對于3.1-stable來講即包括aout-to-elf﹔

  reinstall:在以前已經編譯好的基礎上,不重新編譯而再次安裝編譯產生的結果﹔

  當使用源代碼的方式重新編譯系統時,由于需要使用編譯工具和這些工具的缺省設置,這些工具就需要預先更新。編 譯工具一般不需要升級,但編譯工具的設置常常需要更新。當更新所有的源代碼時,就不存在這個問題,但如果只是更新部分 源代碼,就會出現這個問題。如果不打算更新所有的源代碼,可以通過預安裝的一個很小的系統升級軟件包來解決編譯工具設 置更新問題。例如需要更新Ports Collectin,但不打算更新全部源代碼(從3.1-release升級到 3.1-stable),就需要安裝31Upgrade.tgz。

  • 使用CVSup維護系統源碼

  FreeBSD的源代碼可以從安裝介質上或從網絡上下載得到。然而FreeBSD的開發是非常活躍的,系統更 新速度相當迅速,只有通過網絡更新,才能保持源代碼和其他FreeBSD使用者和開發者一致。但如果每次系統更新都從 網絡下載全部源代碼,不僅浪費了網絡帶寬,而且也沒有必要,因為系統中的絕大部分代碼并不會更新,每次系統升級更新的 只是其中很小的一部分。FreeBSD的全部源代碼相當大,尤其對于慢速Internet連接的使用者,下載一次并不 是一件簡單的任務。所以需要一種方法,使用戶每次都只需要下載源代碼的更改部分。

  軟件開發中的版本維護工具是一種維護同一個軟件的不同版本的方法,程序員可以通過這個工具同時維護不同的軟件 版本。但雖然版本維護工具同時維護多個版本,但并不是將這些版本都獨立保存一份,而只是保存一個基本版本及其他版本與 它的差異。因此,基于這種版本維護工具的方式,FreeBSD就提供了更新部分源代碼的方法,使得用戶每次只需要下載 更改過數據,這樣使用者就能通過Internet與FreeBSD源代碼樹保持一致,保持最新版本的源代碼,并節約了 網絡帶寬。

  為了維護FreeBSD的源代碼樹,需要一個版本控制軟件包CVSup和用于維護源代碼的300M硬盤空間。

  FreeBSD的所有源代碼本來就是通過CVS(Concurrent Versions System)版 本維護系統進行維護的,所有的使用者都能讀取同樣的源代碼,但只有FreeBSD的開發者能夠更改這些源代碼,這樣就 保持了FreeBSD源代碼的一致性。

  為了使用CVSup,首先要安裝這個應用軟件。這個軟件被收錄在Packages Collection中, 因此安裝非常容易。可以使用pkg_add來完成這個任務:

# pkg_add cvsup-bin-16.0.tar.gz

  安裝好CVSup軟件之后,下一步就是配置一個配置文件,告訴cvsup從哪個服務器上同步源代碼樹, 以及同步哪些源代碼。在安裝CVSup的時候,還將安裝cvsup的配置文件例子到/usr/share/examples/cvsup 目錄下。

$ ls /usr/share/examples/cvsup
README           ports-supfile           secure-supfile
cvs-supfile      secure-cvs-supfile      stable-supfile
gnats-supfile    secure-stable-supfile   standard-supfile

  這個目錄下的每個文件都用于一個特定目的,用來同步某個源代碼樹。其中standard-supfile用于 同步FreeBSD -current分支的源代碼樹,stable-supfile用于同步FreeBSD -stable分支的源代碼樹, ports-supfile用于同步Ports Collection的源代碼,等等。通常這些例子文件中需要修改的只是需要連接 的cvsup服務器的名字,例如一個用于同步3.1-stable的配置文件supfile如下,這個文件是根據stable-supfile 生成的,僅僅修改了host的設置,以指向正確的主機。

*tag=RELENG_3_1
*default host=cvsup.FreeBSD.org
*default prefix=/usr
*default base=/usr/src/cvsup
*default release=cvs delete use-rel-suffix compress
src-all

  配置文件中使用tag的值用來標識要同步的不同源代碼樹。FreeBSD有多個版本,可以根據使用者的選擇來 獲得不同的版本的源代碼。最常用的源代碼是 -current分支的源代碼和-stable分支的源代碼,通常對于- current分支的源代碼,需要設定 “tag=.” ,而stable分支就要指定版本號,這里為RELENG_ 3_1(或者使用RELENG_3表示3.x分支中的最新版本)。

  host的值用于指明用于同步源代碼的服務器的名字,出于速度的考慮,最好使用離用戶最近的CVSup服務器 。

  base指明用于放置cvsup的狀態文件的目錄,prefix指明用于放最終的源代碼文件的目錄。由于最終 的源代碼和cvsup均要占用大量的磁盤空間,因此需要注意為其留下足夠的空間。

  release指明源代碼樹是使用cvs進行版本維護的,后面為從服務器上傳輸源代碼及處理本地文件時使用的 參數。

  src-all用于同步所有的源代碼,為了節約磁盤空間和同步時間,可以只同步部分源代碼。配置文件中給出了 同步部分源代碼的配置情況,但被注釋了。需要使用#符號將src-all注釋掉,指明其他要同步的源代碼,如port s-all。

  如果這個配置文件名為stable-supfile,那么就能使用下列命令啟動cvsup:

# cvsup -L2 stable-supfile

  參數-L2標識使用第2級記錄方式在屏幕上打印出cvsup同步源代碼的同步過程,如果系統位于防火牆內, 會需要-P m參數以使用被動方式越過防火牆。

# cvsup -P m stable-supfile

  cvsup可以在X Window下運行,此時它使用圖形界面。

  通常對于不太經常更新系統的管理員來講,手工啟動cvsup來更新系統源代碼就夠用了,如果要經常更新 源代碼,就需要將cvsup命令放入crontab中執行。

  除了cvsup,FreeBSD也可以通過Email來提供源代碼同步,這種方式稱為CTM,與cvsup不同在于,cvsup 必須由本地系統啟動以從遠端下載,CTM是由遠端服務器發送回來的。CTM對于網絡連接比較慢,或只能通過Email 訪問Internet的系統最方便,對于與Internet直接相連的系統,一般不需要使用CTM。

  由于使用了cvsup,所有的FreeBSD用戶和開發者都能訪問同一個源代碼樹,這樣就維護了系統的一致性, 就使得只存在一個單一的FreeBSD系統,不致造成不同的版本混亂。

未完,待續。。。  



 
  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(62):升級系統


網站簡介 | 網站導航 | 廣告服務 | 中文閱讀 | 聯系方式 | 招聘信息 | 幫助信息

Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved

版權所有  四通利方 新浪網