Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17560
  • 博文数量: 5
  • 博客积分: 210
  • 博客等级: 二等列兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-15 17:27
文章分类

全部博文(5)

文章存档

2016年(1)

2009年(4)

我的朋友

分类: BSD

2009-07-08 21:40:58

  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. - 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

阅读(616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~