Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1037225
  • 博文数量: 227
  • 博客积分: 5951
  • 博客等级: 大校
  • 技术积分: 2598
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-22 17:42
文章分类
文章存档

2015年(2)

2014年(12)

2013年(16)

2012年(22)

2011年(19)

2010年(36)

2009年(77)

2008年(39)

2007年(16)

我的朋友

分类: BSD

2009-04-12 18:23:03

Chapter 20 Ports and Packages 常見問題

Yi-Feng Tzeng


Chapter 20 Ports and Packages 常見問題

Yi-Feng Tzeng
20.1.
20.2.
20.3.
20.4.
20.5.
20.6.
20.7.
20.8.
20.9.
20.10.
20.11.
20.12.
20.13.
20.14.
20.15.
20.16.
20.17.
20.18.
20.19.
20.20.

20.1. 如何只抓取 tarball?

如果只希望抓取 tarball 下來的話,僅需打下面指令即可:

# make fetch
如果是要抓取單一的 port,以 為例的話,則:

# cd /usr/ports/editors/joe
# make fetch

那麼,預設會將 的 tarball 下載至 /usr/ports/distfiles 目錄下。

如果是希望抓取安裝此 ports 所有相關相依 ports 的 tarball,以 為例的話,則:

# cd /usr/ports/systuils/portupgrade
# make fetch-recursive

預設會將此 port 與所有需要的其他 port 的 tarball,都下載至 /usr/ports/distfiles 目錄下。

如果是希望抓取 ftp 分類下所有 ports 的 tarball ,則:

# cd /usr/ports/ftp
# make fetch-recursive

則會所將 ftp 分類下所有 ports 的 tarball 都下載至 /usr/ports/distfiles 目錄下。

20.2. 如何僅做到解開 tarball的步驟?

有時候習慣自己 patch 原始碼的時候,會很常用到這個功能。以 為例的話,則:

# cd /usr/ports/editors/joe
# make extract

那麼就會將 tarball解開至 /usr/ports/editors/joe/work 目錄下。

20.3. 如何僅做到解開 tarball 並補上官方提供的 patch ?

此法與上面方式有一些類似,不同於是先補上官方提供的 patch ,再行 patch 自己的修正。有時候習慣自己 patch 原始碼的時候,會很常用到這個功能。 以 為例的話,則:

# cd /usr/ports/editors/joe
# make patch

那麼就會將 tarball解開至 /usr/ports/editors/joe/work 目錄下 ,並補上官方提供的 patch。

20.4. 如何安裝一個新的 port?

如果系統上未安裝此軟體,則可以選擇安裝一個新的 port。 以 為例的話,則:

# cd /usr/ports/editors/joe
# make install

如此會在系統上安裝一個新的 joe 軟體。 如果需要在安裝完成後,也一併清除編輯時期所留下來的暫存目錄,則可配合 make clean 方法一起使用,如:

# cd /usr/ports/editors/joe
# make clean

20.5. 如何安裝一個新的 port,並打包(package)起來?

將安裝完成的軟體打包起來,有許多便利性:包括在叢集系統中,可供其它機器使用, 或將未來此軟體出問題可重新利用此 package 重新快速安裝。 以 為例的話,則:

# cd /usr/ports/editors/joe
# make package

如此會在系統上安裝一個新的 joe 軟體,並將此軟體打包(package)起來。 package 預設會在 /usr/ports/editors/joe 目錄下,如果希望集中管理的話,建議做如下的步驟:

# mkdir -p /usr/ports/packages/All

以後打包的 packages 都會存放在此目錄下,並且系統會自動做分類,以方便管理。 如果需要在安裝完成後,一併清除編輯時期所留下來的暫存目錄,則可加上 make clean 一起使用,比如:

# cd /usr/ports/editors/joe
# make package clean

20.6. 如何打包一個 port,並將其所有相依的 ports 也打包起來?

因為上面剛說的 方式只有打包單一套件, 中間依賴的 ports 並沒有一起打包,這會出現一個常遇到的問題: 就是如果一個 port 需要依賴其它的 ports,那麼必須將其它 ports 也一起打包,否則安裝 packages 會有相依的問題。 以 為例:

# cd /usr/ports/sysutils/portupgrade
# make DEPENDS_TARGET=package package

如此一來,就會對所有 portupgrade 所相依賴的 ports 都一併打包,也包括自己本身。

20.7. 如何對一個已經安裝的 port 打包?

如果安裝好一個套軟,事前並未打包,事後想打包的話, 以 為例:

# cd /var/db/pkg
# pkg_create -b joe-{版本號}

如此一來,就會將已安裝的 port 打包起來,放在 /var/db/pkg 目錄下。

20.8. 如何清理 ports 編輯期間所產生的暫存資料?

在安裝 port 的時候,通常會有編譯期間所需要的工作目錄(work),因此通常安裝好一個套件後,會清除此暫存目錄,以節省硬碟空間。 以 為例:

# cd /usr/ports/editors/joe
# make clean

而如果是希望清除所有 ports 的暫存目錄,則:

# cd /usr/ports
# make clean

而如果是希望清除所有 ftp 分類的暫存目錄,則:

# cd /usr/ports/ftp
# make clean

20.9. 如何清理 ports 編輯期間所產生的暫存資料,以及 tarball 檔?

上面所講的 僅只是清除編輯期間所需要的工作目錄(work),並沒有將編譯 ports 時一併下載的 tarball 刪除(相對應之 tarball 預設會存放在 /usr/ports/distfiles) 如果打算把 tarball 也一併清除的話,以 為例:

