FreeBSDにインストールされたpkgの一覧がほしい

そんなものpkg info一発ですよねという話ですが、そういう話ではない。

どういうことか。
FreeBSDのメジャーバージョンアップや、メジャーバージョンアップでなくても、pkg quarterlyのタイミングなど、pkgをまるまる再インストールしたいことはよくあるわね。
じゃあpkg upgrade -fyですかね、と言うとさにあらず、上記のようなケースでは、orphanになったpkgも生まれていることがあるので、「今インストールされているpkgをまるまる再インストール」では駄目なんである。

いちばんいいのは、ほんとうに必要なpkgとそれが依存しているpkgを再インストールできることだ。

つまり、ここでのキモは「ほんとうに必要なpkg」を特定することにある。

非automatic packagesのリストにはpkg prime-list

明示的にインストールしたpkgを非automatic packagesと呼ぶ。
非automatic packagesの依存でインストールされたpackagesをautomatic packagesと呼ぶ。

非automatic packagesをリストするにはpkg prime-listを使う。
以下は実行例。

jd@xanadu ~> pkg prime-list
bash
chromium
clamav
cpufetch
darktable
doas
drm-kmod
fcitx-qt5
firefox
fish
git
ja-fcitx-mozc
ja-font-std
ja-font-vlgothic
ja-libreoffice
kde5
neofetch
obs-studio
pkg
psearch
py38-virtualenv
python
sudo
tmux
vscode
xorg
zh-fcitx-configtool

あとはこれをテキストファイルに書き出しておき、pkg delete -afyでpkg全削除したら、テキストファイルに書き出しておいたpkgをxargsを使うなどしてインストールすればよい。

pkg prime-origins

実はこのpkg prime-list、manで調べても出てこない。
不思議に思っていたが、実はこれはエイリアスなんだと。
/usr/local/etc/pkg.confにその記載がある。
中身を見ると、prime-originsというのもあるね。

prime-list: "query -e '%a = 0' '%n'",
prime-origins: "query -e '%a = 0' '%o'",

prime-originsのほうはその名の通りoriginsをつけてくれる。
実行例。

jd@xanadu ~> pkg prime-origins
shells/bash
www/chromium
security/clamav
sysutils/cpufetch
graphics/darktable
security/doas
graphics/drm-kmod
textproc/fcitx-qt5
www/firefox
shells/fish
devel/git
japanese/fcitx-mozc
japanese/font-std
japanese/font-vlgothic
japanese/libreoffice
x11/kde5
sysutils/neofetch
multimedia/obs-studio
ports-mgmt/pkg
ports-mgmt/psearch
devel/py-virtualenv
lang/python
security/sudo
sysutils/tmux
editors/vscode
x11/xorg
chinese/fcitx-configtool

以上