包管理與系統升級
FreeBSD同時提供了基於源碼編譯軟件包的Ports系統和基於預編譯二進制包的pkg包管理。
pkg
FreeBSD 10之後引入了新的pkg工具用於管理軟件包,常用指令類似與yum/apt/dnf:
# pkg search 軟件包名稱
<!-- 安裝刪除軟件包 -->
# pkg install 軟件包名稱
# pkg remove 軟件包名稱 <!-- 移除指定軟件包 -->
# pkg autoremove 軟件包名稱 <!-- 清理不需要的依賴 -->
<!-- 升級系統已經安裝的所有軟件包 -->
# pkg upgrade
<!-- 查看已安裝的軟件包信息 -->
$ pkg info <!-- 查詢所有已安裝的軟件包 -->
$ pkg info 軟件包名稱 <!-- 查詢某個已安裝軟件包的具體信息(包括軟件包的版本、來源、安裝選項等) -->
<!-- 依賴查詢理 -->
$ pkg info -d 軟件包名稱 <!-- 查詢指定已安裝軟件包的依賴信息 -->
$ pkg all-depends 軟件包名稱 <!-- 查找指定已安裝軟件包的依賴 -->
$ pkg rall-depends 軟件包名稱 <!-- 遞歸查找軟件包的所有依賴 -->
$ pkg required-depends 軟件包名稱 <!-- 查詢指定軟件包被哪些其它包依賴 -->
<!-- 展示手動安裝的軟件包 -->
# pkg prime-list
# pkg prime-origins <!-- 包含軟件包port路徑 -->
# pkg query -e '%a = 0' %o <!-- 直接通過屬性進行查詢 -->
<!-- 修改軟件包安裝原因 -->
# pkg set -A 1 軟件包名稱 <!-- 設置軟件包為自動安裝(可被pkg autoremove清理) -->
# pkg set -A 0 軟件包名稱 <!-- 設置軟件包為手動安裝 -->
Ports
Ports系統提供了官方源內所有軟件包的源碼樹,編譯安裝前能夠定製編譯參數,控制依賴項。
Ports源碼樹位於/usr/ports目錄之,首次使用前需要初始化Ports樹,執行:
# portsnap fetch extract
之後更新Ports樹執行:
# portsnap update
編譯Ports樹下某個軟件包的源碼只需進入對應的源碼目錄中,執行以下步驟:
-
make config進入交互式界面,配置編譯依賴 -
make執行編譯操作 -
make install編譯完成後執行安裝操作 -
make clean安裝完成後清理編譯生成的臨時文件
使用源碼編譯的軟件包安裝後同樣受到pkg包管理器的管理。
安裝系統更新
FreeBSD使用freebsd-update獲取和安裝系統補丁:
<!-- 獲取當前版本系統的更新,更新拉取完成後會進入文件變化的預覽介面,使用 q 鍵退出預覽 -->
# freebsd-update fetch
<!-- 安裝系統更新 -->
# freebsd-update install
FreeBSD常規系統更新僅接收當前版本號內的補丁性質更新,
普通系統更新不會改變主版本號以及副版本號。
系統版本升級
FreeBSD並非滾動發行版,系統有明確的版本劃分,
升級系統版本同樣使用更新工具freebsd-update。
升級系統到指定版本,執行指令:
# freebsd-update -r 目標系統版本 upgrade
當前支持的系統列表可從FreeBSD官網查詢。
以FreeBSD 10.1正式版為例,執行指令:
# freebsd-update upgrade -r 10.1-RELEASE
之後系統會開始下載升級所需要的補丁,下載完成之後,執行更新指令:
# freebsd-update install
系統版本升級後pkg工具不可使用
問題說明:
系統版本升級後,FreeBSD的包管理器pkg可能會出現動態鏈接庫缺失的問題,錯誤信息如下:
ld-elf.so.1: Shared object "libssl.so.111" not found, required by "pkg"
相關討論參考FreeBSD Forums。
解決方案:
FreeBSD提供了pkg工具的靜態編譯版本pkg-static,可使用該工具重新安裝pkg:
# pkg-static install -f pkg