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 也打
12、如何一并移除所相依的 ports?
以 sysutils/portupgrade 為例的話(huà),則:
代碼: |
cd /usr/ports/sysutils/portupgrade/ make deinstall-depends |
執(zhí)行此步驟前,請(qǐng)注意是否會(huì)移除應(yīng)該保護(hù)的套件。建議先叁考 FAQ 10 的方法
來(lái)檢查。
或是使用 pkg_delete
代碼: |
cd /var/db/pkg/ pkg_delete -r portupgrade-{version} |
至於二者的差別,請(qǐng)叁考FAQ 43
代碼: |
13、如何重新安裝已安裝過(guò)的 ports? |
重新安裝的前提是,之前有安裝過(guò)或目前已安裝。以 editors/joe 為例的話(huà),
則:
代碼: |
cd /usr/ports/editors/joe/ make deinstall make clean make install 或 make reinstall |
14、如何以關(guān)鍵字搜尋 ports?
如果要從全部的 ports collection 中找尋與關(guān)鍵字 "ldap" 有關(guān)的 ports,
則:
代碼: |
cd /usr/ports/ make search key=ldap |
如果只要從與 ftp 相關(guān)的 ports 下找尋與關(guān)鍵字 "ldap" 有關(guān)的 ports,則:
代碼: |
cd /usr/ports/ftp/ make search key=ldap |
還有另一個(gè)用法,方法只是將 key 換成 name 。如果已經(jīng)知道要搜尋 ports 的
名稱(chēng),或只想找名稱(chēng)相關(guān)的關(guān)鍵字 "ldap", 則:
代碼: |
cd /usr/ports/ make search name=ldap |
如果只要從 ftp 相關(guān)的 ports 下找尋名稱(chēng)與關(guān)鍵字 "ldap" 有關(guān)的 ports,
則:
代碼: |
cd /usr/ports/ftp/ make search name=ldap |
15、如何升級(jí)已安裝的 ports?
如果已經(jīng)安裝好套件,事後欲升級(jí)的話(huà),必須先移除舊版本的 port,移除的方法
請(qǐng)叁考FAQ 11、FAQ 12及FAQ 13;之後再安裝 port,安裝的方法請(qǐng)叁考FAQ 4或
FAQ 5。
以 editors/joe 為例,且以 FAQ 11 及 FAQ 4 的方法,則:
代碼: |
cd /var/db/pkg/ pkg_delete joe-{version} cd /usr/ports/editors/joe/ make install |
或是
代碼: |
cd /usr/ports/editors/joe/ make clean make reinstall |
16、如何查詢(xún)目前系統(tǒng)安裝了哪些套件?
查詢(xún)目前系統(tǒng)已安裝的全部套件:
代碼: |
pkg_info |
17、如何查詢(xún)目前系統(tǒng)有沒(méi)有安裝這個(gè)關(guān)鍵字的套件?
此方法類(lèi)似 FAQ 16 :
代碼: |
pkg_info | grep |
18、如何查詢(xún)某個(gè)檔案是屬於哪些套件?
如果想查詢(xún) /usr/local/bin/joe 是屬於哪個(gè)套件的話(huà),則:
代碼: |
pkg_info -W /usr/local/bin/joe |
如果沒(méi)有回傳任何資訊的話(huà),代表著這個(gè)檔案是由 FreeBSD 內(nèi)建的。
19、如何查詢(xún)某個(gè)套件安裝了哪些檔案?
如果想查詢(xún)目前系統(tǒng)所安裝的 joe 包含了哪些檔案,則:
代碼: |
pkg_info -L /var/db/pkg/joe-{version} |
20、如何安裝舊版的 ports?
有時(shí)候會(huì)因?yàn)橄嘁佬?,或是新版有?wèn)題,而會(huì)想裝舊版本的套件。
這里的方法是利用 CVS 的好處,回歸到以前舊版本存在的日子,以安裝舊版本的
套件。首先,若我們要回復(fù)到某一個(gè)套件的版本時(shí),需要去查詢(xún) FreeBSD ports
CVS repository。最常見(jiàn)的就是 Freshports 網(wǎng)站、 FreeBSD 的 Mailing
FreeBSD cvs 或是 FreeBSD ports cvsweb。
查到該套件版本所依存的日子後,就修改 CVS tag。一般預(yù)設(shè) ports 的 CVS
tag 會(huì)寫(xiě)在 /usr/share/examples/cvsup/ports-supfile ,如要回朔到
2002/10/05 號(hào)的話(huà),則:
代碼: |
# vi /usr/share/examples/cvsup/ports-supfile ****************************************** default date=2002.10.05.00.00.00 #將 date 改成當(dāng)日 |
然後按照一般 CVSup 的時(shí)候一樣,執(zhí)行 CVSup (make update),此時(shí)的 ports
collections 就會(huì)回到當(dāng)時(shí)的情形,那麼該套件 舊版本也會(huì)出現(xiàn)在 ports
collections 中,只要安裝即可。
如果僅是想把某部份的 ports 回朔,則必須加上額外的資訊,如僅希望把
lang/perl5.8 回朔,而得知此屬於 lang 中的一支,則:
代碼: |
# vi /usr/share/examples/cvsup/ports-supfile ****************************************** #ports-all #將 ports-all 標(biāo)示起來(lái) ports-lang #加入這行 |
最後,執(zhí)行 CVSup,并安裝即可。目前若希望單獨(dú)回朔單一的 ports,
則比較麻煩。
21、如何更新 ports Mk?
Mk (/usr/ports/Mk/) 是編譯 ports 時(shí)所叁考的設(shè)定,有時(shí)若發(fā)生 ports
collections 太新,而導(dǎo)致 Mk 的內(nèi)容不符,此時(shí) 就是應(yīng)該更新 Mk 的時(shí)候了。
代碼: |
cd /usr/src/ make update cd /usr/src/share/mk make install |
22、如何解決安裝 ports 時(shí)出現(xiàn) sed -i 的錯(cuò)誤?
因?yàn)?BSD style 的 sed ,也就是 BSD 本身自有的 sed ,與一些 ports 編譯期
間所執(zhí)行的 sed 不一致,所以會(huì)導(dǎo)致一些語(yǔ) 法錯(cuò)誤。此時(shí)先安裝 sed_inplace
(textproc/sed_inplace),然後再安裝原本無(wú)法安裝的 ports:
代碼: |
cd /usr/ports/???/???/ make -DUSE_REINPLACE install |
23、如何列出所有可以升級(jí)的 ports?
ports collection 的更新速度很快,在每次更新 ports collections 後,往往
會(huì)出現(xiàn)比目前現(xiàn)在安裝的套件還新的版本,可 以令系統(tǒng)自行整理并提供可升級(jí)套
件的列表:
代碼: |
pkg_version -c |
24、如何得知 ports system 對(duì)某個(gè) ports 所提供的編譯叁數(shù)?
所有的 ports collections 中所提供的編譯叁數(shù)都會(huì)在對(duì)應(yīng)的 Makefile 檔案內(nèi)
詳述,如 sysutils/portupgrade 的話(huà),
則是位在 /usr/ports/sysutils/portupgrade/Makefile 檔案下。
可以對(duì)此檔案瀏覽以得知編譯時(shí)期可以下達(dá)的叁數(shù),
如對(duì) sysutils/portupgrade 有提供 NOPORTDOCS,則:
代碼: |
cd /usr/ports/sysutils/portupgrade/ make -DNOPORTDOCS install # make NOPORTDOCS=yes install 亦同 |
那麼安裝此 ports 時(shí),會(huì)將 NOPORTDOCS 所對(duì)應(yīng)的相關(guān)叁數(shù)指定進(jìn)去。
有時(shí)候設(shè)定較人性化的 ports 會(huì)在安裝前提供叁數(shù)供選擇,但是其實(shí)大部份的
ports 都沒(méi)有提供,因此必須自行去搜尋可編 譯的叁數(shù),在此我提供的方式如
下:
代碼: |
cd /usr/ports/sysutils/portupgrade/ grep defined Makefile |
如此幾乎可以知道所有提供的可編譯叁數(shù),雖然有時(shí)會(huì)多出一些不相干的資料,
不會(huì)這個(gè)確實(shí)是一個(gè)不錯(cuò)可叁考的方式。
25、如何手動(dòng)加入編譯 ports 的叁數(shù)?
在 FAQ 24 中的方法,是 ports collections 有提供的前提之下,有時(shí)候并不是
所有該軟體所支援的叁數(shù) 都會(huì)收納在 ports collections 中,因此有時(shí)候會(huì)需
要手動(dòng)加入編譯的叁數(shù)。如 ftp/pure-ftpd 中,如果不想把 inetd 的支援編入
的選項(xiàng),并沒(méi)有被 ports collections 所納入,因此必須手動(dòng)加上這個(gè) 編譯叁
數(shù),如下:
代碼: |
cd /usr/ports/ftp/pure-ftpd/ make CONFIGURE_ARGS+="--without-inetd" install |
26、如何指定 ports 的安裝路徑?
預(yù)設(shè) ports collecions 已安排安裝的路徑 (/usr/local/),如果不想將套件安
裝在預(yù)設(shè)路徑的話(huà),可以手動(dòng)指定安裝路徑。 以 editors/joe 為例,則:
代碼: |
cd /usr/ports/editors/joe/ make PREFIX=/usr install |
那麼 joe 就會(huì)將檔案對(duì)應(yīng)在 /usr 目錄下,而不是預(yù)設(shè)的 /usr/local 目錄下。
27、安裝 ports 出現(xiàn) FORCE_PKG_REGISTER 的錯(cuò)誤訊息
問(wèn)題敘述:
當(dāng)你先前已經(jīng)用ports 安裝過(guò)某一軟體 當(dāng)你要再次透過(guò)ports 安裝同一軟體時(shí),
很有可能會(huì)出現(xiàn)類(lèi)似下述的錯(cuò)誤訊息產(chǎn)生.
意思是說(shuō) 你可以透過(guò) make deinstall 解除安裝 然後透過(guò) make reinstall來(lái)
再次安裝
若你確定想要*覆蓋*此安裝 可以透過(guò)設(shè)定 FORCE_PKG_REGISTER 變數(shù)達(dá)成目標(biāo).
===> An older version of PORTS資料夾位置 is already installed (軟體版本)
You may wish to ``make deinstall'' and install this port again
by ``make reinstall'' to upgrade it properly.
If you really wish to overwrite the old port of PORTS資料夾位置
without deleting it first, set the variable "FORCE_PKG_REGISTER"
in your environment or the "make install" command line.
處理方式:
只要在make install 時(shí)加上 FORCE_PKG_REGISTER="yes" 就可以強(qiáng)制安裝.
也就是: /usr/ports/資料夾位址/#make install FORCE_PKG_REGISTER="yes"
28、安裝 ports 出現(xiàn) Shared object libintl.so.X not found 的錯(cuò)誤訊息
Shared object "libintl.so.4" 或 (libc.so.4) not found
問(wèn)題敘述:
近來(lái)的FreeBSD版本,常常在安裝某些軟體時(shí),會(huì)出現(xiàn)類(lèi)似的失敗畫(huà)面
並且告訴你缺乏 libintl.so.4或是 libc.so.4 這個(gè)函式.
Shared object "libc.so.4" not found
如下圖:是近來(lái)版本安裝某些程式問(wèn)題時(shí)常見(jiàn)的問(wèn)題,缺少 libc.so.4 函式.