# cd /usr/ports/editors/joe
# make distclean

make distclean 的步驟包含了 make clean 的功能,也就是說除了會刪除 tarball 外,還會一併清除編譯時的暫存 work 目錄。

如果是希望清除所有 ports 的暫存 work 目錄及 tarball,則:

# cd /usr/ports
# make distclean

而如果是希望清除所有 ftp 分類的暫存目錄以及 tarball,則:

# cd /usr/ports/ftp
# make distclean

20.10. 如何在安裝 ports 前查詢所依賴的相關套件?

在安裝 ports 前,可以查詢所需依賴/相關的套件。 以 為例:

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make all-depends-list

make all-depends-list 顯示此套件所有相依的套件。

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make pretty-print-build-depends-list

make all-depends-list 顯示此套件在編譯期間所需要的套件。

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make pretty-print-run-depends-list

make all-depends-list 顯示此套件要執行時所需要的套件。

20.11. 如何移除已安裝的 ports?

以 為例:

# cd /usr/ports/editors/joe
# make deinstall

或是使用 pkg_delete

# pkg_delete joe-{version}

有時候套件之間的相依性會導致無法直接移除,如果要強制移除的話,則:

# pkg_delete -f joe-{version}

但請注意:很有可能會導致其它相依到這軟體的套件執行起來出現問題。

20.12. 如何一併移除所相依的 ports?

以 為例:

# cd /usr/ports/sysutils/portupgrade
# make deinstall-depends

執行此步驟前,請注意是否會移除其他套件也有共同相依的部分。建議先參考 上面所講的 的方法來檢查。

# pkg_delete joe-{version}

或者建議用:pkg_delete,這樣若仍有相依該套件的話,會先警告而不會移除。 除非有另外加了 -f 參數來強制移除...。

# pkg_delete -r joe-{version}

20.13. 如何重新安裝已安裝過的 ports?

重新安裝的前提是:之前有安裝過或目前已安裝。以 為例:

# cd /usr/ports/editors/joe
# make deinstall clean install

或是

# cd /usr/ports/editors/joe
# make reinstall

或是

# portupgrade -f joe

20.14. 如何以關鍵字搜尋所要找的 ports?

如果要從全部的 ports collection 中找尋與關鍵字 "ldap" 有關的 ports,則:

# cd /usr/ports
# make search key=ldap

如果只要從與 ftp 相關的 ports 下找尋與關鍵字 "ldap" 有關的 ports,則:

# cd /usr/ports/ftp
# make search key=ldap

另外,還有另一個用法,方法只是將 key 換成 name。如果已經知道要搜尋 ports 的名稱,或只想找名稱相關的關鍵字 "ldap", 則:

# cd /usr/ports
# make search name=ldap

20.15. 如何升級已安裝的 ports?

如果已經安裝套件,事後欲升級的話,必須先移除舊版的 port。以 為例:

# portupgrade joe

或是

# cd /usr/ports/editors/joe
# make clean reinstall

或是

# portupgrade -f joe

20.16. 如何查詢目前系統安裝了哪些套件?

查詢目前系統已安裝的全部套件:

# pkg_info

20.17. 如何查詢目前系統有沒有安裝這個關鍵字的套件?

假設要找的關鍵字是 joe 的話:

# pkg_info | grep joe

20.18. 如何查詢某個檔案是屬於哪些套件?

如果想查詢 /usr/local/bin/joe 是屬於哪個套件的話,則:

# pkg_info -W /usr/local/bin/joe

如果沒有回傳任何資訊的話,代表著這個檔案是由 FreeBSD 內建的。

20.19. 如何查詢某個套件安裝了哪些檔案?

如果想查詢目前系統所安裝的 包含了哪些檔案,則:

# pkg_info -L /var/db/pkg/joe-{version}

20.20. 如何安裝舊版的 ports?

有時候會因為相依性,或是新版有問題,而會想裝舊版本的套件。 這裡介紹的方法是利用 CVS 的好處,回歸到以前舊版本存在的日子,以安裝舊版本的套件。

首先,若我們要回復到某一個套件的版本時,需要去查詢 FreeBSD ports CVS repository。 最常見的就是 網站、 FreeBSD 的 或是 FreeBSD 。

查到該套件版本所依存的日子後,就修改 CVS tag。一般預設 ports 的 CVS tag 會寫在 /usr/share/examples/cvsup/ports-supfile ,如要回溯到 2002/10/05 號的話,則:

# vi /usr/share/examples/cvsup/ports-supfile
default date=2002.10.05.00.00.00  #將 date 改成當日

然後按照一般 CVSup 或 csup 的時候一樣,執行 CVSup 或 csup (make update),此時的 ports collections 就會回到當時的情形,那麼該套件的舊版也會出現在 ports collections 中,只要安裝即可。

如果僅是想回溯某部份的 ports,則必須加上額外的資訊,如僅希望把 回溯, 而我們得知此屬於 lang 中的一支,則:

# vi /usr/share/examples/cvsup/ports-supfile
#ports-all #將 ports-all 標示起來
ports-lang #加入這行


最後,執行 CVSup 或 csup ,並安裝即可。目前若希望單獨回溯單一的 port,則比較麻煩。

This, and other documents, can be downloaded from .

For questions about FreeBSD, read the documentation before contacting <>.
For questions about this documentation, e-mail <>.




阅读(536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~