FreeBSD 15.1-RELEASE Now Available -- 重要な情報があります、freebsd-update を実行する前に是非お読みください!
15.1-RELEASE が 6月16日付けでリリースされました。
FreeBSD 15.1-RELEASE Announcement
FreeBSD 15.1-RELEASE Release Notes
FreeBSD 15.1 Hardware Notes
freebsd-update で 15.1-RELEASE にアップグレードする前に必ず読んでください
これは Release Notes にも Announce にも記載されていない重要な注意事項です。AMD・Intel を問わず GPU を使用してデスクトップ環境で運用しているユーザーは、以下の手順を踏まないとアップグレード後に起動できなくなります。
何が起きるか
freebsd-update upgrade を実行して 15.1-RELEASE にアップグレードし、再起動すると、amdgpu や i915kms などの GPU ドライバがカーネルパニックを引き起こし、システムが起動しません。pkg upgrade でも 解決できません。
なぜ起きるか
FreeBSD のパッケージリポジトリは、ポイントリリース直後はひとつ前のバージョン(15.0)向けにビルドされたパッケージを提供しています。15.1 向けのパッケージが揃うまでには、リリース後しばらくの移行期間があります。
一般的なパッケージはABIの互換性があるため問題ありませんが、drm-66-kmod のようなカーネルモジュールは LinuxKPI という仕組みに依存しており、LinuxKPI の内部インタフェース(KBI)は後方互換性なしに頻繁に変更されます。そのため、動作中のカーネルとまったく同じソースでビルドされたモジュールでなければ、ロード時にパニックします。
実は freebsd-update upgrade を実行すると冒頭にこの警告が表示されています。
The following modules have been installed from packages. As a consequence they might not work when performing a major or minor upgrade. It is advised to rebuild these ports:
しかし、対象となる ports の一覧が長いと、このメッセージが画面外に流れてしまい、見落としやすい構造になっています。
影響を受ける GPU
AMD GPU(amdgpu)、Intel GPU(i915kms)、旧 AMD/ATI GPU(radeonkms)を使用しているシステムが対象です。NVIDIA GPU は別の仕組みのため影響が異なります。
対処手順
1. BE を保存する
upgrade 前の環境を BE に保存しておきます。freebsd-update install で自動的に BE が作られますが、これは作り忘れたときの保険として、手動で作成しておくことをおすすめします。自動で作成された BE は名前が自動生成されるため、後から見て迷子になる恐れがあります。
$ doas bectl create pre-15.1-202606161200
確認します。
$ doas bectl list
2. freebsd-update upgrade -r 15.1-RELEASE を実行する
freebsd-update upgrade の実行時はログを保存し、冒頭の警告を確認しましょう。
$ doas freebsd-update upgrade -r 15.1-RELEASE | tee /var/tmp/upgrade.log
$ head /var/tmp/upgrade.log
「rebuild these ports」という表示があれば、以下の手順が必要です。
3. Xを起動させず、コンソール環境での起動を設定する
コンソールで起動できる状態にするため、/etc/rc.conf の GPU ドライバと Display Manager をコメントアウトします。
# kld_list="amdgpu"
# lightdm_enable="YES"
AMD GPU の場合は amdgpu、Intel GPU の場合は i915kms、旧 AMD/ATI GPU の場合は radeon をコメントアウトします。NVIDIAについては状況が異なるため別途確認が必要です。
Display Manager は、lightdm、sddm、gdm、slim、xdm のいずれかが YES になっているはずです。該当する行をコメントアウトしてください。
リブートします。設定が完了しているか必ず確認してください。もし drm-gpu が読み込まれてパニックすると対処が非常に面倒です。
$ doas reboot
4. freebsd-update install を2回実行する
コンソールで起動する設定をできたら、手順通り freebsd-update install を2回実行します。
$ doas freebsd-update install
$ doas reboot
$ doas freebsd-update install
5. drm-kmod を ports からインストールする
pkg でインストールされている drm-66-kmod を削除します。
$ doas pkg remove drm-66-kmod
ports から drm-66-kmod をビルドしてインストールします。
$ cd /usr/ports/graphics/drm-66-kmod
$ doas make install clean
ここは ports からのインストールですが、あまり時間はかかりません。
完了したら /etc/rc.conf を元に戻して再起動します。
kld_list="amdgpu"
lightdm_enable="YES"
$ doas reboot
手順のまとめ
BE を保存する
freebsd-update upgrade -r 15.1-RELEASE を実行・ログ保存・警告確認
freebsd-update install(1回目・カーネル更新)
/etc/rc.conf をコメントアウトする ← ここが重要
reboot
コンソールでログイン
freebsd-update install(2回目・ユーザーランド更新)
reboot
コンソールでログイン
pkg remove drm-66-kmod
ports から make install clean
/etc/rc.conf を元に戻して reboot
upgrade した環境で起動できるようになったら、他の kmod も rebuild しておきましょう。どの ports を build すればよいかは、freebsd-update upgrade の時に保存した log の最初に列挙されています。私の場合は、 emulator/virtualbox-ose-kmod-72 の rebuild が必要でした。
FreeBSD コミュニティでの状況
この問題は FreeBSD Forums で広く議論されており、15.0 のリリース時から繰り返されている既知の構造的問題です。今後解決されていくものと思われますが、当面はこのような対処(ports でのビルド)が必要です。
BE を保存しておくことは、最大の防御策となります。もし、アップデートの最中に起動できない事態になった場合は、bectl activate で元のBE に戻れるようにしておきましょう。
これらの記事も、是非もう一度ご覧ください。
