把 FreeBSD 9.1 的套件管理機制從 pkg 轉到 pkgng

pkgng 是 FreeBSD 10.0 開始才有的套件管理機制

有鑑於 FreeBSD 9.1 上的 “pkg_install EOL is scheduled for 2014-09-01” 訊息不斷跳出來提醒 …

終於決定開始著手轉換至新的套件管理機制

方法參照:5.4. Using pkgng for Binary Package Management

FreeBSD 8.4 以後的版本可以直接執行(更早的版本需手動安裝ports-mgmt/pkg):
/usr/sbin/pkg

然後會出現:

The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]:

當然就回答 y 繼續
閱讀全文

用 bash-completion 增強 Bash shell 的自動補齊功能(apt-get / aptitude / portsnap … 等)

bash 預設的自動補齊功能只會補命令跟檔名而已,假如要 apt-get install openjdk-7-jre 的話只打了 openjdk-7- 按下 tab 是不會有效果的…

透過 bash-completion 這個套件的話就可以支援非常多常用工具的命令自動補齊,bash-completion 其實就是一堆 bash shell scripts 寫出來的自動補齊功能,基於 Ubuntu 的 GNU/Linux 分支可能都有內建了,如果沒有,手動安裝的方式也很簡單:

Debian/Ubuntu 系列用
sudo apt-get install bash-completion

如果是用 yum 來管套件的Linux distro (CentOS/Fedora/RHEL)
sudo yum install bash-completion

FreeBSD(新的套件管理系統請使用 pkg install 取代 pkg_add):
sudo pkg_add bash-completion

想知道 bash-completion 到底支援了多少命令,可以看一下他的 filelist (以 Debian sid 套件為例, 應該都大同小異):
http://packages.debian.org/sid/all/bash-completion/filelist

另外要注意的是,不是每個 distribution 裝起來的 bash-completion 都會幫你處理好自動取用 bash-completion 這件事,按照不同的系統可能要手動使用類似這樣的指令:
source /usr/local/share/bash-completion/bash_completion.sh

通常是會加在 bashrc 底下,system admin 的話加入系統預設的 bashrc 也是不錯的做法

用 Portmaster 升級已經安裝的 FreeBSD 套件

久久作一次,每次都要翻一下 man--help … 作個筆記把常用參數記下來…

-G 不做make config
-d 每次跑完都會作清理(make clean?)
-B 不把舊的套件打包成 package 備份
-w deinstall 之前把舊的共享函式庫備份起來
-P 有現成的 package 可以用就用 package(沒有要調整編譯參數的話可以省編譯時間)
--no-confirm 不跟使用者確認會進行安裝以及升級的清單
-a 檢查所有套件並升級
-y 所有提示問題都答 yes
-x 排除某個 port
--delete-build-only 砍掉只有在編譯時相依到的port
--delete-packages 安裝後把package砍掉
-g 把新的port順便打包成package (適合大量部署)
-v 輸出詳細資訊

Example:
portmaster -GdBPay --delete-packages --no-confirm -x apache24 -x php\*

以上是升級 apache24 和 php 開頭以外的所有套件,可以用 package 就用,用完就砍掉,每次編譯完都作清理,不用確認要升級/安裝哪些 ports,不把舊的 port 備份成package,所有問題自動回答 yes