FNP:FAQ - Extra Ports and Packages v 0.1
2005.07.21
Table of Contents
  1. 本節 FAQ 簡說
  2. portupgrade 的簡介與原理
  3. 如何只抓取 tarball?
  4. 如何只抓取 packages?
  5. 如何安裝一個新的 port,並打包(package)起來?
  6. 如何安裝一個新的 port,並將其所有相依的 ports 也打包起來?
  7. 如何安裝一個新的 port,並將舊版的 port (含設定檔)打包起來?
  8. 如何在 build 之前,清理 ports 編輯期間所產生的暫存資料?
  9. 如何在 install 之後,清理 ports 編輯期間所產生的暫存資料?
  10. 如何在 build 之前,不清理 ports 編輯期間所產生的暫存資料?
  11. 如何在 install 之後,不清理 ports 編輯期間所產生的暫存資料?
  12. 如何清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
  13. 如何在 fetch/build 之前,清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
  14. 如何移除已安裝的 ports?
  15. 如何一併移除所相依的 ports?
  16. 如何重新安裝已安裝過的 ports?
  17. 如何以關鍵字搜尋 ports?
  18. 如何升級已安裝的 ports?
  19. 如何升級已安裝的 ports,並排除升級/安裝某些 pattern 的套件?
  20. 如何在 build 之前,指定要跑的指令?
  21. 如何在 install 之後,指定要跑的指令?
  22. 如何查詢目前系統安裝了哪些套件?
  23. 如何查詢系統有沒有安裝這個關鍵字的套件?
  24. 如何查詢某個檔案是屬於哪個套件?
  25. 如何列出所有可以升級的 ports?
  26. 如何指定編譯參數?
  27. 如何指定 make 的環境參數?
  28. 如何指定 ports 的安裝路徑?
  29. 如何安裝 packages?
  30. 如何強制用 packages 安裝而不是 ports?
  31. 如何更新 INDEX 對照表?
  32. 如何使用互動模式(interactive)?
  33. 如何將過程儲存到一個檔案中?
  34. 如何將過程模擬一遍,而不實作執行?
  35. 如何將某個套件替代成另一個套件?
  36. 如何不保留舊的 shared libraries?
  37. 如何對所有的詢間都回答 yes?
