天天看點

ports/packages安裝備注

加速措施很多。

強烈推薦方法:

其中一個就是設定下載下傳的站點優先于 Makefile 中的站點。

通過系統工具安裝 perl 時會 /etc/make.conf 往裡邊加東西,它的妙用還很多。

建立 /etc/make.conf 就是了。

另外,還可以更改下載下傳軟體。

pkg_add -r axel

安裝稍快一些的 axel 下載下傳軟體。

然後把以下内容加到 /etc/make.conf 中,作用是覆寫 fetch 下載下傳軟體,優先選用我給出的3個站點。

FETCH_CMD = axel

DISABLE_SIZE = yes

MASTER_SITE_OVERRIDE ?= /

http://ports.hshh.org/${DIST_SUBDIR}/ /

ftp://ftp2.tsinghua.edu.cn/mirror/FreeBSD/distfiles/${DIST_SUBDIR}/ /

ftp://ftp.freeBSDchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/

MASTER_SITE_OVERRIDE ?= {MASTER_SITE_BACKUP}

方法二:

手工下載下傳安裝包及元件放置:

ports:/usr/ports/distfiles/

packages:/var/db/pkg

如何确定某個安裝包需要哪些元件,可參考:

http://www.freebsd.org/ports/index.html

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. 我照上面說的方法從CD光牒編譯port 都很順,怎麼一安裝kermit 就出錯?

# make install

>> cku190.tar.gz doesn’t seem to exist on this system.

>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.

為什麼找不到,難道這張CD光牒沒有用?

就像在從CD光牒編譯ports 那節所解釋的,有些port 因為授權的限制不能放進CD光牒。Kermit

就是個例子。Kermit 的授權不允許把它做的tarball 放進CD光牒,是以必須自己動手下載下傳

------真是抱歉!

會有這些錯誤資訊是因為當時沒有連上網絡。隻要從MASTER_SITES (列在Makefile 裡)中

所列的任一個網站把檔案下載下傳下來,就可以重新開始安裝的步驟了。

4.5.1.8. 我照做了,可是當要把檔案放進/usr/ports/distfiles 時卻得到沒有許可的錯誤

資訊。

Port 的機制是到/usr/ports/distfiles 中找tarball,可是因為它是符号連接配接(symlink)

到CD光牒的,是以那個目錄隻讀而且也沒有辦法複制任何東西進去。用下面說的方法就可以讓

它去找其它地方:

第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 的CD光牒,不過我想要把所有的tarball 放在手邊,這樣就不用

每次裝一個port 就要等待下載下傳。有什麼好方法可以一次全下載下傳下來嗎?

要得到ports collection 每個tarball 的話,執行:

# cd /usr/ports

# make fetch

4.5.1.11. 我知道從臨近的FreeBSD mirror 站下載下傳比較快。可是有辦法從其它

MASTER_SITES 上面沒有的站下載下傳port 嗎?

可以。如果知道的話,例如ftp.FreeBSD.org 比MASTER_SITES 上面列的任何站都近,

那就這麼做:

# cd /usr/ports/directory

# make

MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/

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 更新時,一些問題可能會被修複。

4. 可以從你附近的ftp 站點上下載下傳一些更新包。主力站點是ftp.freebsd.org,在它的

Packages directory 中有很多“主要的”軟體包。但你最好先檢查一下當地的鏡象站

點!因為這樣工作起來可能要快一點。使用pkg_add 程式将這些軟體包安裝到你的系統。

繼續閱讀