はじめに

FreeBSDのシステムの更新にはfreebsd-updateを利用しますが、jail環境でfreebsd-updateを利用する場合には若干の注意事項があります。

このページでは、jailのホスト環境(以下、便宜上「jailer」と呼びます)と、ホスト上に構築したjail環境(以下、便宜上「prisoner」と呼びます)でfreebsd-updateを利用する方法について、説明します。

freebsd-updateの設定ファイル

freebsd-updateの設定ファイルは「/etc/freebsd-update.conf」で、その中に以下の記述があります。
この記述により、freebsd-updateで更新する対象を選択することが可能です。

freebsd-updateの設定ファイル
Components world kernel src

worldはベースシステム、kernelはその名の通りカーネル、srcはソースコードです。

利用者がFreeBSDの開発者でない限り、srcは不要です。
また、jailerではworldとkernelは必須ですが、prisonerではkernelは不要です。

同一RELEASE内の更新

現在利用しているRELEASEに対し、最新のセキュリティパッチやOSの更新をする際には、jailerでもprisoner共に以下のようにします。

同一リリース内の更新(jailer、prisoner共通)
$ freebsd-update fetch
$ freebsd-update install

更新されるファイルにもよりますが、反映のために各種daemonの再起動が必要になる場合があります。

更新後のバージョンの確認
$ freebsd-version

12.4-RELEASE-p4

一般的に、freebsd-updateを行うと、パッチレベル(-p以降の数字)が更新されます。

RELEASEの更新

現在利用しているリリース(12.3-RELEASE)に対し、それよりも新しいリリース(12.4-RELEASE)に更新する場合には、jailerでもprisoner共に以下のようにします。

RELEASEの更新(jailer、prisoner共通)
$ freebsd-update upgrade -r 12.4-RELEASE

更新前と更新後で、FreeBSDのメジャーバージョン(x.y-RELEASEのxの部分)が増加するアップグレードを、メジャーバージョンアップグレード、マイナーバージョン(x.y-RELEASEのyの部分)が増加するアップグレードをマイナーバージョンアップグレードと呼びます。
FreeBSDの同一メジャーバージョン内では、ABI(アプリケーションバイナリーインタフェース)が同一であることが担保されており、バイナリ互換がありますが、メジャーバージョンが変わるとABIが変更されるため、自分でビルドしたプログラムやpkgから導入したアプリは再構築や更新する必要があります。
私の個人的な感覚ですが、メジャーバージョンアップデートはバイナリ互換が維持されないことによる様々な問題が発生する可能性があるため、あまりおすすめできないです。

また、jail環境では、jailerの方を先に更新し、その後にprisonerの方を更新するのが一般的です。

FreeBSDのバージョンアップグレードを行うと、システムのチェック後、パッチがダウンロードされ適用されます。
ユーザが設定を追記したファイル(「/etc/ssh/sshd_config」など)がある場合にも、強制的に置き換えられることはなく、設定が新しいファイルに自動的に引き継がれるか、差分が表示された後、何を残すかをユーザに問うメッセージが表示されますので、必要に応じて編集してください。

更新が完了すると、最後にユーザーに更新を促すメッセージが表示されますので、それに従いまずkernelを更新します。
kernelの更新後、再起動し、新しいkernelで起動します。

kernelの更新と反映(jailer)
$ freebsd-update install
reboot

システムが再起動したら、今度は以下のようにしてベースシステムを更新します。

ベースシステムの更新(jailer)
$ freebsd-update install
reboot

kernelの更新も、ベースシステムの更新も、同じコマンドになります。
また、更新後はメモリ上にあるプログラムとファイルシステム上のファイルが食い違う状況が発生しますので、ベースシステムの更新後にも再起動させることを強くおすすめします。

prisonerのRELEASE更新の注意点

前述の通り、jail環境ではjailerを先に更新し、その後にprisonerを更新します。
これは、更新中にトラブルの原因となる「古いOSバージョンのjailer上で、新しいOSバージョンのprisonerが動作する」状況を作らないようにするためです。

これまで書いてきた通り、jailerを更新した後に、prisonerでfreebsd-updateを実施しようとすると、多くの場合、以下のエラーが発生します。

prisoner更新中に発生するエラー
$ freebsd-update upgrade -r 12.4-RELEASE

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

これは文字通り、prisoner上で動作しているjailerのカーネルが既に更新後のRELEASEになってますよ、というエラーです。
このままでは、prisoner上の更新前のRELEASEのベースシステムを更新できないため、以下のようにしてこのチェックを通過できるようにします。

更新後のバージョンの確認
$ env UNAME_r=12.3-RELEASE freebsd-update upgrade -r 12.4-RELEASE

先程同様、システムのチェック後、パッチがダウンロードされ適用されます。
パッチの適用が完了したら、jailerの時と同様、kernelとベースシステムを更新してください。

kernelとベースシステムの更新(prisoner)
$ freebsd-update install
$ freebsd-update install

prisonerではkernelを再度読み込ませる必要がないため、再起動なしに「freebsd-update install」を2回繰り返すだけで問題ないです。
また、jailerの時と同様、更新後はメモリ上にあるプログラムとファイルシステム上のファイルが食い違う状況が発生しますので、ベースシステムの更新後にシステム全体を再起動させるか、jailを再起動させる(jailerで「/usr/sbin/jail restart」を実行する)ことを強くおすすめします。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。