List
  1. 本節 FAQ 簡說
    本節 FAQ 不是 FreeBSD 內建的 Ports/Packages Management Tools,是由一群所謂的 Third-Party 所建置出來的管理機制。套件包括:
    /usr/ports/sysutils/portupgrade/
    /usr/ports/sysutils/portindex/
    /usr/ports/sysutils/libchk/
    /usr/ports/sysutils/pkg_cutleaves/
    /usr/ports/sysutils/portdowngrade/
    主軸會以 portupgrade 為主來取代原本內建的管理機制,並以其它的套件(portindex/libchk 等)輔助。

    因為這些套件是基於 FreeBSD 內建 Ports/Packages 管理機制,所以強烈建議熟悉 FreeBSD 內建 Ports/Packages 管理機制後,再採用這些套件,會比較得心應手。

  2. portupgrade 的簡介與原理
    portupgrade 是一個用來升級已安裝的套件或由 ports/packages 安裝新的套件的工具。簡單來說,就是在 FreeBSD 內建 Ports/Packages 管理機制上,再包上一層管理方式。

    對於升級已安裝的套件時,它的原理是,"compile -> uninstall -> reinstall",也就是先編譯新版套件,然後移除已安裝的舊版套件,最後才安裝編譯好的新版套件。這個流程會暫時(幾秒鐘)中斷此過程中受影響的套件,也就是會停止服務幾秒鐘。註:這些受影響的套件可能仍然需要你直接停止(shutdown)和重新啟動(restart)服務,這是一個很好的想法。

    對於安裝新的套件時,它的原理與 FreeBSD 內建 Ports/Packages 管理機制一樣,因此可以幾乎完全取代傳統的方式。

    若要得到更多關於 portupgrade 的資訊,可由如下連結取得:
    1. man portupgrade (中文 - by rafan)
    2. Ports & Packages 的簡介 - by ant

    portupgrade 包含許多工具可以使用,列出常用的如下:
    1. portinstall - 安裝新套件。功能同 portupgrade 加上參數 -N。
    2. portupgrade - 升級舊有套件。
    3. portsclean - 清理套件。
    4. portsdb - 管理 ports tree 資料庫。
    5. portversion - 列出安裝套件與 ports tree 版本間的差別。
    6. pkg_deinstall - 移除套件。
    7. pkg_fetch - 下載 packages。
    8. pkgdb - 管理已安裝套件資料庫。
  3. 如何只抓取 tarball?
    # portinstall -F joe
    或者指定其分類亦可
    # portinstall -F editors/joe
  4. 如何只抓取 packages?
    # portinstall -F -P joe
  5. 如何安裝一個新的 port,並打包(package)起來?
    # portinstall -p joe
  6. 如何安裝一個新的 port,並將其所有相依的 ports 也打包起來?
    # portinstall -p -r portupgrade
  7. 如何安裝一個新的 port,並將舊版的 port (含設定檔)打包起來?
    # portinstall -b portupgrade
  8. 如何在 build 之前,清理 ports 編輯期間所產生的暫存資料?
    # portinstall -c joe
    -c 這個參數是預設參數,一般不須要額外指定。
  9. 如何在 install 之後,清理 ports 編輯期間所產生的暫存資料?
    # portinstall -C joe
    -C 這個參數是預設參數,一般不須要額外指定。
  10. 如何在 build 之前,不清理 ports 編輯期間所產生的暫存資料?
    # portinstall -w joe
  11. 如何在 install 之後,不清理 ports 編輯期間所產生的暫存資料?
    # portinstall -W joe
  12. 如何清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
    portsclean 指令無對單一套件做清理動作,它的對象是整個 ports tree。

    這個指令會清理整個 ports tree 的編輯期間的暫存檔,及其相對應的 tarball,因此時間會花比較久。
    # portsclean -C -D
    如果僅是想清理相對應的 tarball,則
    # portsclean -D
  13. 如何在 fetch/build 之前,清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
    # portsinstall -c -D joe
    由於 -c 是預設值,因此同等於
    # portsinstall -D joe
  14. 如何移除已安裝的 ports?
    # pkg_deinstall joe
  15. 如何一併移除所相依的 ports?
    # pkg_deinstall -r portupgrade
  16. 如何重新安裝已安裝過的 ports?
    # portupgrade -f joe
  17. 如何以關鍵字搜尋 ports?
    完整字串搜尋:
    # ports_glob joe
    關鍵字搜尋:
    # ports_glob "jo*"
    目前支援 '*',尚不支援 '?'。
  18. 如何升級已安裝的 ports?
    # portupgrade joe
    如果欲升級其所相依的套件,則:
    # portupgrade -r portupgrade
  19. 如何升級已安裝的 ports,並排除升級/安裝某些 pattern 的套件?
    # portupgrade -rx portupgrade portupgrade
    會更新所有相依於 portupgrade 的套件,但不會更新 portupgrade 本身。
  20. 如何在 build 之前,指定要跑的指令?
    # portinstall -B 'cvs update' 'portupgrade'
    # portupgrade -B 'cvs update' 'portupgrade'
  21. 如何在 install 之後,指定要跑的指令?
    # portinstall -A 'portsclean -D' joe
    # portupgrade -A 'portsclean -D' joe
  22. 如何查詢目前系統安裝了哪些套件?
    # pkg_glob -a
    或者指定查詢某名稱的套件
    # pkg_glob joe
  23. 如何查詢系統有沒有安裝這個關鍵字的套件?
    # pkg_glob "joe*"
  24. 如何查詢某個檔案是屬於哪個套件?
    # pkg_which /usr/local/bin/joe
  25. 如何列出所有可以升級的 ports?
    # portversion
    # portversion -v
    若僅欲列出可升級的套件,則
    # portversion -v | grep -v "="
  26. 如何指定編譯參數?
    若 ports collection 支援編譯的參數,
    # portinstall -m '-DLITE' vim
    # portupgrade -m '-DLITE' vim
    不支援的話,則自行指定
    # portinstall -m 'CONFIGURE_ARGS+="--without-inetd"' pure-ftpd
    # portupgrade -m 'CONFIGURE_ARGS+="--without-inetd"' pure-ftpd
  27. 如何指定 make 的環境參數?
    # portinstall -M 'env CONFIGURE_ARGS+="--without-inetd"' pure-ftpd
  28. 如何指定 ports 的安裝路徑?
    # portinstall -m 'PREFIX=/usr' joe
    # portupgrade -m 'PREFIX=/usr' joe
  29. 如何安裝 packages?
    此方法提供直接用 packages 安裝,而不是 ports。但若沒有符合的 packages 可裝,則改用 ports 安裝。
    # portinstall -P joe
    # portupgrade -P joe
  30. 如何強制用 packages 安裝而不是 ports?
    此方法提供強制用 packages 安裝,即使沒有符合的 packages 也不會轉而用 ports 安裝。
    # portinstall -PP joe
    # portupgrade -PP joe
  31. 如何更新 INDEX 對照表?
    重新建立完整的 INDEX,以其相對應的 INDEX databases。
    # portsdb -Uu
    若欲減少運行時間,可不用重新建立完整的 INDEX,而僅建立 INDEX databases。此方法可能遇到的問題是,ports tree 的資訊也許與現存的 INDEX 有所差異,而按照 INDEX 所建立的 databases 也會與 ports tree 有所差異,而發生安裝/查詢套件時出現問題。
    # portsdb -u
  32. 如何使用互動模式(interactive)?
    安裝/更新 glib 及其所相依的套件
    # portinstall -ri glib
    # portupgrade -ri glib
  33. 如何將過程儲存到一個檔案中?
    # portinstall -L joe
  34. 如何將過程模擬一遍,而不實作執行?
    # portinstall -n joe
    # portupgrade -n joe
  35. 如何將某個套件替代成另一個套件?
    用 print/ghostscript-afpl 換掉 ghostscript-gnu。
    # portupgrade -o print/ghostscript-afpl ghostscript-gnu
  36. 如何不保留舊的 shared libraries?
    加上 -u 的參數,會移除該套件的舊有 shared libraries。
    # portinstall -u glib
    # portupgrade -u glib
    若要清除所有已安裝套件中所重覆的 shared libraries,則
    # portsclean -L
  37. 如何對所有的詢間都回答 yes?
    # portinstall -y php4
    # portupgrade -y php4


freebsd FAQ-Extra ports and packages_职场
freebsd FAQ-Extra ports and packages_休闲_06 freebsd FAQ-Extra ports and packages_freebsd_07 freebsd FAQ-Extra ports and packages_职场_08 freebsd FAQ-Extra ports and packages_职场_09 freebsd FAQ-Extra ports and packages_freebsd_10 freebsd FAQ-Extra ports and packages_freebsd_11
Copyright © 2003-2006 Tzeng, Yi-Feng.
All Rights Reserved.