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
と言われてしまいます。
$ 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
とかします。