Fedora IoT EditionはFedoraのバージョンの一つで、特徴としてパッケージ管理にostreeを利用しています(Fedora IoT Edition的にはrpm-ostree)。 Fedora IoT Editionを最近使い始めたのですが、以前はうまく行った方法でパッケージをインストールしようとするとなんか失敗する問題が起きるようになりました。
rpm-ostreeについては詳細はドキュメントを参照してください。
- https://docs.fedoraproject.org/en-US/fedora/latest/system-administrators-guide/package-management/rpm-ostree/
- https://github.com/coreos/rpm-ostree
すごい簡単に言うと、rpm-ostreeにはベースOSイメージがあって「rpm-ostree install」などを使って環境の変更ができます。 変更を実行するごとにいわゆるセーブポイント的なものを作っているので、新しい変更を加えて何かあれば前の状態に戻せる仕組みを持っています。
というわけで、早速使ってみます。Fedora 36 IoT Editionはインストール済みであることが前提です。今回はVMで動かしたので、ISOイメージを使っています。

ISOイメージを使ったFedora 36 IoT Editionのインストールについては他のエディション同様、インストーラーを使ってセットアップするだけと簡単です。
問題の概要
まずはアップデートを行ってみます。 念のため、現在のカーネルバージョンを確認しておき...
# uname -srv Linux 5.18.5-200.fc36.aarch64 #1 SMP PREEMPT_DYNAMIC Thu Jun 16 14:28:32 UTC 2022
次のようなコマンドで、アップグレードします。再起動を要求されるので、再起動を実行しました。
# rpm-ostree upgrade Receiving objects; 98% (8547/8651) 5.2 MB/s 367.3 MB... done Staging deployment... done Upgraded: NetworkManager 1:1.38.0-2.fc36 -> 1:1.38.2-1.fc36 NetworkManager-libnm 1:1.38.0-2.fc36 -> 1:1.38.2-1.fc36 ... uboot-images-armv8 2022.04-1.fc36 -> 2022.04-2.fc36 vim-data 2:8.2.5085-1.fc36 -> 2:9.0.189-1.fc36 vim-minimal 2:8.2.5085-1.fc36 -> 2:9.0.189-1.fc36 Run "systemctl reboot" to start a reboot # systemctl reboot Connection to 192.168.205.61 closed.
アップデートは特に問題なく終了します。再起動後、次のコマンドで状況を確認します。
# uname -srv
Linux 5.18.16-200.fc36.aarch64 #1 SMP PREEMPT_DYNAMIC Wed Aug 3 15:07:15 UTC 2022
# rpm-ostree status
Deployments:
● fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220813.0 (2022-08-13T13:18:12Z)
Commit: 691cd09666a5de5e245eeec8e64b668138fdc1547089b59560a679f3a14afc42
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220618.0 (2022-06-18T10:41:25Z)
Commit: 48fb8542e522a5004e4f0bb5f15e7cb8c3da4b54e69a970ef69a9858365cc678
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
- Linux kernelのバージョンが
5.18.5-200.fc36.aarch64から5.18.16-200.fc36.aarch64に更新されました。 - Deploymentsが2つに増えています。6.18のほうがインストール直後のバージョン、8.13のほうがアップデート後のバージョンです。 ここまでは想定通りで問題ありません。
次にCRI-Oをインストールしてみます。
# rpm-ostree install cri-o ... Changes queued for next boot. Run "systemctl reboot" to start a reboot # systemctl reboot Connection to 192.168.205.61 closed.
再起動後、コマンドを実行すると問題が発生している(警告が表示されている)のがわかります。
# rpm-ostree status
State: idle
Warning: failed to finalize previous deployment
error: Bootloader write config: grub2-mkconfig: Child process exited with code 1
check `journalctl -b -1 -u ostree-finalize-staged.service`
Deployments:
● fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220813.0 (2022-08-13T13:18:12Z)
Commit: 691cd09666a5de5e245eeec8e64b668138fdc1547089b59560a679f3a14afc42
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220618.0 (2022-06-18T10:41:25Z)
Commit: 48fb8542e522a5004e4f0bb5f15e7cb8c3da4b54e69a970ef69a9858365cc678
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
問題への対処
エラーで検索したら、次の報告を見つけました。
fedora-silverblueというまた別のFedora のバージョンでのIssueとして報告されていますが、rpm-ostree(イメージ)の問題のようにとれます。
GitHubのIssueの方にはいくつかワークアラウンドがコメントに残されていますが、最終的にはこのコメントを参考にして
再起動前にgrub2-mkconfigコマンドを実行することで回避できました。
# rpm-ostree install cri-o ... Changes queued for next boot. Run "systemctl reboot" to start a reboot # grub2-mkconfig ... ### END /etc/grub.d/41_custom ### done # systemctl reboot Connection to 192.168.205.61 closed.
再起動後に確認すると、今度は問題なく変更を適用できています。
# rpm-ostree status
State: idle
Deployments:
● fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220813.0 (2022-08-13T13:18:12Z)
BaseCommit: 691cd09666a5de5e245eeec8e64b668138fdc1547089b59560a679f3a14afc42
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
LayeredPackages: cri-o
fedora-iot:fedora/stable/aarch64/iot
Version: 36.20220813.0 (2022-08-13T13:18:12Z)
Commit: 691cd09666a5de5e245eeec8e64b668138fdc1547089b59560a679f3a14afc42
GPGSignature: Valid signature by 53DED2CB922D8B8D9E63FD18999F7CBF38AB71F4
# crio --version
crio version 1.24.1
Version: 1.24.1
GoVersion: go1.18.4
Compiler: gc
Platform: linux/arm64
Linkmode: dynamic
BuildTags: seccomp, selinux
SeccompEnabled: true
AppArmorEnabled: false
この問題は検索すると、ここ数日でいくつか報告されている問題みたいです。 Issueが修正されるまではワークアラウンドの適用が必要そうです。