Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15041801
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-03-19 18:11:51

◎名稱
portupgrade - 提供經由port或是packages來升級/安裝新的軟體

◎安裝
路徑:/usr/ports/sysutils/portupgrade#make install
/usr/ports/sysutils/portupgrade#make clean

◎語法
portupgrade [-habcCDfFginNOpPPqrRsuvwWy] [-A command] [-B command]
[-l file] [-L prefix] [-S command] [-x pkgname_glob]
[[-o origin] [-m make_args] [-M make_env] pkgname_glob ...]

◎描述
portupgrade被用來作為經由port或packages升級/安裝的工具。
而portinstall相當於portupgrade -N。

◎警告
o 請詳讀使用者手冊並且了解你在做什麼。

o 請不要忘掉在升級前執行pkgdb -F。

o 請記得portupgrade不會自己尋找程式的相關性,
必要時別忘了使用 -f,-r 或-R 參數。

o 當portupgrade在執行中,請勿中斷之。否則您將會有一個不完全的資料庫。
(雖然即使這樣做是100%的安全)

o 請不要懶惰,務必備份先前的資料及設定檔案包含/var/db/pkg。

◎參數
pkgname_glob 定義一個pkgname,可以包含萬用符號。
詳情請參考 pkg_glob(1)。

-h (--help)
顯示求助選單。

-a (--all)
表示所有已經安裝的軟體。
相當於pkgname_glob中的 '*' 。

-A CMD (--afterinstall CMD)
在每一個安裝完成後,以root身分執行某一命令。

-b (--backup-packages)
保留舊有版本的備份。
這些資料會暫時存放在PKG_TMPDIR 及 TMPDIR所定義的位置。

-B CMD (--beforebuild CMD)
與-A CMD 相反,在安裝每一個程式前,先執行該命令。
若該命令執行失敗,則安裝會停止。

-c (--clean)
在每一次安裝前,先執行make clean。(預設值)

-C (--cleanup)
在每一次安裝後執行make clean。(預設值)

-D (--distclean)
在每次fetch或是build之前執行 make distclean。

-f (--force)
強制執行,即使是降級或是同一版本也強制安裝。

-F (--fetch-only)
只取得檔案或是packages但不做升級動作。
這個參數對於一次取得多數檔案很有用。

-g (--go-on)
繼續執行動作,即使某些相關的packages升級失敗。
預設的狀態中,若某package或是port升級失敗,其相關連性會被skipped。

-i (--interactive)
打開互動模式,portupgrade在進行重要步驟前會徵得您的同意?

-l FILE (--log-results FILE)
將更新升級結果以FILE為檔名儲存?

-L PREFIX (--log-prefix PREFIX)
將每一個port的建立、安裝記錄存為一個檔案,
而PREFIX則是存放的位置?

-m (--make-args)
在每次make前加上額外的參數(arguments)

-M (--make-env)
在每次make後加上額外的參數(arguments)?

-n (--noexecute)
不實際執行安裝或升級動作?
只是顯示會有何改變?

-N (--new)
當指定的package是尚未安裝的情況下,安裝該程式?
且其所需求的關連程式也會一併被安裝升級?

-o ORIGIN (--origin ORIGIN)
定義某port再某package之後升級?

-O (--omit-check)
忽略依存性的檢查?
預設的狀況下,會自動檢查程式間的依存性,
當然地,這個動作會花去額外的時間?
但,若您先前已經執行過pkgdb -F 命令,
您可以採用此參數忽略之?

-p (--package)
為該安裝/升級的port,建立package?

-P (--use-packages)
再採用port方式升級前,先採用packages的方式?

-PP (--use-packages-only)
不管任何情況,只採用packages方式升級?

-q (--no-config)
使portupgrade不去讀取設定檔$PREFIX/etc/pkgtools.conf?

-r (--recursive)
依據指定的程式(packages)來升級與其相依存的程式?

-R (--upward-recursive)
依據指定的程式(packages)來升級其所依存的程式?

-s (--sudo)
在必要的情況下,以sudo狀態執行命令?

-S CMD (--sudo-command CMD)
加上sudo的命令

-u (--uninstall-shlibs)
不保留舊有的共享函式庫?
在預設的情況下是保留以策安全?

-v (--verbose)
開啟 verbose 輸出?

-w (--noclean)
在每一次編譯前,不要執行make clean?

-W (--nocleanup)
在每一次的編譯後不要執行make clean?

-x GLOB (--exclude GLOB)
將符合樣式的packages排除在昇級更新之外?
ex:昇級所有與XFree86相依存的程式,除了XFree86之外?
portupgrade -rx XFree86 XFree86

-y (--yes)
任何回答都回應yes?

