2009-06-06

[心得] 在 freebsd 上使用 binary packages

轉錄自:[心得] 在 freebsd 上使用 binary packages

作者:chwong

最近拿到一台機器,裝了 FreeBSD 7.2,由於機器記憶體很少編譯會非常慢,所以嘗試了用官方現成編好的 binary packages來安裝軟體。以下是一些心得,可能有些不妥之處,還請大家提醒。

  • Step1: 設定環境變數 PACKAGESITE
    這裡是要設定到哪抓 PACKAGE,大致的設定方法是
    (csh) setenv PACKAGESITE ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/`uname -p`/packages-7-stable/All/
    (sh) export PACKAGESIT=ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/`uname -p`/packages-7-stable/All/
    Ps. 這裡使用 packages-7-stable 的理由是希望儘量使用新版軟體。7 表示 version 7,stable 則會有比較新的軟體
  • Step2: 利用 pkg_replace 安裝軟體
    在這我用 pkg_replace (ports-mgmt/pkg_replace) 作為套件輔助的工具,安裝軟體的方法很簡單:
    pkg_replace -NP category/name
    N 表示 new port/package,P 表示採用 binary package
    Ps. 由於 portupgrade 太慢,portmaster 看似不支援binary package,所以我用 pkg_replace
  • Step 3: 此時會有下列幾種情況:
    Case 1: 安裝順利成功
    當這個 package 不 depend on 其他的 packages 或是所有 depend 的 packages 都已經安裝了,並且在 ports 中對應版本的 package 在 ftp server 上找得到。恭喜! 結果像 log1

    Case 2: 下載不到 package 而失敗
    當這個 binary package 在伺服器上找不到的時候,會出現這個情況,此時直接連上 ftp server,找尋目前最新版本,利用 pkg_add -r 安裝 (此時直接寫軟體名+版本號,不要加 catelog) ,範例在 log2

    Case 3: 下載到 package 卻安裝失敗
    當這個 packages 有 depend 到的 package 未安裝的時候,pkg_replace 會安裝失敗,此時將同樣版本號的軟體利用 pkg_add -r 安裝即可 (直接寫軟體名+版本號,不要加 catelog),pkg_add 會幫你下載需要的 packages 一併安裝。範例見 log3

    利用上面的方法,我已經可以處理大多數的軟體安裝了。(有些軟體不加 option 自己編會不好用的例外)
    之後需要做軟體更新的時候,只要 pkg_replace -P package-name (或者 pkg_replace -aP 升級所有軟體) 就好。但值得注意的是發生 dependency 改變的時候,升級軟體會失敗,這時候就得觀察缺的package是哪些,另外用 pkg_replace -NP 或者 pkg_add -r 加進來,才能夠正確升級。

    最後補充說明:
    pkg_replace 若是升級到 0.9.0 (RC2) (20080129) 貌似可以避免掉 case 3 的問題,但 ports 裡頭的資料還沒更新,等更新之後應該就只剩下 ftp server 沒有最新 package 的時候才需要用 pkg_add 先裝舊版頂著用了。