Raspberry Pi OS を buster から bullseye に dist-upgrade

Raspberry Pi OS bullseye がリリースされていたので手元のRaspberry Pi 3 model B のOS をbuster からbullseye にアップグレードしてみました．

Bullseye – the new version of Raspberry Pi OS – Raspberry Pi

リリースノート

今回の部分抜き出し

今回の環境は以下のような感じです．

BOARD

Raspberry Pi 3 model B

OS

Raspberry Pi OS buster armhf

OS導入ストレージ

microSD 32GB

主なサービス

OpenSSH, samba

操作

ssh経由

バックアップ

/etc は etckeeper(git) で管理しているのでリモートにpush しておきます．/home は手動でバックアップ．
その他必要に応じてバックアップ．

もしくはストレージをまるごとイメージでバックアップ．(SD Card Copier/dd等)

buster を最新にする

Raspberry Pi OS buster を最新の状態します．

$ sudo mount -o remount,rw /boot (1)
$ sudo apt update (2)
$ sudo apt upgrade (3)
$ sudo reboot (4)

読み取りファイルシステムを書き込み可能に

パッケージ情報の更新

パッケージを最新に

必要に応じて再起動

操作ログを取得する

script コマンドで操作ログをファイルに書き出すようにしておきます．何か合った時に参照します．(接続元の端末でも保存しておくと例えばdisk fullなどのときにも保存されるので安心)

$ script -a ~/buster2bullseye_$(date +%F-%T).log

パッケージの状態をチェックする

$ dpkg --audit (1)
$ dpkg --get-selections | grep 'hold

エラーのあるパッケージがないか確認

ホールド状態のパッケージがないか確認

APT source-list ファイルの準備

/etc/apt/sources.list を書き換えます．buster を bullseye に変更．編集時には apt edit-sources コマンドを使うと文法チェックをしてくれる．

$ sudo apt edit-sources
$ cat /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi

/etc/apt/sources.list.d/ 以下も確認して，Raspberry Pi OS 以外のリポジトリはコメントアウトする．(apt edit-sources ${FILENAME} で編集可能)

パッケージ情報を更新する

$ sudo apt update

アップグレードに必要な容量があるか確認する

$ sudo apt -o APT::Get::Trivial-Only=true full-upgrade

読み込み専用ファイルシステムを書き込み可能にする

$ sudo mount -o remount,rw /boot

OpenSSH Server をアップグレードする

アップグレード中に新規の SSH 接続が出来ない ようなので前もってアップグレードしておく．(トラブルが起きなければ既存のセッションだけで問題ないはずだが念の為)

$ sudo apt install openssh-server

アップグレード後ssh 接続ができることを確認．

システムの最小アップグレード

$ sudo apt upgrade --without-new-pkgs

システムのアップグレード

$ sudo apt full-upgrade

手元の環境では full-upgrade 時に以下のような依存関係のエラーになりました．

$ sudo apt full-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Error!
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libc6-dev : Breaks: libgcc-8-dev (< 8.4.0-2~) but 8.3.0-6+rpi1 is to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

gcc-8-base パッケージを導入して再度 dist-upgrade を試みることで解決しました．

$ sudo apt install gcc-8-base libc6-dev
$ sudo apt full-upgrade

KMS video driver の設定

/boot/config.txt を編集します．ファイル内の dtoverlay=vc4-fkms-v3d 行をコメントアウトし，[all] セクション内に dtoverlay=vc4-kms-v3d を記述します．

[all]
#dtoverlay=vc4-fkms-v3d (1)
dtoverlay=vc4-kms-v3d (2)

コメントアウト

追記

再起動したら大体終わり．

後はサードパーティのAPT source-list ファイルを修正したり，アプリケーションの設定をしたり，bullseyeでサポートされなくなったパッケージを確認したり，アップグレード時に削除されたパッケージを確認したり……．

一通り設定が終わったらここでもバックアップをしておく．

参考URL

主に以下のページを参考にしました．

第4章 Debian 10 (buster) からのアップグレード

STICKY – How to upgrade a Buster image to Bullseye – Raspberry Pi Forums