Armadilloフォーラム

セキュアブートを有効にしたSDブートディスクの作成方法

tmygt

2025年7月25日 13時51分

==========
製品型番:AGX4500-C00D0
Debian/ABOSバージョン:
カーネルバージョン:
3G/LTE モジュール情報 (Debianのみ):
その他:
==========

以前 https://armadillo.atmark-techno.com/forum/armadillo/19198 でセキュアブート有効時にSDブートする場合、SDブートディスクを作る際に署名が必要と伺いました。

これを実施する場合 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-x2-securebo… の手順と https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro… の手順を組み合わせるのだと理解しています。
セキュアブートガイドの4.2.1の下記個所の引数を変える必要があると予想していますが、あっていますか? あっている場合、どのように変えればよいか教えていただけないでしょうか

[ATDE ~/secureboot_x2/build-rootfs]$ PATH=/sbin:$PATH ./build_image.sh -b ax2 \
    --srk $(cat /home/atmark/secureboot_x2/tmp/srk_hash.txt) \
    --encrypt all \
    --boot /home/atmark/secureboot_x2/out/imx-boot_armadillo_x2.signed \
    --boot-linux /home/atmark/secureboot_x2/out/Image.signed-mmc \
    --verity /home/atmark/secureboot_x2/verity_cert.pem /home/atmark/secureboot_x2/verity_key.pem \
    --installer baseos-x2-[VERSION].[DATE].img

なお、SDブートディスクから起動して、下記のことを実現したいと考えています

- 暗号化した `/var/app/volumes` の参照
- emmcのSWの更新

SDカード自体は暗号化しないことを想定しています。(暗号化しても構わないです)

よろしくお願いいたします。

コメント

at_satoshi.ohta

2025年7月25日 14時35分

太田です。

> - 暗号化した `/var/app/volumes` の参照

SDブートして linux を起動して、コンソールから Armadillo にログインした後、`/var/app/volumes` にアクセスしたいということでしょうか?
SD ブートをして、`/var/app/volumes` を参照したい理由をもう少し具体的に教えていただけますでしょうか?

> - emmcのSWの更新

eMMC のソフトウェアの更新であれば、以下の URL のように SWU イメージでも可能かと思いますが、microSD のインストールディスクイメージで行いたい理由を教えていただけますでしょうか?

https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-x2-securebo…

どうぞよろしくお願いいたします。

> SD ブートをして、`/var/app/volumes` を参照したい理由をもう少し具体的に教えていただけますでしょうか?

この領域にアプリのログを配置しています。何らかの不具合が発生してOSが起動できなかった場合に、ログを改修することを想定しています。

> eMMC のソフトウェアの更新であれば、以下の URL のように SWU イメージでも可能かと思いますが、microSD のインストールディスクイメージで行いたい理由を教えていただけますでしょうか?

こちらも上記と同様に、OSを起動できない状況での復元を想定しています

at_satoshi.ohta

2025年7月25日 17時13分

太田です。

教えて頂きありがとうございます。

> こちらも上記と同様に、OSを起動できない状況での復元を想定しています

こちらはセキュアブートガイドにありますように、インストールディスクイメージを1から作成し直し、そのインストールディスクでSDブートを実行して eMMC を更新して復旧する方法ではご都合が悪いでしょうか?

https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-x2-securebo…

> この領域にアプリのログを配置しています。何らかの不具合が発生してOSが起動できなかった場合に、ログを改修することを想定しています。

分かりました。
以下の流れで SD ブートして shell を起動することができます。
ただ、それだけでは不十分で、以下の手順だけでは暗号化された eMMC の /var/app や /var/log はマウントされません。
eMMC の /var/app や /var/log は shell に入る前に実行されるスクリプト(build-rootfs/image_firstboot/sbin/init)でマウントして、luks_unlock 関数を用いて復号する必要があります。
申し訳ありませんが、その方法はこちらでは試せておりませんので、build-rootfs 内のスクリプトを参考にしていただければ幸いです。

以下 SD ブートして shell を起動するまでの流れです。

ATDE での作業:

署名済みブートローダーの存在確認

[ATDE ~/secureboot_x2]$ ls out/imx-boot_armadillo_x2.signed
out/imx-boot_armadillo_x2.signed

なければ作成

[ATDE ~/secureboot_x2]$ ./secureboot.sh imxboot
:(省略)
Created /home/atmark/secureboot_x2/out/imx-boot_armadillo_x2.signed

インストールディスクイメージ改ざん防止のためのキーペアの生成

[ATDE ~/secureboot_x2/build-rootfs]$ cd ..
[ATDE ~/secureboot_x2]$ openssl req -x509 -nodes -days 3650 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \
 -keyout verity_key.pem \
 -out verity_cert.pem \
 -subj /CN="secureboot installer"
Generating an EC private key
writing new private key to 'verity_key.pem'

verityあり署名済み Linux カーネルイメージの作成

[ATDE ~/secureboot_x2]$ ./secureboot.sh linux \
 --initrd-type verity \
 --verity /home/atmark/secureboot_x2/verity_cert.pem
Logging build outputs to /home/atmark/secureboot_x2/tmp/linux.log
Building initrd for verity (first time is slow)
Signing linux image (verity)...
Created /home/atmark/secureboot_x2/out/Image.signed-verity

microSD カードに mage.signed-verity を書きこむために build-rootfs/ax2/image_firstboot/boot/Image にコピー

[ATDE ~/secureboot_x2]$  cp out/Image.signed-verity \
 build-rootfs/ax2/image_firstboot/boot/Image

SDブート用のディスクイメージを作成

[ATDE ~/secureboot_x2]$ cd build-rootfs
[ATDE ~/secureboot_x2/build-rootfs]$ PATH=/sbin:$PATH ./build_image.sh -b ax2  \
	--boot /home/atmark/secureboot_x2/out/imx-boot_armadillo_x2.signed  \
	--verity /home/atmark/secureboot_x2/verity_cert.pem /home/atmark/secureboot_x2/verity_key.pem
:(省略)
Successfully built /home/atmark/secureboot_x2/build-rootfs/baseos-x2-[VERSION].[DATE].img

あとは baseos-x2-[VERSION].[DATE].img を microSD カードに書き込んでください。

上記の手順で作成したディスクイメージで SD ブートから shell にログインできるかお試しただけますでしょうか?

どうぞよろしくお願いいたします。