🍣すしでもどうですか

略してすしどう。趣味のサーバーいじりとかメモ。

Jail 環境の freebsd-update upgrade

jail.conf で allow.chflags しているので Jail の中でも freebsd-update できますが、1つ1つ jexec とか ssh してやるのは面倒なのでホスト側からやりたい。

例えば 12.0-RELEASE から 12.1-RELEASE にアップグレードするとして、普通はホスト側で先に freebsd-update してカーネルのバージョンを上げてから各 Jail 環境も揃えていく感じになると思うのですが、

$ sudo freebsd-update -b /jails/hoge -r 12.1-RELEASE upgrade

とやると、

freebsd-update: Cannot upgrade from 12.1-RELEASE to itself

と言われてしまいます。

そこで、環境変数 UNAME_r を改変してしのぎます。

$ sudo env UNAME_r=12.0-RELEASE freebsd-update -b /jails/hoge -r 12.1-RELEASE upgrade

これで一発目の freebsd-update が動き出します。

終わったら次は freebsd-update install ですが、もう env は指定しなくても大丈夫です。 これが終わると再起動してもう一度 freebsd-update install するように言われます。これは本来はカーネルを読み込み直すためですので、この場合、すでに新しいカーネルで動いているため再起動は不要です。そのまま再度 freebsd-update install しましょう。

$ sudo freebsd-update -b /jails/hoge install
src component not installed, skipped
Installing updates...
Kernel updates have been installed.  Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
$ sudo freebsd-update -b /jails/hoge install
...

さらにその後、ports で入れたパッケージソフトウェアなどをリビルドしてから freebsd-update install です。くどいですね。 以上で終了です。

(2021/03/28 追記)

ちなみに jail の外から pkg upgrade とかするには -j を使います。

$ sudo pkg -j <jail name or id> upgrade

とかします。