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

The FreeBSD Project

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

手順のまとめ

  1. BE を保存する

  2. freebsd-update upgrade -r 15.1-RELEASE を実行・ログ保存・警告確認

  3. freebsd-update install(1回目・カーネル更新)

  4. /etc/rc.conf をコメントアウトする ← ここが重要

  5. reboot

  6. コンソールでログイン

  7. freebsd-update install(2回目・ユーザーランド更新)

  8. reboot

  9. コンソールでログイン

  10. pkg remove drm-66-kmod

  11. ports から make install clean

  12. /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 に戻れるようにしておきましょう。
これらの記事も、是非もう一度ご覧ください。


いいなと思ったら応援しよう!