◎環境變數
PKG_DBDIR 指定安裝packages資料庫的變數。
預設是/var/db/pkg。

PORTSDIR 指定ports tree位置的變數。
預設是/usr/ports。

PORTS_INDEX 指定ports INDEX 位置的變數。
預設是$PORTSDIR/INDEX。

PORTS_DBDIR 指定ports資料庫檔案位置的變數。
預設是$PORTSDIR。

PKG_TMPDIR 指定portupgrade在備份檔案暫存資料夾的變數。
若沒有特別指定,則使用/var/tmp。
注意:此資料夾需要有足夠的空間。

PACKAGES 指定portupgrade建立packages位置的變數。
預設是$PORTSDIR/packages。

PKG_PATH 指定portupgrade搜尋packages位置的變數。
預設是$PACKAGES/All 。

PKGTOOLS_CONF 指定pkgtools 設定檔位置的變數。
預設是$PREFIX/etc/pkgtools.conf 。

PORTUPGRADE 指定portupgrade預設執行參數的變數。

◎檔案
/var/tmp 預設的暫存檔位置。

/var/db/pkg 預設的程式資料庫的安裝位置。

/usr/ports 預設的ports tree及ports的資料庫檔案位置。

$PREFIX/etc/pkgtools.conf 預設的pkgtool的設定黨位置。

◎作者
Akinori MUSHA

◎程式的BUGS
在安裝或更新的過程之中 SUSP (^Z) 無法產生效用。

◎參考資料
portupgrade


◎實際舉例
o 升級glib:
portupgrade glib

如同你看到的,你可以忽略版本號碼。
若有安裝許多版本,則每一個版本都會被更新unless they share a port origin.

o 升級XFree86及Mesa,並採用-DWANT_GGI來編譯make Mesa:
portupgrade XFree86 -m '-DWANT_GGI' Mesa

o 升級所有GNOME的packages,並建立記錄檔案在/var/tmp/log.portname
portupgrade -L /var/tmp/log. '*gnome*'

o 採用verbose模式升級sawfish(X-window程式)及其相關連的程式,
並為之建立binary packages。
portupgrade -Rpv sawfish

o 升級glib及所有與其相關連的程式:
portupgrade -ri glib

o 重新建立或重新安裝所有與sdl相關連的程式,但不包含sdl本身:
portupgrade -rfx sdl sdl

o 重新建立或重新安裝所有早於2001-09-20安裝的程式:
portupgrade -f '<2001-09-20'

o 重新建立或重新安裝所有與png相關連且安裝時間早於png的程式:
portupgrade -fr png -x '>=png'

o 一次取得所有升級相關檔案,但是不做升級:
portupgrade -aFR

加上-R是必須的,因為有些程式會有相關連的問題。

o 採用ghostscript-afpl取代ghostscript-gnu:
portupgrade -o print/ghostscript-afpl ghostscript-gnu

所有原先與ghostscript-gnu相關連的程式,將會採用ghostscript-afpl取代之。

o 採用package的方式升級glib:
portupgrade -P glib

所謂採用packages的方式乃是說先找尋packages的方式升級。

o 用光碟片中的packages升級大量的程式,但在這之前,
想要先察看會有何改變:
env PKG_PATH=/mnt/cdrom/packages/All portupgrade -anPP
若您不想要安裝光碟片之外的任何packages,
您可以將 PKG_FETCH 設成其他的東西,像是``/bin/false''.

◎操作技巧
o 在升級過後,強烈建議執行 pkgdb -F 來修復程式間的關連性。

o 若要大量升級程式:
portupgrade -aPPR

o 在升級前,當您產生疑惑,請使用-n 及 -i 參數來觀察前後的改變,
或者使用pkg_glob 來觀看會產生作用的程式。

o 為了要有效率且正確的升級,記得執行pkgdb -F 來修補程式間的關連性,
並且當每次採用CVSup更新完port tree後,執行portsdb -Uu 來及時更新您的
port INDEX資料庫。

o 可以用portversion來確定可以獲得升級的程式而非先使用pkg_version。
portversion的用法和pkg_version大同小異,但portversion執行較快。

o 若要解除安裝packages,請給予pkg_deinstall一個機會,
而非直接使用 pkg_delete。
pkg_deinstall有pkg_delete的功效,
但加上了正確的反安裝及共享(程式庫)library的保留。

o 要清理擾人的檔案及編譯工作暫存資料夾或是老舊的共享程式庫
,可以使用portsclean。

o 可以使用portcvsweb 來察看某一個port的歷史演進及改變。
panda note:須裝設w3m lynx links mozilla netscape其中之一的瀏覽器
,或自訂也可。
阅读(775) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~