2005.07.21
- 本節 FAQ 簡說
- portupgrade 的簡介與原理
- 如何只抓取 tarball?
- 如何只抓取 packages?
- 如何安裝一個新的 port,並打包(package)起來?
- 如何安裝一個新的 port,並將其所有相依的 ports 也打包起來?
- 如何安裝一個新的 port,並將舊版的 port (含設定檔)打包起來?
- 如何在 build 之前,清理 ports 編輯期間所產生的暫存資料?
- 如何在 install 之後,清理 ports 編輯期間所產生的暫存資料?
- 如何在 build 之前,不清理 ports 編輯期間所產生的暫存資料?
- 如何在 install 之後,不清理 ports 編輯期間所產生的暫存資料?
- 如何清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
- 如何在 fetch/build 之前,清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?
- 如何移除已安裝的 ports?
- 如何一併移除所相依的 ports?
- 如何重新安裝已安裝過的 ports?
- 如何以關鍵字搜尋 ports?
- 如何升級已安裝的 ports?
- 如何升級已安裝的 ports,並排除升級/安裝某些 pattern 的套件?
- 如何在 build 之前,指定要跑的指令?
- 如何在 install 之後,指定要跑的指令?
- 如何查詢目前系統安裝了哪些套件?
- 如何查詢系統有沒有安裝這個關鍵字的套件?
- 如何查詢某個檔案是屬於哪個套件?
- 如何列出所有可以升級的 ports?
- 如何指定編譯參數?
- 如何指定 make 的環境參數?
- 如何指定 ports 的安裝路徑?
- 如何安裝 packages?
- 如何強制用 packages 安裝而不是 ports?
- 如何更新 INDEX 對照表?
- 如何使用互動模式(interactive)?
- 如何將過程儲存到一個檔案中?
- 如何將過程模擬一遍,而不實作執行?
- 如何將某個套件替代成另一個套件?
- 如何不保留舊的 shared libraries?
- 如何對所有的詢間都回答 yes?
-
本節 FAQ 簡說本節 FAQ 不是 FreeBSD 內建的 Ports/Packages Management Tools,是由一群所謂的 Third-Party 所建置出來的管理機制。套件包括:/usr/ports/sysutils/portupgrade/主軸會以 portupgrade 為主來取代原本內建的管理機制,並以其它的套件(portindex/libchk 等)輔助。
/usr/ports/sysutils/portindex/
/usr/ports/sysutils/libchk/
/usr/ports/sysutils/pkg_cutleaves/
/usr/ports/sysutils/portdowngrade/
因為這些套件是基於 FreeBSD 內建 Ports/Packages 管理機制,所以強烈建議熟悉 FreeBSD 內建 Ports/Packages 管理機制後,再採用這些套件,會比較得心應手。
-
portupgrade 的簡介與原理portupgrade 是一個用來升級已安裝的套件或由 ports/packages 安裝新的套件的工具。簡單來說,就是在 FreeBSD 內建 Ports/Packages 管理機制上,再包上一層管理方式。
對於升級已安裝的套件時,它的原理是,"compile -> uninstall -> reinstall",也就是先編譯新版套件,然後移除已安裝的舊版套件,最後才安裝編譯好的新版套件。這個流程會暫時(幾秒鐘)中斷此過程中受影響的套件,也就是會停止服務幾秒鐘。註:這些受影響的套件可能仍然需要你直接停止(shutdown)和重新啟動(restart)服務,這是一個很好的想法。
對於安裝新的套件時,它的原理與 FreeBSD 內建 Ports/Packages 管理機制一樣,因此可以幾乎完全取代傳統的方式。
若要得到更多關於 portupgrade 的資訊,可由如下連結取得:- man portupgrade (中文 - by rafan)
- Ports & Packages 的簡介 - by ant
portupgrade 包含許多工具可以使用,列出常用的如下:- portinstall - 安裝新套件。功能同 portupgrade 加上參數 -N。
- portupgrade - 升級舊有套件。
- portsclean - 清理套件。
- portsdb - 管理 ports tree 資料庫。
- portversion - 列出安裝套件與 ports tree 版本間的差別。
- pkg_deinstall - 移除套件。
- pkg_fetch - 下載 packages。
- pkgdb - 管理已安裝套件資料庫。
-
如何只抓取 tarball?# portinstall -F joe或者指定其分類亦可# portinstall -F editors/joe
-
如何只抓取 packages?# portinstall -F -P joe
-
如何安裝一個新的 port,並打包(package)起來?# portinstall -p joe
-
如何安裝一個新的 port,並將其所有相依的 ports 也打包起來?# portinstall -p -r portupgrade
-
如何安裝一個新的 port,並將舊版的 port (含設定檔)打包起來?# portinstall -b portupgrade
-
如何在 build 之前,清理 ports 編輯期間所產生的暫存資料?# portinstall -c joe-c 這個參數是預設參數,一般不須要額外指定。
-
如何在 install 之後,清理 ports 編輯期間所產生的暫存資料?# portinstall -C joe-C 這個參數是預設參數,一般不須要額外指定。
-
如何在 build 之前,不清理 ports 編輯期間所產生的暫存資料?# portinstall -w joe
-
如何在 install 之後,不清理 ports 編輯期間所產生的暫存資料?# portinstall -W joe
-
如何清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?portsclean 指令無對單一套件做清理動作,它的對象是整個 ports tree。
這個指令會清理整個 ports tree 的編輯期間的暫存檔,及其相對應的 tarball,因此時間會花比較久。# portsclean -C -D如果僅是想清理相對應的 tarball,則# portsclean -D -
如何在 fetch/build 之前,清理 ports 編輯期間所產生的暫存資料,以及其相對應的 tarball?# portsinstall -c -D joe由於 -c 是預設值,因此同等於# portsinstall -D joe
-
如何移除已安裝的 ports?# pkg_deinstall joe
-
如何一併移除所相依的 ports?# pkg_deinstall -r portupgrade
-
如何重新安裝已安裝過的 ports?# portupgrade -f joe
-
如何以關鍵字搜尋 ports?完整字串搜尋:# ports_glob joe關鍵字搜尋:# ports_glob "jo*"目前支援 '*',尚不支援 '?'。
-
如何升級已安裝的 ports?# portupgrade joe如果欲升級其所相依的套件,則:# portupgrade -r portupgrade
-
如何升級已安裝的 ports,並排除升級/安裝某些 pattern 的套件?# portupgrade -rx portupgrade portupgrade會更新所有相依於 portupgrade 的套件,但不會更新 portupgrade 本身。
-
如何在 build 之前,指定要跑的指令?# portinstall -B 'cvs update' 'portupgrade'# portupgrade -B 'cvs update' 'portupgrade'
-
如何在 install 之後,指定要跑的指令?# portinstall -A 'portsclean -D' joe# portupgrade -A 'portsclean -D' joe
-
如何查詢目前系統安裝了哪些套件?# pkg_glob -a或者指定查詢某名稱的套件# pkg_glob joe
-
如何查詢系統有沒有安裝這個關鍵字的套件?# pkg_glob "joe*"
-
如何查詢某個檔案是屬於哪個套件?# pkg_which /usr/local/bin/joe
-
如何列出所有可以升級的 ports?# portversion# portversion -v若僅欲列出可升級的套件,則# portversion -v | grep -v "="
-
如何指定編譯參數?若 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
-
如何指定 make 的環境參數?# portinstall -M 'env CONFIGURE_ARGS+="--without-inetd"' pure-ftpd
-
如何指定 ports 的安裝路徑?# portinstall -m 'PREFIX=/usr' joe或# portupgrade -m 'PREFIX=/usr' joe
-
如何安裝 packages?此方法提供直接用 packages 安裝,而不是 ports。但若沒有符合的 packages 可裝,則改用 ports 安裝。# portinstall -P joe# portupgrade -P joe
-
如何強制用 packages 安裝而不是 ports?此方法提供強制用 packages 安裝,即使沒有符合的 packages 也不會轉而用 ports 安裝。# portinstall -PP joe# portupgrade -PP joe
-
如何更新 INDEX 對照表?重新建立完整的 INDEX,以其相對應的 INDEX databases。# portsdb -Uu若欲減少運行時間,可不用重新建立完整的 INDEX,而僅建立 INDEX databases。此方法可能遇到的問題是,ports tree 的資訊也許與現存的 INDEX 有所差異,而按照 INDEX 所建立的 databases 也會與 ports tree 有所差異,而發生安裝/查詢套件時出現問題。# portsdb -u
-
如何使用互動模式(interactive)?安裝/更新 glib 及其所相依的套件# portinstall -ri glib# portupgrade -ri glib
-
如何將過程儲存到一個檔案中?# portinstall -L joe
-
如何將過程模擬一遍,而不實作執行?# portinstall -n joe或# portupgrade -n joe
-
如何將某個套件替代成另一個套件?用 print/ghostscript-afpl 換掉 ghostscript-gnu。# portupgrade -o print/ghostscript-afpl ghostscript-gnu
-
如何不保留舊的 shared libraries?加上 -u 的參數,會移除該套件的舊有 shared libraries。# portinstall -u glib或# portupgrade -u glib若要清除所有已安裝套件中所重覆的 shared libraries,則# portsclean -L
-
如何對所有的詢間都回答 yes?# portinstall -y php4或# portupgrade -y php4
All Rights Reserved.