問(wèn)題分析:
提到libc.so函式 首先想到的是與 linux 程式相關(guān)共享函式庫(kù).
FreeBSD在讀取相關(guān)函式前,首先會(huì)在 /compat/linux 資料夾中尋找;
然後若找不到則會(huì)嘗試搜尋 /lib 資料夾.
以 libc.so 函式為例,會(huì)先尋找/compat/linux/lib/libc.so ;
其次才是/lib/libc.so .
簡(jiǎn)單的解決方式:

Shared object "libintl.so.4" not found
跟 libc.so 函式一樣 也是在安裝某些軟體就會(huì)出現(xiàn)錯(cuò)誤畫(huà)面.
問(wèn)題分析:
libintl.so 函式是安裝 /usr/port/devel/gettext/ 程式後取得.
理論上來(lái)說(shuō) 目前版本的相關(guān)函數(shù)是 libintl.so.5 為何還要去讀取舊的 libintl.so.4 版本.
當(dāng)你在安裝gmake時(shí),gmake會(huì)去連結(jié)安裝gmake當(dāng)時(shí)的libinl.so的版本,是version 4.
也就是 libintl.so.4
當(dāng)你更新過(guò)相關(guān)的ports (devel/gettext) 將會(huì)用 libintl.so.5 取代 libintl.so.4
除非你能取得先前某些系統(tǒng)保留舊有的 libintl.so.4 否則就會(huì)出現(xiàn)安裝失敗
狀況.
很可惜的是...有很多程式需要 gettext 函式.
你可以用 cd /usr/ports/ ; make search key="gettext" | more 查詢(xún)
為什麼要加上more 因?yàn)樘嗯履憧吹交桀^...QQ
問(wèn)題解決:
要解決這個(gè)問(wèn)題 你可以透過(guò)重新建立所有與 gettext 相關(guān)的ports程式.
# portupgrade -fr gettext
重新建立或重新安裝所有與 gettext相關(guān)連的程式,
若你忘掉了 請(qǐng)參閱 更新ports/升級(jí)系統(tǒng) > portupgrade 軟體更新
或是簡(jiǎn)單的用偷吃步 把*目前版本*link過(guò)去..QQ (版本6..類(lèi)推)
然後就可以順利進(jìn)行程式安裝.
相關(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