Armadilloフォーラム

USBメモリを用いたストレージ暗号化用のSWUpdate

gt777

2023年6月16日 15時18分

お世話になっております。

https://armadillo.atmark-techno.com/forum/armadillo/15730
先日上記のフォーラムでトライ&エラーでストレージ暗号化を完了しましたので、現在SWUpdateを一気に行えるように整理を進めております。

①セキュアブート用SWUイメージインストール
②SRKハッシュ書き込み/確認/close/reset
③ストレージ暗号化+アプリケーションコンテナイメージ用SWUイメージインストール

の順序で作業をしているのですが、③のインストールでエラーが発生しております。
原因についてわかりますでしょうか。

■SWUpdateログ

armadillo:~# mount /dev/mmcblk1p1 /mnt
armadillo:~# TMPDIR=/tmp  swupdate -i /mnt/OS_enc/OS_enc.swu
SWUpdate v2022.12_git20230414-r0
 
Licensed under GPLv2. See source distribution for detailed copyright notices.
 
[INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE started :  Software Update started !
[INFO ] : SWUPDATE running :  [install_single_image] : Installing pre_script
[INFO ] : SWUPDATE running :  [read_lines_notify] : Updating base os: copying swupdate_preserve_files
[WARN ] : SWUPDATE running :  [read_lines_notify] : ----------------------------------------------
[WARN ] : SWUPDATE running :  [read_lines_notify] : WARNING: Reformatting appfs with encryption, current container images and
[WARN ] : SWUPDATE running :  [read_lines_notify] : WARNING: volumes will be lost.
[WARN ] : SWUPDATE running :  [read_lines_notify] : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : ERROR: cannot access '/tmp/btrfs-root.KPMoGR/boot_1': No such file or directory
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : /!\ Could not create boot/containers_storage subvol
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : Command failed: sh -c 'sh $1' -- /tmp//enc.zst.scripts_pre.sh
[ERROR] : SWUPDATE failed [0] ERROR : Error streaming enc.zst.scripts_pre.sh
[ERROR] : SWUPDATE failed [1] Image invalid or corrupted. Not installing ...
swupdate_image_write failed: Broken pipe
[ERROR] : SWUPDATE failed [0] ERROR : SWUpdate *failed* !
[INFO ] : No SWUPDATE running :  Waiting for requests...
armadillo:~#

■mkswu --showの結果(一部隠してます)

atmark@atde9:~/mkswu$ mkswu --show OS_enc.swu
# OS_enc.swu
 
# built with mkswu 4.12-13-gedb2018
swdesc_option ENCRYPT_ROOTFS
swdesc_option ENCRYPT_USERFS
 
swdesc_tar --version base_os 3.17.3-at.6.20230616.3 --preserve-attributes ../build-rootfs-v3.17-at.6/baseos-x2-3.17.3-at.6.20230616.tar.zst
#  (encrypted)
 
swdesc_boot_linux  --version boot_linux 4 ../secureboot/Image.signed
#  (encrypted)
 
swdesc_command  --version extra_os.disk_encryption 1 true
 
swdesc_boot_enc  --install-if different  --version boot 5 ../secureboot/imx-boot_armadillo_x2.enc ../secureboot/armadillo_x2.dek_offsets
#  (encrypted)
 
swdesc_embed_container XXXXX.tar --version XXXXX 1
#  (encrypted)
 
swdesc_files --version extra_os.XXXXX 1 --dest /etc/atmark/containers/ XXXXX.conf
#  (encrypted)
コメント

at_dominique.m…

2023年6月16日 16時09分

gt777 さん

ドミニクです

> ①セキュアブート用SWUイメージインストール
> ②SRKハッシュ書き込み/確認/close/reset
> ③ストレージ暗号化+アプリケーションコンテナイメージ用SWUイメージインストール

はい、これでいいと思います。

> [ERROR] : SWUPDATE failed [0] ERROR : ERROR: cannot access '/tmp/btrfs-root.KPMoGR/boot_1': No such file or directory

すみません、appfs を暗号化した後の処理で現在のサブボリュームを作り直す修正を入れたつもりで、test ブランチでまだ確認してなかったコミットが入ってしまって逆に不具合になりました。
このエラーを今修正しましたので、mkswu のブランチを再び pull して swu を再生紙してください。

この armadillo は前回の armadillo と同じく /var/tmp がマウントされてない状態になってしまったので、インストーラーで初期化した方が早いと思いますが、救う対応としては前回と似たような手順です:

sed -i -e "s:[^ \t]*p5\t:$dev\t:" /etc/fstab
persist_file /etc/fstab
mount -a

mount コマンドで前回と同じく /var/lib/containers_readonly とボリュームが存在しないエラーが出力されると思いますが、無視していいはずです。

確認不足でまたお手数をかけして申し訳ございませんでした。
暗号化の部分以外は自動テストで問題なかったのでおそらく大丈夫と思いますが、リリース前にもう一度暗号化の設定を確認しておきます。

よろしくお願いします

gt777

2023年6月16日 16時54分

ドミニクさん

fstabを修正しましたが、mount -aでエラーとなりました。

armadillo:~# sed -i -e "s:[^ \t]*p5\t:$dev\t:" /etc/fstab
armadillo:~# persist_file /etc/fstab
armadillo:~# mount -a
mount: btrfs: mount point does not exist.
       dmesg(1) may have more information after failed mount system call.
mount: btrfs: mount point does not exist.
       dmesg(1) may have more information after failed mount system call.
mount: btrfs: mount point does not exist.
       dmesg(1) may have more information after failed mount system call.
mount: btrfs: mount point does not exist.
       dmesg(1) may have more information after failed mount system call.
armadillo:~# cat /etc/fstab
/dev/root       /                               ext4    ro,noatime                      0 0
tmpfs           /tmp                            tmpfs   nosuid,nodev                    0 0
/dev/mmcblk2p3  /var/log                        ext4    defaults,noatime                0 0
        /var/lib/containers/storage_readonly    btrfs   compress=zstd,discard=async,noatime,subvol=boot_0/containers_storage    0 0
        /var/app/rollback/volumes               btrfs   compress=zstd,discard=async,noatime,subvol=boot_0/volumes               0 0
        /var/app/volumes                btrfs   compress=zstd,discard=async,noatime,subvol=volumes              0 0
        /var/tmp                        btrfs   compress=zstd,discard=async,noatime,subvol=tmp                  0 0
/dev/mmcblk2gp1 /var/at-log                     vfat    defaults                        0 0
/dev/mmcblk2p4  /opt/firmware                   squashfs defaults                       0 0

インストーラーでの初期化を試そうと思いますが、セキュアブート完了済(署名済)の状態でのインストーラーは以下の手順で良いでしょうか?

sudo ./build_image.sh \
--rootfs baseos-x2-3.17.3-at.6.20230615.tar.zst ★セキュアブート時に使用したファイル
(略)
Successfully built /home/atmark/build-rootfs-v3.17-at.6/baseos-x2-3.17.3-at.6.20230615.img
 
sudo ./build_image.sh \
--boot ~/secureboot/imx-boot_armadillo_x2.signed \ ★署名済のブートローダー
--installer ./baseos-x2-3.17.3-at.6.20230615.img

at_dominique.m…

2023年6月16日 17時13分

gt777さん

マルティネです。

>

> armadillo:~# sed -i -e "s:[^ \t]*p5\t:$dev\t:" /etc/fstab
...
>         /var/lib/containers/storage_readonly    btrfs   compress=zstd,discard=async,noatime,subvol=boot_0/containers_storage    0 0

すみません、sed コマンドを mkswu からコピーして、変数が設定されてなかったんですね…ちょっと疲れが出てきました。
空になっているところを /dev/mapper/mmcblk2p5 でなおしたら mount できると思いますが、build_image コマンドはこれであっています。

> 確認不足でまたお手数をかけして申し訳ございませんでした。
> 暗号化の部分以外は自動テストで問題なかったのでおそらく大丈夫と思いますが、リリース前にもう一度暗号化の設定を確認しておきます。

とりあえず今のパターンで大丈夫そうです。本当にすみません…

コンテナのインストールも試して、それも大丈夫ですが、一つだけ注意点があります: ③ を TMPDIR=/tmp で実行しているため、大きいなコンテナを書き込めない可能性があります。(具体的に swdesc_embed_container と swdesc_pull_container の場合は 900MB 以降、 swdesc_usb_container の場合 1800MB 以降でエラーすると思います、podman は TMPDIR で一時データをコピーしています)

アプリケーションが大きい場合は別の swu でインストールしてください。

よろしくお願いします。

gt777

2023年6月16日 18時02分

マルティネさん

色々とお手数おかけしていてすみません。
fstabを修正し、作り直したSWUイメージでSWUpdateが完了しました。
暗号化やコンテナイメージ等、想定通りに構築できました。
ありがとうございました。

> コンテナのインストールも試して、それも大丈夫ですが、一つだけ注意点があります: ③ を TMPDIR=/tmp で実行しているため、大きいなコンテナを書き込めない可能性があります。(具体的に swdesc_embed_container と swdesc_pull_container の場合は 900MB 以降、 swdesc_usb_container の場合 1800MB 以降でエラーすると思います、podman は TMPDIR で一時データをコピーしています)
コンテナのサイズは300MB程度でしたので1つのSWUで動作できました。
今後大きなコンテナを扱う際は気を付けるようにします。

ちなみに、初期化用のインストールイメージですが、SDブートしてみたところ、無限にロールバックを繰り返していたようなので、u-bootで停止しました。build_image.shでImage.signedを指定する必要があるかもしれません。
(今回はfstabの修正で復旧したので困っていないですが、情報共有です)

/var/at-log/atlog

04x  0 00:00:00 armadillo WARNING uboot: reset by wdt
04x  0 00:00:00 armadillo WARNING uboot: Could not load linux image!
04x  0 00:00:00 armadillo WARNING uboot: Rolling back to mmcblk1p1
04x  0 00:00:00 armadillo WARNING uboot: reset by wdt
04x  0 00:00:00 armadillo WARNING uboot: Could not boot image
04x  0 00:00:00 armadillo WARNING uboot: Rolling back to mmcblk1p2
04x  0 00:00:00 armadillo WARNING uboot: reset by wdt
(略)

at_dominique.m…

2023年6月16日 18時54分

gt777さん

> ちなみに、初期化用のインストールイメージですが、SDブートしてみたところ、
> 無限にロールバックを繰り返していたようなので、u-bootで停止しました。
> build_image.shでImage.signedを指定する必要があるかもしれません。

build_rootfs.sh で生成した secureboot 対応のアーカイブの /boot/Image を Image.signed で差し替えたはずですので、それで起動できるはずです。
手元のインストーラーで起動できていますので、できるはずですが、細かい確認は必要になったらにしましょう。

よろしくお願いします。