FreeBSD port and pkg兩種安裝third-party software的方式
參考資料: Chapter 4. Installing Applications: Packages and Ports、第二十二章、軟體安裝:原始碼與 Tarball — for CentOS 5.x
我們回歸到最初,我們怎麼安裝tools的,通常有兩種方式
- 獲得原始碼,自己進行編譯,在編譯的時候可以設定各式各樣的選項(像是我要這個 tools 有哪些特殊功能等)。常用到的檔案像是 configure,自動偵測你的系統環境,產出一個 makefile,makefile 用來進行編譯,把原始碼編譯成可以被執行的 binary file。
所以input是原始碼,進過一連串的步驟,output 就是執行檔( binary file ),也就是我們熟知的,可以使用的 tool,當然在這之中會有其他要 link的函式庫、檔案等,都會自動幫我們安裝完成放在你選定的目錄。 - 下載已經編譯好的 binary file,通常都是用 default 的選項編譯,當然要下載對應平台的 binary file,因為 binary file 在編譯時有設定環境。
而 port 跟 pkg 就有點類似上面的 1 和 2,不過 pkg 比較像是個 package manager,類似 pip and npm。
重點就是, package(binaru file) 就是已經編譯好的 source code。
事實上,一般在 UNIX 安裝軟體時會經過幾個步驟。
1. 下載 source code
2. 解壓縮(This is typically a tarball compressed with a program such as compress(1), gzip(1), bzip2(1) or xz(1).)
3. 看一下 documentation
4. 使用 makefile and configure script
5. test and install
而 port 就是把上面要做的事情全部弄在一個 file。已經有超過 36000 個 application 在上面了。
port 跟 package 他們各自有優點以及缺點,詳細請看FreeBSD handbook。
如何查詢 tool
- 官方的網站,https://www.FreeBSD.org/ports/
- Dan Langille維護的網站FreshPorts.org
- 使用 pkg search command
- … 就不列出全部了,handbook有描述各式各樣搜尋的方法。
pkg
pkg 用來安裝以及管理 package (已經編譯好的 source code ),他只能管理這些 binary package。
並不是所有 FreeBSD 系統一開始都有安裝 pkg,較早的系統沒有pkg,所以要透過 port 來安裝,詳細請看 handbook 。pkg 使用的 binary package 都來自FreeBSD package mirrors (the repo)。
pkg.conf(5).查看 pkg configuration。其他相關的操作包刮安裝請看 handbook。
pkg 比較特別的是它有自己的 package database backup 機制。
port
port collection 是一個包括 make file, patched and description file的集合。他的預設位置在 /use/ports。
在我們使用 port 之前,要先安裝 port collection,handbook 使用 git 來安裝。
同樣,binary file 使用 pkg來管理,port 也有相關的工具可以來管理。
- Portmaster
- Portupgrade
- Synth
在使用 port 的時候,因為是自己編譯,會產生很多臨時的 work 目錄,因此要注意使用 make clean 避免 disk 爆掉。
注意port 跟 pkg可能會衝突,因為pkg預設的binary file是一季一季的更新(quarterly branch-releases),而port安裝的軟體都是最新的分支,所以可能造成 dependencies 有版本的差異,所以注意在使用兩者的時候要保持在同樣的branch