treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Raspberry Pi OSをbullseyeからbookwormへアップグレード

前回<Raspberry Pi OSをbusterからbullseyeへアップグレード - treedown’s Report>Raspberry Pi OSをbullseyeにアップグレードしましたが、今回さらにbookwormへのアップグレードも試してみたのでご報告です。

テスト環境なので…

前回<Raspberry Pi OSをbusterからbullseyeへアップグレード - treedown’s Report>でbullseyeへのアップグレードが完了したRaspberry Piです。

ddイメージと元に戻す用のmicroSDという二つの備えがあるので、せっかくだからbusterにアップグレードしたRaspberry Pi OSを、最新のbookwormにもアップグレードする手順をやってみようかなと思いました。いざとなれば保存してあるddバックアップとか取ってあるmicroSDに差し替えれば以前の環境のまま起動出来ますし。

環境はbullseyeの最新(apt updateとapt upgradeが完了している)状態からスタートです。

sources.list編集

bullseyeのsources.listを編集していきます。

--------------------------------------------------------------

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

$ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ bullseye main

--------------------------------------------------------------

前回同様にコメントアウトしていない行は上記二行となります。

$ sudo vi /etc/apt/sources.list
$ sudo vi /etc/apt/sources.list.d/raspi.list

bullseyeの箇所をbookwormに書き換えました。

--------------------------------------------------------------

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

$ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ bookworm main

--------------------------------------------------------------

アップグレードの手順は変わらないので、ここからアップグレードを実施していきます。

Raspberry Pi OS 11⇒12がエラーで行き詰まった

sources.list(とraspi.list)の編集が完了完了したところでアップグレードを実施していきます。

$ sudo apt update

で更新しました。特にエラーはなし。
次にシステムの最小アップグレードを実行します。

$ sudo apt upgrade --without-new-pkgs

同じ手順なのですが、bullseyeアップグレードの時と相違して、bookwormアップグレードでは以下のようなエラーで処理がt停止してしまいました。

ん?

エラー「dpkg-deb: エラー: アーカイブ `/var/cache/apt/archives/dphys-swapfile_20100506-7.1+rpt3_all.deb' はメンバー 'control.tar.zst' の未知の圧縮を利用しています。終了します」発生で処理が停止してしまったようです。

--------------------------------------------------------------
libpam-runtime (1.5.2-6+rpt2+deb12u1) を設定しています ...
dpkg-deb: エラー: アーカイブ `/var/cache/apt/archives/dphys-swapfile_20100506-7.1+rpt3_all.deb' はメンバー 'control.tar.zst' の未知の圧縮を利用しています。終了します
dpkg: アーカイブ /var/cache/apt/archives/dphys-swapfile_20100506-7.1+rpt3_all.deb の処理中にエラーが発生しました (--unpack):
 dpkg-deb --control subprocess returned error exit status 2
(データベースを読み込んでいます ... 現在 43787 個のファイルとディレクトリがインストールされています。)
.../zlib1g-dev_1%3a1.2.13.dfsg-1_armhf.deb を展開する準備をしています ...
zlib1g-dev:armhf (1:1.2.13.dfsg-1) で (1:1.2.11.dfsg-2+deb11u2 に) 上書き展開しています ...
.../zlib1g_1%3a1.2.13.dfsg-1_armhf.deb を展開する準備をしています ...
zlib1g:armhf (1:1.2.13.dfsg-1) で (1:1.2.11.dfsg-2+deb11u2 に) 上書き展開しています ...
処理中にエラーが発生しました:
 /var/cache/apt/archives/dphys-swapfile_20100506-7.1+rpt3_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
--------------------------------------------------------------

bullseyeからbookwormのupgrade中にはbuster⇒bullseyeには遭遇しなかったエラーが発生してしまったようです。「apt upgrade --without-new-pkgs」の段階で、upgrade中にdpkgコマンドで'control.tar.zst'を展開しようとしたら、.zstは未知の圧縮を利用していますので終了してしまったということのようです。

zstdって何?

まずエラーの要因になっているのはzstdファイル(ファイル名:control.tar.zst)のようです。zstdファイルってなんでしょうか。

