2013-12-22

FreeBSD 安裝程式

1. 基本認識 (Packages vs Ports) 

Packages最像一般在windows裡灌的程式,他是事先編譯好的ports。
而Ports則是需要自行編譯source code。



一般都會選擇使用ports安裝程式,
因為packages是在系統release時就固定的版本,
無法自訂許多選項,也考量到不同系統相容性問題,編譯的會比較保守。
而ports的話則會去抓取最新版的程式來安裝,也可以依照自己的需求做修改,
彈性會比較好,效能也有可能會比較佳。
而Ports的缺點就是需要自己編譯程式,對於效能較差的電腦會比較吃力一些。

Packages跟Ports都會做相依性檢查,(dependency)
所謂的相依性是指:安裝某一個程式之前,需要安裝另一個程式才可以。

可以參考官方的使用手冊:
http://www.freebsd.org/doc/handbook/ports.html



2. Packages 安裝方式

可以使用sysinstall安裝,
但要記住安裝的packages都是系統release當時的版本。

(1) pkg_add (1)

# pkg_add pkg_name
有事先載好的package檔案(.tgz等等)

# pkg_add -r pkg_name
當本機沒有程式時可以使用遠端安裝。
若使用的FreeBSD版本是CURRENT或STABLE的話,則會下載最新版的程式;
若是用RELEASE版本的話,則會下載當初release時的程式。

修改 PACKAGEROOT 系統環境變數:
PACKAGEROOT是指「要從哪裡抓package」。
# setenv PACKGEROOT ftp://ftp.tw.freebsd.org
(ftp、http都可以)

(2) pkg_info (1)

# pkg_info pkg_name
查看安裝的程式資訊

(3) pkg_delete (1)

# pkg_delete pkg_name
解除安裝。會同時檢查dependency。

(4) pkg_version (1)

# pkg_version
列出所有安裝過的程式的版本。



3. Ports 安裝方式

(1) 取得 Ports Collection

方式1: sysinstall
Configure -> Distributions -> ports

方式2: portsnap (8)
修改Ports Collection的下載位置:
# vim /etc/portsnap.conf
SERVERNAME=portsnap.tw.FreeBSD.org

a. 下載壓縮的Ports Collection定期更新檔到 /var/db/portsnap/
# portsnap fetch
b. 若是第一次跑 Portsnap 的話, 則需要先解壓到 /usr/ports/
# portsnap extract
c. 若已有 /usr/ports/ 而且只是想更新而已
# portsnap update

用sysinstall安裝的ports,只會是當初release時發布的版本,
要安裝(or更新)最新的版本還是使用portsnap比較好。


(2) 找出你要安裝的port位置

方式1: make search
# cd /usr/ports
# make search name=app_name
# make search key=string
(第一次使用 make search 時,先下「make fetchindex」指令)

方式2: psearch
make search搜尋的速度不佳,
搜尋結果也不易閱讀。
可以安裝「psearch」這套軟體以便搜尋。
# cd /usr/ports/ports-mgmt/psearch
# make install clean
# rehash

方式3: whereis
# whereis app_name
筆者最愛用的懶人方式,可以快速找到ports的位置 XD


(3) 開始安裝程式

ports會使用「fetch (1)」這隻程式去下載檔案,
先更改下載來源位置以加速下載:
# vim /etc/make.conf
MASTER_SITE_BACKUP?= \
http://FreeBSD.cs.nctu.edu.tw/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}

cd到port的資料夾目錄下,接著make install clean開始安裝ports。

例如我要安裝vim:
# whereis vim
vim: /usr/ports/editors/vim
# cd /usr/ports/editors/vim
# make install clean

make install clean 做了以下三件事:
# make (編譯)
# make install (安裝)
# make clean (刪除編譯用工作目錄(預設為work),此為編譯時的臨時檔案。)


(4) 刪除程式

方式1: pkg_delete
# pkg_info | grep app_keyword
# pkg_delete app_name

方式2: make deinstall
# cd port_directory
# make deinstall

方式2不會做任何dependency檢查,
而方式1會檢查,因此有時候會刪不掉檔案,
此時可以加上 -f 選項強制刪除:
# pkg_delete -f app_name


(5) 更新程式

使用一套好用的ports管理程式:「portmaster」,
這支程式可以很方便的安裝、更新ports。
位置: ports-mgmt/portmaster

舉一個生活中的例子:
有時候安裝大程式時,
程式安裝到一半,想說先睡個覺,隔天起床應該就會安裝好了,
沒想到醒來後,畫面竟然卡在一個選項要你選,這時一定會很想砸電腦吧 XD
此時就可以善用portmaster幫我們安裝ports囉!

以剛剛安裝vim為例子:
# portmaster -yBDG /usr/ports/editors/vim
其中 -G 的選項就是將所有選項都設定為default值,
他就不會安裝到一半跳出惱人的選項了。

更詳細的portmaster使用方式,
請參考:portmaster

portmaster 也可以用來升級程式,
然而有時升級程式時,會出現一些錯誤訊息。
例如已經安裝mysql55,但想升級成mysql56時,會出現以下錯誤:
「conflicts with installed package ... install files into the same place」
用pkg_delete也刪除不掉時,可以加上 -f 選項強制刪除後再安裝就可以了。


(6) 安全性檢查

使用「portaudit」檢查ports是否有已公開的安全性問題。
位置: ports-mgmt/portaudit

# portaudit -Fda
-F:抓取最新的漏洞資料庫 (Vulnerability Database)
-d:顯示漏洞資料庫的建立日期
-a:顯示已安裝套件中含有漏洞報告 (Vulnerability Report) 的套件


4. 其他

(1)
通常每一個軟體都有一個獨立的目錄,而目錄中有些檔案有其特定的用途。(port skeleton)
Makefile:安裝軟體的編譯設定,您可以修改這個檔案來設定我們在編譯及安裝軟體時的參數。
README.html:我們可以經由瀏覽 README.html 來查看所有 ports 目錄下的軟體說明。
distinfo:說明安裝所需要的檔案及其 MD5 的檢查資料。
pkg-comment:簡單的軟體描述。
pkg-descr:較詳細的描述,我們通常可以在裡面找到該軟體網頁的位置,使我們能到該網頁得到更多資訊。
pkg-plist:列出軟體將安裝的清單,安裝後會放在硬碟中的什麼地方。

(2)
有些 shell 會依據 PATH 環境變數的路徑,
把那些路徑的執行檔 cache 起來,來加速搜尋執行檔。
如果用的是這類的 shell,
那麼在裝完 port 後需要打 rehash 指令,才能執行新裝的執行檔。
而 rehash 指令可以在 tcsh 之類的 shell 上使用,若是 sh 的話,則是 hash -r。

(3)
在安裝程式時,
其他相關套件(dependency)的選項,有時候會不小心選太快(Enter按太快),
而 make config 又只能選擇目前安裝程式的選項,不能選其他套件的選項。
此時若要修改其他套件的選項,
可以使用 portmaster 加上 --force-config 選項,就可以強制重新安裝。
其他方法可以參考:在 make install clean 後如何再增加該套件其它選項

沒有留言:

張貼留言