在 MS Windows 中安裝軟體時,通常是執行叫
setup.exe 或 install.exe 的安裝程式來安裝已經預先編譯好並打包過的程式, 安裝過程中還會幫順便幫使用做一些系統設定,要移除已安裝的東西則是用
uninstall 來刪除檔案。
Linux 中的 rpm , dpkg , portage , apt-get 也是用來安裝或移除預先編譯好的 binary 軟體套件。
FreeBSD 設計了 ports、packages 兩種方式讓我們來安裝軟體,如果懶得花時間自行編譯軟體,或是沒有調整軟體編譯選項的需求,則可以採用類似前述
MS Windows 或是 Linux rpm 機置的 packages ,packages 其實是別人預先利用 ports 將軟體編譯好,最後再把程式及其相關的資料壓縮打包好後,以
Binary 方式發行的軟體,FreeBSD 已經打包了上萬個軟體置於網站上,我們只要執行一道指令即可輕鬆地安裝好各種軟體。
在 FreeBSD 中有一些 pkg_ 開頭的系統工具可以用來安裝/移除/查詢/產生 packages。
你可以執行 ls /usr/sbin/pkg_* 看到下面的工具:
- /usr/sbin/pkg_info
- /usr/sbin/pkg_add
- /usr/sbin/pkg_delete
- /usr/sbin/pkg_update
- /usr/sbin/pkg_version
- /usr/sbin/pkg_create
- /usr/sbin/pkg_check
- /usr/sbin/pkg_sign
查詢已安裝的軟體
利用 pkg_info 這個工具,我們可以查詢目前安裝了哪些套件及其相關資訊, 例如:查看 package
到底包裝了哪些東西、執行什麼程序、和其它軟體的相依性......等。
pkg_info |
列出目前系統中已經安裝了哪些 packages,
如果後面有加上 pacakge 的名稱則顯示該 package 附的說明 |
pkg_info -D |
後面接要查詢的 pacakge 名稱,可顯示安裝軟體時的重要訊息 |
pkg_info -a |
列出目前系統中已經安裝了哪些 packages及其詳細的說明 |
pkg_info -L |
後面接要查詢的 pacakge 名稱,可列出該 package 的檔案清單 |
pkg_info -s |
後面接要查詢的 pacakge 名稱,可列出該 package 所需的磁碟空間 |
其它詳細的用法可以 man pkg_info
安裝軟體
安裝 FreeBSD 的 pacakges 很容易,只要用執行 pkg_add -v package存放路徑
即可開始安裝,後面接的 packages 檔案則可以由我們自己先行下載並存放在本機上,或是直接安裝放在遠端主機上的檔案 (給檔案的 URL)。
例如:想要安裝 zh-joe 這個軟體
方法一:已預先將軟體存放在 /tmp 目錄中
# pkg_add -v /tmp/zh-joe-2.8_5.tgz
方法二:給軟體所在的 URL
# pkg_add -v ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/zh-joe.tgz
方法三:多加 -r 參數,讓 FreeBSD 自動至預設的遠端網站下載、安裝
# pkg_add -vr zh-joe
說明:
方法三 利用 -r 的參數,預設的遠端主機是 ftp.freebsd.org , 我們可以利用 PACKAGESITE
這個環境變數來改為離我們較近的 FTP 站
例如,FreeBSD stable 版,先執行下面這行指令後再開始安裝:
setenv PACKAGESITE ftp://ftp.tku.edu.tw/OS/FreeBSD/packages/packages-stable/Latest/
如果 root 是使用 csh ,可以將上述指令加入 /root/.cshrc 中。
其它詳細的說明可以 man pkg_add
有什麼 packages 可用
因為 FreeBSD 的 packages 其實是經由 ports 打包而來的,ports/packages 已經很有系統分門別類放在各資料夾,我們可以在
FreeBSD 的網站中先利用關鍵字取得自己所要的 packages 名稱及其相關說明,所以當我們需要什麼軟體前可以先到下列網址挖寶:
- http://freebsd.csie.nctu.edu.tw/www.freebsd.org/data/ports/index.html
- http://www.freebsd.org/ports/index.html
刪除軟體
要刪除已安裝的 packages 則執行 pkg_delete -v package名稱
我們可以先用 pkg_info 查一下 package 的名稱,然後再用 pkg_delete
來刪除。
下面為刪除 zh-joe-2.8 的步驟:
# pkg_info | grep joe
zh-joe-2.8 Joe's own editor
# pkg_delete -v zh-joe-2.8
說明:
前例先用 pkg_info 列出所有已安裝的軟體,經由 grep joe
可以過濾出含有 joe 這個關鍵字眼的那行,查出 zh-joe 的 packages 名稱為 zh-joe-2.8
再用 pkg_delete 來刪除該 package 。
打包已安裝的軟體
利用 prots 辛苦編譯好的 ports 可以利用 make package 把相關的程式、資料及訊息壓縮打包成 package ,而已安裝在系統的
packages 檔案,可以利用 pkg_create 將分散到各目錄的檔案再集結成 package 與人分享。
不管是 packages 安裝的,或是用 ports 安裝的, FreeBSD 都會留安裝記錄到 /var/db/pkg 中, 利用裡面的資料檔即可將檔案包裝成
package 。
在 /var/db/pkg 的每個目錄中會有一些以加號+ 開頭大寫檔名的檔案
+COMMENT |
package的簡訊 |
用參數 -c |
+CONTENTS |
package的內容:檔案清單,目錄架構... |
用參數 -f |
+DESC |
package的說明 |
用參數 -d |
+INSTALL |
安裝時需執行的命令(script) |
用參數 -i |
+DEINSTALL |
移除時需執行的命令(script) |
用參數 -k |
例如:要包裝 zh-joe-2.8 ,我們可以執行
cd /var/db/pkg/zh-joe-2.8
pkg_create -c +COMMENT -d +DESC -f +CONTENTS zh-joe-2.8
這樣就會在目前的目錄中產生一個叫 zh-joe-2.8.tgz
也可以用
pkg_create -c +COMMENT -d +DESC -f +CONTENTS /tmp/zh-joe-2.8
讓 zh-joe-2.8.tgz 輸出到 /tmp 下。
最簡單的方式是利用 -b 的參數:(如果確認 packages 的名稱為 zj-joe-2.8)
pkg_create -b zh-joe-2.8
這樣就會在目前的目錄中產生該 package ,相關的設定檔會自動到 /var/db/pkg/zh-joe-2.8 中抓取,就不用加一大堆參數了!
系統必備的外加軟體
- 一般工具類
- rc_subr
- cvsup-without-gui
- ncftp3
- wget
- lynx
- portupgrade
- 編譯工具類
- bison (expat , gettext , libiconv , m4)
- libtool (13 14 15 三個版本)
- autoconf257 (expat , gettext , gmake , help2man , libiconv
, m4 )
- autoconf213 (m4)
- gmake (expat,gettext,libiconv)
- expat
- gettext
- libiconv
- m4
- 網路服務類
- HTTP
- apache / apache2
- mod_php4
- FTP
- Mail
- qpopper (autoconf213 m4)
- imap-uw (cclient)
- 其它
- smaba / samba3
- isc-dhcp3-server
- mysql40-server (mysql40-client)
北市文山區力行國小顏國雄
|