下面的章節提供了一些基本的指引,指導使用 ports collection 來從系統安裝或移除程式。
當提到 Ports collection 第一個要說明的就是何謂 ``skeleton''。 簡而言之,一個 port skeleton 是讓一個程式在 FreeBSD 上簡潔地編譯並安裝所需的檔案的最小組合,每個 port skeleton 包含:
一個 Makefile。Makefile 包含多種敘述,這些敘述指示一個應用程式在系統上應如何編譯和安裝到何處。
一個 files 目錄。目錄 files 包含一個名為 md5 的檔案。這個檔案是以用來決定 port checksum 的 MD5 演算法命名。 Checksum 是一個由合計所要檢查的檔案資料所產生的數字。 如果任何字母改變了,checksum 就會和原本的不同並顯示錯誤訊息, 如此一來便可以調查哪邊改變了。
目錄 files 也可以有其它 port 需要但不屬於其他目錄結構的檔案。
一個 patches 目錄。 這個目錄包含了使程式在 FreeBSD 系統上編譯和安裝的 patch。 Patch 基本上是小檔案,用以指示要改變特定的檔案。 它們是純文字檔格式,基本上說的是 ``Remove line 10'' 或 ``Change line 26 to this ...''。Patch 也以 ``diffs'' 聞名,因為它們是由 diff 這個程式產生。
一個 pkg 目錄。這個目錄通常包含三個檔案。 偶爾會有這三個以外的檔案,不過要視 port 而定。大部份只需要這三個。 這三個檔案是:
COMMENT。這是一行對程式的描述。
DESCR。 這往往是對程式更詳細而且多行的描述。
PLIST。這是 port 將安裝的所有檔案的列表。它也告訴了 port 的系統當反安裝時所要移除的檔案。
現在已經有足夠的背景資訊來了解 ports collection 用來做什麼, 準備好要安裝第一個 port 了。有兩個辦法可以完成這件事, 每一個都會在後面解釋。
然而在我們進入前,必須選擇一個 port 來安裝。 有一些辦法可以達成這件事,最簡單的是 FreeBSD 網站上的 ports 名單。可以把列在那裡的 ports 瀏覽一下或用站上的搜尋功能。 每個 port 也包括一份描述以便在決定安裝前可以稍微看看。
另一個方法是用 whereis 這個命令。 要用 whereis 只要在提式符號後打 ``whereis <要安裝的程式>'', 如果系統裡有找到它,便會告訴你它在哪裡,就像:
# whereis xchat xchat: /usr/ports/irc/xchat #
這告訴我們 xchat (一個 irc client) 可以在目錄 /usr/ports/irc/xchat 找到。
尚有另一個方法找尋特定的 port 就是用 ports collection 內建的搜尋機制。要用這個搜尋的特色必須在目錄 /usr/ports 下。一旦在這個目錄,執行 make search key=program-name, ``program-name'' 是要找的程式的名稱。例如, 如果要找 xchat:
# cd /usr/ports # make search key=xchat Port: xchat-1.3.8 Path: /usr/ports/irc/xchat Info: An X11 IRC client using the GTK+ toolkit, and optionally, GNOME Maint: jim@FreeBSD.org Index: irc B-deps: XFree86-3.3.5 bzip2-0.9.5d gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gmake-3.77 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 R-deps: XFree86-3.3.5 gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1
這部份輸出要特別注意的是 ``Path:'' 那行, 因為那告訴你去哪找。其它提供的資訊對於安裝 port 並沒有直接地需要, 所以這裡不會含蓋那部份。
Note: 必須是 root 才能安裝 port。
現在你已經找到想要安裝的 port,準備好真正的安裝了。
如同你從標題的猜測,這個章節所敘述的所有事物都假設已經有一套 FreeBSD 光碟。如果沒有可以從 FreeBSD Mall 訂購。
假設 FreeBSD 光碟已經放入光碟機且掛在 /cdrom 上(掛上點必須是 /cdrom), 那就準備好要安裝 port 了。開始前先把目錄換到要安裝的 port 所在的目錄:
# cd /usr/ports/irc/xchat
一但進入了 xchat 的目錄,將會看到 port skeleton。 下一個步驟就是編譯(也叫做建立)該 port。只要在提式符號下鍵入 make 就完成了。一旦做完這些應該就可看到如下畫面:
# make >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from file:/cdrom/ports/distfiles/. ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [剪去了 configure 的輸出] ... ===> Building for xchat-1.3.8 ... [剪去了編譯過程] ... #
注意一旦編譯完成就會回到提示符號。下一步就是安裝 port。 要安裝它只需在命令 make 後加上 install:
# make install ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [剪以了去安裝的例行步驟] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 #
一旦回到提示符號下應該就可以執行剛安裝完的應用程式。
Note: 只要執行 make install 代替 make 和 make install 這兩個分開的步驟就可以省下額外的步驟。
Note: 請注意有些 port 的授權並不允許 port 被包含在光碟裡。 這有許多種原因,包括下載前需要填註冊表格的,假如不允許再散佈的等等。 如果希望安裝光碟裡沒有的 port,必須在線上才能做到(看下一章)。
如同上一節,這一節假設已經有個能用的網路連線。 如果沒有就必須做光碟安裝。
從網路安裝 port 的做法跟從光碟安裝沒有兩樣。 兩者間唯一不同的就是程式的程式碼是從網路下載而非從光碟取得。
有關的步驟是相同的:
# make install >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from http://xchat.org/files/v1.3/. Receiving xchat-1.3.8.tar.bz2 (305543 bytes): 100% 305543 bytes transferred in 2.9 seconds (102.81 Kbytes/s) ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [剪去了 configure 的輸出] ... ===> Building for xchat-1.3.8 ... [剪去了編譯過程] ... ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [剪去了去安裝的例行步驟] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 #
如你所見,唯一的不同是告訴你去哪裡取得 port 那行。
前面做的是有關安裝 port 到系統上。 在這節將會學到如何從系統上移除一個 port。
現在你已經知道如何安裝 port,那很可能會很好奇要如何移除它們, 只為了預防安裝了一個 port 過沒多久才決定說裝錯了。 下面幾段將確實地含蓋這些。
現在我們將移除先前的例子(對那些沒在注意的人來多就是 xchat 啦)。 如同安裝 port,第一件要做的就是切換到 port 的目錄,如果有記得就是 /usr/ports/irc/xchat。 切換完目錄後就準備好可以反安裝 xchat 了。用命令 make deinstall 可以完成(有道裡吧?):
# cd /usr/ports/irc/xchat # make deinstall ===> Deinstalling for xchat-1.3.8 #
這樣就夠容易了。現在你已經可以應付從系統裡移除 xchat 了。 如果想要再安裝它,可以在目錄 /usr/ports/irc/xchat 下執行 make reinstall 來完成。