- 論壇徽章:
- 0
|
FreeBSD全能服務(wù)器安裝手冊之常用命令詳解篇--Portupgrade命令詳解
Portupgrade
Installing portupgrade
使用ports安裝:
# cd /usr/ports/sysutils/portupgrade
# make install clean
pkg_info –xL portupgrade
cvsup 同樣會升級你的/usr/ports/INDEX, 這個文件是你的ports tree的一個列表。 你可以查看它了解你是在什么時間升級過它。
ls -l /usr/ports/INDEX-5
Upgrading the Ports Database
現(xiàn)在, 我們使用cvsup 升級了 ports tree后需要使用這個命令來建立一個ports數(shù)據(jù)庫:
# portsdb –uU
當你第一次使用這個命令時, 有一個數(shù)據(jù)庫INDEX.db將在/usr/ports下建立,每次使用完cvsup ports tree后, 你都需要使用portsdb來升級你的INDEX.db 。你不能使用file unility來訪問INDEX.db, 因為這不是一個ASCII類型的文件。
當然, 有幾個portupgrade工具將使用這個數(shù)據(jù)庫, Btree涉及一個數(shù)據(jù)庫算法,它用來在大型數(shù)據(jù)庫進行快速查找。我們將看到一些portupgrade工具將很快速的找出信息, 因為它使用的就是Btree.
你將需要一點耐心去等待portsdb運行, 當它運行完成, 你就可以使用portversion來查看你已安裝的軟件是否需要升級, 記住這個命令:
# portversion –l “<”
如果你看到一些輸出, 你下一步將是升級這些顯示的軟件, 別驚訝, 我們將使用portupgrade, 也叫做portinstall.
Upgrading the Ports
最簡單的一個命令:portupgrade –a 將升級所有需要升級的軟件,但是, 很多時候?qū)⒉荒苓M行升級。這個不是portupgrade出現(xiàn)異常,這是由于軟件的依賴性造成的。
一個port有兩個類型的依賴, 一種是安裝時依賴, 你在安裝某個軟件時一定要先安裝其它的這個軟件所依賴的軟件包才能進行下一步安裝; 第二種是其它軟件包依賴于你所升級的這個軟件包, 你應(yīng)該記得有時你用pkg_delete刪除一個軟件包時卻刪除不了, 這就是因為其它程序依賴于這個軟件包。
如果你在升級一個軟件時卻沒有查看它依賴的軟件包也需要升級,你將同樣不能升級這個軟件包。發(fā)生這種情況時, 你可指定兩個遞歸的參數(shù)( tow recursive switches)使用portupgrade:
# portupgrade –arR
-R 將檢查安裝時依賴性, -r將檢查第二種依賴。這將防止你的系統(tǒng)有過時的依賴包或軟件不相容。
有時, 你使用portupgrade或它們中的某個工具時, 你會看到一條信息告訴你先執(zhí)行pkddb
–F, 從這個工具名你猜到這個工具應(yīng)該是用來升級你的軟件庫的(package database).這個數(shù)據(jù)庫將尋找/var/db/pkg/pkgdb.db. 同樣, 這個數(shù)據(jù)庫也是使用Btree進行查找。
如果有軟件告訴你執(zhí)行pkgdb –F, 那你就先執(zhí)行這個命令. 但是, 別中斷這個命令, 否則你將有一個殘缺的數(shù)據(jù)庫, 如果你遇到了這種非常不幸的情形, 下面這個命令可以幫助你修復它:
# pkgdb –fu
That’s pretty easy switch combo to remember, as similar thoughts will probably be running through your head at the time.
運行pkgdb –F可以交互式的修復數(shù)據(jù)庫, 也就是說pkgdb將一步步按你想的情況去做, 它將詢問你是否修復某些或不修復哪些。Michael Lucas 寫過一個文章告訴你怎么回答:an article explaining how to respond。然而, 如果你想正確的回答pkgdb的問題, 可以使用pkgdb –fu代替, 它將按系統(tǒng)所想的最佳回答去修復數(shù)據(jù)庫。If your’re really paranoid, 可以選擇-Fa, 它將告訴pkgdb只安全地修復矛盾(錯誤)。
This all sounds scarier than it really is. It’s very rare that you’ll ever be asked to run pkgdb –F, pkgdb is usually used for other purposes(其它的用途), which is why it’s also called pkg_which。
Using pkg_which
pkg_which( 或pkgdb) 可以用來尋找程序?qū)儆谀囊粋文件。下面的例子將顯示出系統(tǒng)命令which和pkg_which 兩者的區(qū)別:
# which pkgdb
/usr/local/sbin/pkgdb
which用來尋找程序放在哪里, pkg_which將告訴你這個程序是由哪個ports安裝的。
# pkg_which pkgdb
portupgrade-20030723
這個命令等同上面的命令:
# pkgdb pkgdb
portupgrade-20030723
我們來看看其它的例子, /usr/local下包含了一些安裝了的程序要使用的文件, 你能找到很多文件但卻沒一點線索, 它們是怎么來的或它們屬于哪于個程序。 這個工作可用pkg_which完成. 來看看我系統(tǒng)上的一個小片斷:
# ls /usr/local/bin | grep yaf
tryaffix*
yaf-cdda*
yaf-mpgplay*
yaf-splay*
yaf-tplay
yaf-vorbis*
yaf-yuv*
如果你像我一樣, 可能完全不知道這些文件的意義。讓我們來看看它們屬于哪個程序:
# pkg_which *yaf
ispell-3.2.06_3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
pkg_which還有一些別的有用的選項, 如 –o, 或 origin(起源), 如果你不記得是在哪個ports中安裝的kdemultimedia-3.1.3, 可以使用這個命令:
# pkg_which -o kdemultimedia-3.1.3
multimedia/kdemultimedia3
輸出指出這個程序以前是在/usr/ports/multimedia/kdemultimedia3中安裝的。
選項 –v 也是很有用的參數(shù)。如果我想知道當前安裝了哪些含有kde的程序:
# pkg_which -v kde*
kde-config: kdelibs-3.1.3
kdebugdialog: kdebase-3.1.3
kded: kdelibs-3.1.3
kdeeject: kdebase-3.1.3
kdeinit: kdelibs-3.1.3
kdeinit_shutdown: kdelibs-3.1.3
kdeinit_wrapper: kdelibs-3.1.3
kdepasswd: kdeutils-3.1.3
kdeprintfax: kdebase-3.1.3
kdesktop: kdebase-3.1.3
kdesktop_lock: kdebase-3.1.3
kdessh: kdeutils-3.1.3
kdesu: kdebase-3.1.3
kdesu_stub: kdelibs-3.1.3
kdesud: kdebase-3.1.3
kdevdlg2ui: kdevelop-2.1.5
kdevelop: kdevelop-2.1.5
這給我們提供了非常好的線索, 每一行都顯示了程序名。 現(xiàn)在我們可以看出這臺機上運行的是kde 3.1.3.
在進行下一節(jié)前, 讓我們來總結(jié)一下升級軟件所要做的幾步操作:
1.運行cvsup升級ports tree.
2.運行portsdb 升級 INDEX.db.
3.運行portversion查看哪些程序需要升級。
4.運行portupgrade升級這些程序。
Additional portupgrade Switches(portupgrade 另外的一些選項)
我們已經(jīng)知道可以使用portupgrade –arR升級所有需要升級的軟件包。然而, portupgrade還有幾個選項讓你升級程序和怎么去做。
一個有用的是 –F, 用于你在沒有一個可持續(xù)的互聯(lián)網(wǎng)連接時。當你升級時, portupgrade需要從互聯(lián)網(wǎng)上取得升級所需的文件, 然后再花費一些時間編譯程序。當你升級一個非常大的程序時, 如:kde, gnome, XFree86, 在這期間它需要連續(xù)幾個小時連接到互聯(lián)網(wǎng)上。
這個命令將從互聯(lián)網(wǎng)上下載升級所需的文件, 但它不會安裝任何東西
# portupgrade –aFrR
當升級所需的文件下載完成后, 你就可以斷開與互聯(lián)網(wǎng)的連接, 然后像上面說的那樣使用 portupgrade –arR升級了。
下面?zhèn)選項是-n, 它將詳細的告訴你portupgrade 將要做的一些事情。當你非常緊張地想提前知道你在安裝軟件時發(fā)了一些什么事情, 這個選項將很有用處(This switch simply tells you what portupgrade would do without actually doing it. This is very useful if you are the nervous or the paranoid type and want to know ahead of time what is going to happen to your installed software)。
下面是輸出:
# portupgrade -anrR
--->; Session started at: Sun, 17 Aug 2003 22:06:00 -0400
<a page of output snipped>;
--->; Reporting the results (+:done / -:ignored / *:skipped / !:failed)
- lang/ruby16 (ruby-1.6.8.2003.04.19)
- net/cvsup-without-gui (cvsup-without-gui-16.1h)
+ lang/ruby16-shim-ruby18 (ruby-shim-ruby18-1.8.0.p2.2003.04.19)
+ databases/ruby-bdb1 (ruby-bdb1-0.1.9)
- sysutils/portupgrade (portupgrade-20030723)
- www/lynx (lynx-2.8.4.1d)
--->; Session ended at: Sun, 17 Aug 2003 22:06:02 -0400 (consumed 00:00:02)
讓我們來看看上面的輸出。Portupgrade 進入已安裝軟件的ports目錄中, 并將結(jié)果寫入一個報告(report). 每一行報告顯示了ports的目錄, 安裝的軟件版本, 和一個是否需要升級的符號提示。這里有兩個軟件需要升級。它們的開頭是以 + 開始。如果我與使用portversion查看相比較,我看到的是同樣的結(jié)果, 但以不同的方式表示出來!
# portversion -l "<"
ruby-bdb1
ruby-shim-ruby18
當你非常謹慎的升級你的系統(tǒng)時, 你可以使用參數(shù) –i, 或 interactive. 當你把這個選項加入到portupgrade中, portupgrade在升級某個軟件或這個軟件的依賴包時將詢問你是否這樣做, 如下面所顯示的這樣:
--->; Upgrading 'ruby-bdb1-0.1.9' to 'ruby-bdb1-0.2.1'
(databases/ruby/bdb1)
OK? [yes]
這將使用yes作為默認的回答, 也就是說你按Enter時, 你的回答是yes. 如果你覺得不升級這個ports, 輸入no.
最后一個參數(shù)是l, 或 log。 當某個ports不能安裝軟件而你想把錯誤信息發(fā)送給某人時使用它。如下面所示:
# portupgrade -rR ruby-shim-ruby18 -l logfile
你可能不想使用l , a 選項, 特別是當你有什么軟件需要升級的時候。沒有誰愿意要那么大的log file.
在下一篇, 我們將討論uninstall ports和清理一些不需要的輸出文件。我們還將看看如何定制pkgtool.conf. |
|