FreeBSD軟件安裝卸載工具--Ports和Packages詳解
發(fā)布時(shí)間:2008-09-08 18:48:44 作者:佚名
我要評(píng)論

1、如何只抓取 tarball?
2、如何僅做到解開(kāi) tarball的步驟?
3、如何僅做到解開(kāi) tarball 并補(bǔ)上官方提供的 patch?
4、如何安裝一個(gè)新的 port?
5、如何安裝一個(gè)新的 port,并將打包(package)起來(lái)?
6、如何打包一個(gè) port,并將其所有相依的 ports 也打
29、如何安裝 packages?
目前 FreeBSD 的 packages 是由 .tgz 所打包。如果想安裝一個(gè) packages ,可
使用 pkg_add,如安裝一個(gè) joe 的 tgz:
代碼: |
pkg_add joe-{version}.tgz |
30、如何強(qiáng)制安裝 packages?
由於有些 packages 會(huì)有與其他 packages 相依性的關(guān)系,所以必須先行安裝那
些 packages 才能正常安裝。 如果須要強(qiáng)制安裝 packages ,可以不須安裝那些
有相依性 packages ,但要注意的是強(qiáng)制安裝的結(jié)果可能會(huì)導(dǎo)致執(zhí)行或運(yùn)作的不
正常。強(qiáng)制安裝 packages 的指令如下,如強(qiáng)制安裝一個(gè) joe 的 tgz:
代碼: |
pkg_add -f joe-{version}.tgz |
31、如何查詢(xún) packages 與其他 packages 之間的相依性?
由於有些 packages 會(huì)有與其他 packages 相依性的關(guān)系,所以必須先行安裝那
些 packages 才能正常安裝。 查詢(xún) packages 與其他 packages 之間的相依性的
指令如下,如查詢(xún)與 portupgrade 相依的其他 packages:
代碼: |
pkg_info -r portupgrade-{version}.tgz |
32、如何遠(yuǎn)端安裝 packages?
有兩種設(shè)定方式,首先是 PACKAGEROOT,如:
setenv PACKAGEROOT ftp://ftp.cn.freebsd.org #設(shè)定 PACKAGEROOT 為 ftp.cn.freebsd.org 站臺(tái)
另一種方式是設(shè)定 PACKAGESITE,好處是若該站臺(tái)的 packages 倉(cāng)儲(chǔ)并不是符合
官方的設(shè)定或你想自己指定一個(gè)路徑。
以 ftp.cn.freebsd.org i386 的 current pakcages 為例:
setenv PACKAGESITE ftp://ftp.cn.freebsd.org/pub/FreeBSD/ports/i386/packages-current/Latest/
兩種方式選擇其中一種皆可,接下來(lái)的步驟都一樣。
往後要安裝 packages 的時(shí)候,如 portupgrade 的話(huà),則:
代碼: |
pkg_add -r portupgrade |
則系統(tǒng)會(huì)自動(dòng)於 ftp.cn.freebsd.org 抓取所有與 portupgrade 相依的 packages 并安裝。
33、如何更新 INDEX 對(duì)照表?
4.x 的 INDEX 位於 /usr/ports/INDEX,5.x 位於 /usr/ports/INDEX-5。
INDEX 是對(duì)照 ports 所有相依等資訊的對(duì)照表,若長(zhǎng)期未更新的話(huà),會(huì)導(dǎo)致
ports 對(duì)照失敗。官方有定期更新 INDEX,如果 想自行更新的話(huà),則:
代碼: |
cd /usr/ports/ make index |
34、如何更新 INDEX HTML?
FreeBSD 提供了用網(wǎng)頁(yè)的方式來(lái)觀(guān)看 ports collection,即可使用 lynx, w3m,
links 或其它可瀏覽網(wǎng)頁(yè)的程式來(lái)查閱。制作全部 ports collection 的方式如
下:
代碼: |
cd /usr/ports/ make readmes |
如果是僅須要做目前目錄下的資訊,或單一更新某一分類(lèi)下的資訊,如 /usr/ports/ftp/ 的話(huà),則:
代碼: |
cd /usr/ports/ftp/ make readme |
則僅會(huì)更新 /usr/ports/ftp/ 這個(gè)目錄的資訊,其上與其下的目錄皆不會(huì)更動(dòng)
到。 執(zhí)行成功後,會(huì)在相對(duì)應(yīng)的目錄下產(chǎn)生 README.html 的檔案。
35、如何針對(duì)某些 ports 不做 CVSup?
若 ports 底下的某些分類(lèi)完全用不到,則可以在 CVSup 時(shí),不做更新,以節(jié)省
網(wǎng)路頻寬與時(shí)間。
代碼: |
# vi /usr/sup/refuse ****************************************** ports/french ports/german ports/hebrew ports/hungarian ports/japanese |
那麼則上述目錄下的檔案皆不會(huì)更新。
如果是想要某些單一的 ports 不做同步,例如想保留舊版不做同步,或新版出現(xiàn)
問(wèn)題時(shí)。
代碼: |
# vi /usr/sup/refuse ****************************************** ports/lang/perl5.8 |
那麼 ports/lang/perl5.8 這個(gè) ports 不會(huì)做 CVSup 同步。
這些設(shè)定方法支援萬(wàn)用字元。
代碼: |
# vi /usr/sup/refuse ****************************************** ports/lang/perl* ports/po* |
36、如何使用 CVSup 同步 ports collections?
請(qǐng)叁考 gslin 的 用 CVSup 去更新你的 source tree 以及 ports tree。
37、安裝 ports 出現(xiàn) port is outdated 的錯(cuò)誤訊息
例如安裝 imap-uw 時(shí),出現(xiàn)以下內(nèi)容:
Your installation of the cclient port is outdated. Please delete it before continuing.
表示因?yàn)橄鄬?duì)應(yīng),且已安裝好的 cclient 這個(gè)軟體過(guò)於老舊,建議先升級(jí)這個(gè)軟
體再行安裝 imap-uw。因此只要先升級(jí) cclient 後,再安裝即可。
代碼: |
# cd /usr/ports/mail/cclient/ # make reinstall 或 # make deinstall && make install # cd /usr/ports/mail/imap-uw/ # make install |
38、安裝 ports 出現(xiàn) OpenSSL vulnerabilities 的錯(cuò)誤訊息
在安裝有些套件時(shí),如果有相依於 OpenSSL 時(shí),且判斷系統(tǒng)目前使用的 OpenSSL 版本有漏洞問(wèn)題時(shí),會(huì)出現(xiàn)如下的訊息:
Dependency warning: used OpenSSL version contains known
vulnerabilities Please update or define either WITH_OPENSSL_BASE or
WITH_OPENSSL_PORT
一般建議的解決方法有二種。
第一種:升級(jí)系統(tǒng)(需含系統(tǒng)內(nèi)建之 OpenSSL 一并升級(jí)),再安裝該套件
可以先查詢(xún)目前系統(tǒng)所用之 OpenSSL 的版本:
代碼: |
openssl version -v |
升級(jí)系統(tǒng)可叁考 FNP: upgrade core system 或 FNP: upgrade major system。
升級(jí)完系統(tǒng)後,再進(jìn)行一次 OpenSSL 版本之確認(rèn)。
然後再安裝該套件,這訊息就不會(huì)出現(xiàn)了。
第二種:使該套件相依於 ports tree 中的 OpenSSL
這種方法會(huì)安裝 ports tree 中新版本的 OpenSSL,然後相依於此新版本的
OpenSSL,而不是系統(tǒng)本身內(nèi)建的 OpenSSL。只要安裝套件時(shí),加入 WITH_OPENSSL_PORT 的叁數(shù),
即會(huì)安裝 ports tree 中的 OpenSSL,并且該套件
也會(huì)相依於此。方法如下:
代碼: |
make -DWITH_OPENSSL_PORT install |
這里不建議用叁數(shù) WITH_OPENSSL_BASE,因?yàn)檫@表示安裝套件時(shí),是相依於原本
系統(tǒng)中可能有漏洞的 OpenSSL,這樣會(huì)導(dǎo)致安全性的問(wèn)題。
39、如何在 FreeBSD 上模擬 Linux 的環(huán)境?
最新最完整的資料在官方的 Handbook 上。
簡(jiǎn)單來(lái)說(shuō),F(xiàn)reeBSD 核心必須支援,且必須安裝 Linux Runtime Libraries,最
後做一些設(shè)定。
如果要執(zhí)行 Linux ELF Binaries,可以先查詢(xún)目前 FreeBSD 是否已經(jīng)支援 Linux ELF。
代碼: |
brandelf -l |
看是否有 Linux 的字樣,如果沒(méi)的話(huà),請(qǐng)回頭檢查是否哪一步驟沒(méi)有做到。
然後檢查執(zhí)行檔是否為 Linux ELF Binaries。
代碼: |
brandelf execution-binary-filename |
如果是 Linux ELF Binaries,則正常執(zhí)行即可。
如果顯示結(jié)果不是 Linux ELF Binaries,但是自己確定是 Linux ELF Binaries
的話(huà),則只要更改一下 ELF 的格式即可。
brandelf -t Linux execution-binary-filename
然後再檢查一次是否已經(jīng)修正為正確的格式。
40、如何在 FreeBSD 上安裝 Linux rpm?
請(qǐng)確定已經(jīng)成功在 FreeBSD 上模擬 Linux 的環(huán)境,請(qǐng)叁考 FAQ 39。
安裝 rpm 的方式如下:
代碼: |
rpm --ignoreos --root /compat/linux --dbpath /var/lib/rpm/ -Uvh xxx.rpm |
41、安裝 ports 時(shí),原本應(yīng)該出現(xiàn)的清單選項(xiàng)不見(jiàn)了
這是由於系統(tǒng)會(huì)紀(jì)錄曾安裝過(guò) ports 的當(dāng)時(shí)所選擇的清單選項(xiàng),因此有時(shí)會(huì)因?yàn)?
安裝時(shí)出了問(wèn)題,或是再一次安裝時(shí),就不會(huì)出現(xiàn)清單可以選擇。如何讓清單選
項(xiàng)重新出現(xiàn)呢?
代碼: |
make clean make showconfig # 顯示設(shè)定的內(nèi)容 make rmconfig # 清除設(shè)定的內(nèi)容 make config |
之前設(shè)定 ports 的選項(xiàng)預(yù)設(shè)會(huì)紀(jì)錄在 /var/db/ports/{ports_name}/options 內(nèi)
容中。如要查看之前 python 有選擇的清單選項(xiàng):
代碼: |
cat /var/db/ports/python/options |
42、如何檢查是否有安裝重覆的 ports/packages?
隨著時(shí)間的演進(jìn),不同時(shí)間安裝的軟體會(huì)有不同版本的釋出,而且不同軟體相依
的版本號(hào)也不同,所以往往會(huì)造成同一個(gè)軟體安裝過(guò)多版本的情形發(fā)生。
這里我必須聲明的是,雖然套件名稱(chēng)相同,可是可能沒(méi)辦法上下相容,因此造成
有些軟體必須依賴(lài)比較舊的版本,而有些軟體必須依賴(lài)比較新的版本,如果有這
種情形發(fā)生的話(huà),那麼二個(gè)版本的存在是正常的。
否則的話(huà),我們會(huì)建議移除舊版的套件,將所有相依於此套件改為相依於新版
的。也就是說(shuō),移除舊版的套件,然後將原本相依於舊版的套件,改為相依於新
版的套件。注意,我強(qiáng)調(diào)的是新舊版套件是相容的。因?yàn)檫@種做法有點(diǎn)危險(xiǎn),因
此不提供做法,請(qǐng)使用更水階的套件管理工具,如 portupgrade 來(lái)完成。
檢查是否有安裝重覆的 ports/packages 的方法如下:
代碼: |
pkg_info | sort | sed -e 's/-[0-9].*$//' | uniq -c | grep -v '^[[:space:]]*1' |
如果有一行是顯示" 3 libtool",則表示目前系統(tǒng)有安裝三種不同版本的
libtool套件。
接下來(lái)可以檢查這三種版本是否可以相容:
代碼: |
cd /usr/ports/ make search name=libtool |
如果發(fā)現(xiàn)分別有三種 ports 來(lái)代表這三種不同版本的 libtool,就表示他們彼此
不相容,必須保留三者,否則可能會(huì)發(fā)生相依問(wèn)題。假設(shè)如下:
代碼: |
/usr/ports/devel/libtool13 /usr/ports/devel/libtool14 /usr/ports/devel/libtool15 |
反之,如果發(fā)現(xiàn)只有一種 ports 來(lái)代表這種不同版本的套件,則表示目前系統(tǒng)安
裝的三種版本是相容的,只要修改原本相容於其它二種版本所有的套件,并指向
欲保留的那個(gè)版本,然後移除其它二種即可。如發(fā)現(xiàn)系統(tǒng)目前有安裝三種不同版
本的 gettext:
代碼: |
cd /usr/ports/ make search name=gettext |
然後檢查的結(jié)果如下:
代碼: |
/usr/ports/devel/gettext |
則將所有相依於 gettext 舊版本的其它套件都改為相依於新版的 gettext,然後
再移除系統(tǒng)中舊版的 gettext 即可。
43、`make deinstall' 與 `pkg_delete' 有什麼不同?
簡(jiǎn)單來(lái)說(shuō),`make deinstall' 會(huì)移除該 port,并且不會(huì)叁照其相依/相關(guān)的 ports。
`pkg_delete' 在移除該 port 前,會(huì)叁照其相依/相關(guān)的 ports,并且 `pkg_delete'
有支援 wild card,如要移除所有 p 開(kāi)頭的 ports,則:
代碼: |
cd /var/db/pkg/ pkg_delete p* |
[color=red]要注意的是,如果使用 `make deinstall',則最好確定系統(tǒng)目前所
安裝的版本,與 ports collection 中顯示的版本符合,否則有可能會(huì)出現(xiàn)非預(yù)
期性錯(cuò)誤;而 `pkg_delete' 是因?yàn)橹苯觿h除系統(tǒng)中所安裝的版本,所以沒(méi)有此
問(wèn)題。
因此,換句話(huà)說(shuō),當(dāng)系統(tǒng)所安裝的版本符合 ports collections 中的版本,則可
以使用 `make deinstall' 或 `pkg_delete',否則的話(huà)最好用 `pkg_delete'。
與 `make deinstall' 相關(guān)的資訊:FAQ 11、FAQ 12及FAQ 13。
與 `pkg_delete' 相關(guān)的資訊:FAQ 11、FAQ 12及FAQ 15。
44、安裝 ports 出現(xiàn) local modification time does not match remote 的錯(cuò)誤訊息
這通常表示你已經(jīng)下載了這個(gè)檔案在 /usr/ports/distfiles 的對(duì)應(yīng)目錄中,但
是它并不是 port collections 所期望下載的。通常的解決方法是
在 /usr/ports/distfiles 的對(duì)應(yīng)目錄中移除此檔案,再重新抓取。
例如是安裝 joe 時(shí)出現(xiàn)如下的錯(cuò)誤訊息:
fetch: joe2.8.tar.Z: local modification time does not match remote
則將 joe2.8.tar.Z 於 /usr/ports/distfiles 中移除:
代碼: |
cd /usr/ports/editors/joe/ make distclean |
相關(guān)文章
Unix,BSD,Linux系統(tǒng)三者的區(qū)別小結(jié)
這篇文章主要介紹了Unix,BSD,Linux系統(tǒng)三者的區(qū)別小結(jié),需要的朋友可以參考下2023-05-03FreeBSD如何添加硬盤(pán)?FreeBSD添加硬盤(pán)的方法
一些朋友問(wèn)小編FreeBSD如何添加硬盤(pán)?別擔(dān)心,今天小編就為大家分享FreeBSD添加硬盤(pán)的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2017-04-06- 今天小編為大家?guī)?lái)的是Freebsd PF 安裝使用詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2017-04-06
FreeBSD下zfs: failed with error 6錯(cuò)誤如何解決?
最近一些朋友問(wèn)小編 FreeBSD下zfs: failed with error 6錯(cuò)誤如何解決?今天小編要為大家?guī)?lái)的是 FreeBSD下zfs: failed with error 6錯(cuò)誤的解決方法,有需要的朋友一起去看2017-04-06Unix文件系統(tǒng)和pwd命令實(shí)現(xiàn)詳解
今天小編要為大家?guī)?lái)的是Unix文件系統(tǒng)和pwd命令實(shí)現(xiàn)詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2017-04-01- 今天小編將為大家?guī)?lái)的是Unix中的dot命令詳解!希望對(duì)大家會(huì)有幫助!有需要的朋友一起去看看吧2017-03-22
freebsd時(shí)間設(shè)置小節(jié)詳解
近日!一些朋友對(duì)于freebsd時(shí)間設(shè)置小節(jié)存在疑慮!下面小編將為大家?guī)?lái)的是freebsd時(shí)間設(shè)置小節(jié)詳解!希望對(duì)大家會(huì)有幫助!有需要的朋友一起去看看吧2017-03-19- 今天小編要為大家?guī)?lái)的是grub2引導(dǎo)freebsd詳解!希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧2017-03-19
- 下面小編為大家?guī)?lái)的是FreeBSD10安裝內(nèi)核源代碼方法講解!希望能夠幫助到大家!有需要的朋友一起去看看吧2017-03-19
FreeBSD下如何使GraphicsMagick支持中文字體?
最近一些朋友在問(wèn)FreeBSD下如何使GraphicsMagick支持中文字體?今天小編為大家?guī)?lái)的是FreeBSD下使GraphicsMagick支持中文字體的方法!有需要的朋友一起去看看吧2017-03-15