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
以上