FreeBSD的Packages和Ports絕對是一種完美的應用程序的安裝和配置及反安裝的解決方案,可以說完全可以同RedHat的RPM方案相比,只不過RPM的商業運做比較成功罷了。
下面是FreeBSD HandBook中文版裡面的一些技巧,供大家參考。
4.5.安裝中出現的問題
4.5.1. 一些問題與解答
4.5.1.1.我認為應該作一個有關modem 的討論?
哦,你必須想到你電腦的串口。我們使用串口從一個Unix 系統到另一個系統傳送程序。
4.5.1.2.應該用package 來安裝額外的程序?
是的,通常這是最快速、最簡單的方法。
4.5.1.3.為什麼用port 來煩人呢?
幾個原因:
1,一些軟件的發布許可可能不允許采用二進制的方式分發。它們必須采用源代碼的方
式分發。
2,一些人不信任二進制分發。至少帶上源代碼,你可以自己閱讀,尋找可能存在的問
題。
3,如果你有本地的補丁,那你可能在打補丁的時候需要源代碼。
4,你可能在程序的編譯方式上與做這些程序的人有不同的看法。無論是建構調試版,
還是把它們分開,一些人喜歡采用最優化的設置來編譯以達到最強大。通常發布的
軟件包在設置方面都是比較保守的。如果port 對一個特殊的處理器在使用代碼上有
一個編譯選項,或是需要支持一個額外的設備,你可能需要親自對這個port 進行編
譯,不需要為提供每一個額外的支持而生成許多不同的軟件包。有很多這樣的例子。
如果一個軟件包可能對一些特殊尺寸的紙張提供了默認的支持,那我們就要提供多
種軟件包,每一種對應一種尺寸的紙張。
5,一些人喜歡圍著代碼轉。如果它們覺得無聊,或想攻克它,或想從中學點東西,諸
如此類的,它們可能會去讀它。
6, 如果你不能得到源代碼,那它就不是軟件了。
4.5.1.4. 什麼是補丁?
一個補丁(patch)是一個小文件,主要描述文件如何從一個版本升級到另一個版本。
第12 頁FreeBSD 使用手冊
它一般是純文本的,基本上說是些象“delete line 23”,“add these two lines after line
468”,或“change line 197 to this ”這樣的東西。它們以diff 聞名,因為它們是由diff
這個程序產生。
4.3.1.5. tarball 是指什麼?
它就是以.tar 結尾的文件,或者是諸如以.tar.gz,.tar.Z,.tar.bz2,.tgz 結尾的文件。
基本上,它是一個已經被打包或壓縮的目錄樹。這種技術最早被用於磁帶機上,但後來它被
廣泛運用於互聯網上用來發布程序源代碼。你可以看到在它裡面有些什麼文件,甚至你可以
親自使用標准的UNIX tar 程序解開它們,只要這樣做:
% tar tvzf foobar.tar.gz
% tar xzvf foobar.tar.gz
% tar tvf foobar.tar
% tar xvf foobar.tar
4.5.1.6. 那checksum 呢?
這是一個由統計檢查文件裡所有資料而產生的數字。如果有任何字符改變了,那
checksum 就不會再跟統計的結果一樣,所以經過簡單的比較就可以看出差異。
4.5.1.7. 我照上面說的方法從光盤編譯port 都很順,怎麼一安裝kermit 就出錯?
# make install
>> cku190.tar.gz doesn’t seem to exist on this system.
為什麼找不到,難道這張光盤沒有用?
就像在從光盤編譯ports 那節所解釋的,有些port 因為授權的限制不能放進光盤。Kermit
就是個例子。Kermit 的授權不允許把它做的tarball 放進光盤,所以必須自己動手下載
------真是抱歉!
會有這些錯誤信息是因為當時沒有連上網絡。只要從MASTER_SITES (列在Makefile 裡)中
所列的任一個網站把文件下載下來,就可以重新開始安裝的步驟了。
4.5.1.8. 我照做了,可是當要把文件放進/usr/ports/distfiles 時卻得到沒有許可的錯誤
信息。
Port 的機制是到/usr/ports/distfiles 中找tarball,可是因為它是符號連接(symlink)
到光盤的,所以那個目錄只讀而且也沒有辦法復制任何東西進去。用下面說的方法就可以讓
它去找其它地方:
第13 頁FreeBSD 使用手冊
# make DISTDIR=/where/you/put/it install
4.5.1.9. Ports 的設計是只有把所有東西都放在/usr/ports 下才能用嗎?系統管理員說要
把所有東西都放在/u/people/guests/wurzburger 下,不過這樣好象不能用。
可以用PORTSDIR 和PREFIX 這兩個變量來告訴port 用別的目錄。例如,
# make PORTSDIR=/u/people/guests/wurzburger/ports install
會在/u/people/guests/wurzburger/ports 裡編譯port 並把所有東西安裝在/usr/local 下。
# make PREFIX=/u/people/guests/wurzburger/local install
會在/usr/ports 裡編譯port 並安裝至/u/people/guests/wurzburger/local。毫無疑問的,
# make PORTSDIR=.../ports PREFIX=.../local install
會結合這兩種(要在這頁完整的寫出來太長了,不過它應該給你點概要了)。如果不想每次安
裝一個port 就要把這些字再打一次,把這設置放到環境變量裡會是個好主意。讀讀shell
的聯機手冊來獲得做這些事的指導。
4.5.1.10. 我沒有FreeBSD 的光盤,不過我想要把所有的tarball 放在手邊,這樣就不用
每次裝一個port 就要等待下載。有什麼好方法可以一次全下載下來嗎?
要得到ports collection 每個tarball 的話,執行:
# cd /usr/ports
# make fetch
4.5.1.11. 我知道從臨近的FreeBSD mirror 站下載比較快。可是有辦法從其它
MASTER_SITES 上面沒有的站下載port 嗎?
那就這麼做:
# cd /usr/ports/directory
# make
fetch
4.5.1.12. 要怎樣在make 去下載文件前先知道所需的文件?
make fetch-list 會列出一個port 所需的文件。
4.5.1.13. 有辦法在port 編譯前停止嗎?我想在它安裝前hack 一下程序代碼,不過每次
都要邊看邊按control-C 很討厭。
用make extract 會在源代碼下載完並解開後停止。
第14 頁FreeBSD 使用手冊
4.5.2. 幫助!Port 損壞了
如果你遇到port 不能用了,可以這樣做:
1. 修復它!在“如何編譯一個port”那一節能幫助你這樣做。
2. 遇到困難時,可以通過email 尋求幫助!只需要發一封email 給port 的維護者。輸入
make maintainer 或讀一下Makefile 文件找到維護者的email 地址。記住要包括這個
port 的名稱和port 的版本,還有遇到的錯誤。如果你沒有得到維護者的回復,你可能
要使用send-pr 命令提交一個bug 報告。
3. 忘掉它吧!這是一個最好的解決辦法,很少的ports 能被分為“不可或缺的”。有時當
一個port 升級時,一些問題可能會被修復。
Packages directory 中有很多“主要的”軟件包。但你最好先檢查一下當地的鏡象站
點!因為這樣工作起來可能要快一點。使用pkg_add 程序將這些軟件包安裝到你的系統。