ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Fedora IoT Editionでパッケージインストールして再起動しても変更した内容が反映されない問題

Fedora IoT EditionはFedoraのバージョンの一つで、特徴としてパッケージ管理にostreeを利用しています(Fedora IoT Edition的にはrpm-ostree)。 Fedora IoT Editionを最近使い始めたのですが、以前はうまく行った方法でパッケージをインストールしようとするとなんか失敗する問題が起きるようになりました。

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

問題への対処

エラーで検索したら、次の報告を見つけました。

github.com

ask.fedoraproject.org

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が修正されるまではワークアラウンドの適用が必要そうです。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。