zstdファイルは正式名称を「Zstandard」といい、比較的新しめの圧縮ファイルの形式のようです。要するに.gzとか.zip等と同じアーカイブファイル。ただ、他の圧縮ファイルより高速に圧縮と展開が実行可能な設計になっているアーカイブファイルの作りをしているようです。(※ちなみに対象ファイルは.tar.gzのようにtarをzstd圧縮した形式<.tar.zst>になっています。)

今まで見たことなかったのですが、こういう圧縮ファイルもあるんですね。

zstdをインストールしてみる

くだんのエラーはこのzstdファイルの展開ができるアーカイバがないという要因でエラーになっているようです。tarを展開するtarコマンド、.gzを展開するgzip(gunzip)のように、.zstを展開するzstdが要求されるようです。

そこで、「$ sudo apt upgrade --without-new-pkgs」の最中で停止してしまったものの、(テスト環境という気楽さもあって)zstdをインストールしてみて動作に影響しているかどうかを確認してみます。

インストールは、

$ sudo apt install zstd

でインストールします。gcc-12-base rpcsvc-proto zstdといったパッケージの他、追加パッケージもインストールされていきました。

--------------------------------------------------------------
$ sudo apt install zstd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
(中略)
install-info (6.7.0.dfsg.2-6) のトリガを処理しています ...
libc-bin (2.36-9+rpt2+deb12u4) のトリガを処理しています ...
man-db (2.9.4-2) のトリガを処理しています ...
--------------------------------------------------------------

これで動作が変わるかを確認していきます。再度

$ sudo apt upgrade --without-new-pkgs

の実行です。

インストール後には「E: Sub-process /usr/bin/dpkg returned an error code (1)」で停止せず、どんどん画面が進んでいきました。

最終的に、

--------------------------------------------------------------
(省略)
ca-certificates (20230311) のトリガを処理しています ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
initramfs-tools (0.142) のトリガを処理しています ...

--------------------------------------------------------------

という感じで、「apt upgrade --without-new-pkgs」は処理を正常に完了してくれたようです。

システム全体をアップグレード

こうしてシステム全体のアップグレードを実行してみます。

$ sudo apt full-upgrade

--------------------------------------------------------------
# apt full-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:

(中略)

新バージョンの設定ファイル /etc/profile.d/wifi-check.sh をインストールしています ...
modemmanager (1.20.4-1) を設定しています ...
Created symlink /etc/systemd/system/dbus-org.freedesktop.ModemManager1.service → /lib/systemd/system/ModemManager.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ModemManager.service → /lib/systemd/system/ModemManager.service.
policykit-1 (122-3) を設定しています ...
Removing obsolete conffile /etc/pam.d/polkit-1 ...
Removing obsolete conffile /etc/polkit-1/localauthority.conf.d/50-localauthority.conf ...
Removing obsolete conffile /etc/polkit-1/localauthority.conf.d/51-debian-sudo.conf ...
dbus (1.14.10-1~deb12u1) のトリガを処理しています ...
--------------------------------------------------------------

こうして特にエラーで停止することもなくアップグレードは完了しました。

バージョン確認

アップグレード後にバージョン表記を確認してみます。

--------------------------------------------------------------

# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
NAME="Raspbian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

--------------------------------------------------------------

# cat /etc/debian_version
12.1

--------------------------------------------------------------

バージョンはDebian 12 bookwormベースのRaspberry Pi OSにアップグレードできました。

前回のように再起動後に問題を発見するかもしれないので、

# systemctl reboot

でシステムを再起動して動作確認します。

特に問題なし、なので…

なんだか思ったよりもスムーズにアップグレードが完了したので、このままbookwormで稼働させてみようかなと思い始めてきました。

テスト用のmicroSDでアップグレードの確認をしたので、ddバックアップでイメージを作成(加えて<Raspberry Piのddバックアップとリストアテストをやってみる - treedown’s Report>のようにPiShrinkでイメージ縮小)し、本番用のmicroSDにリストアしました。

本番用のmicroSDに交換したRaspberry Piで起動確認、bookworm環境となったRaspberry Piでしばらく動作を確認していこうと思います。