Armadilloフォーラム

コンテナ自動起動について

yasuda0108

2022年3月4日 10時48分

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

下記2点リンク先を参考にコンテナ自動起動を試しておりますが、再起動後コンテナが自動起動されません。
問題点がありましたらご教示頂けますでしょうか。

https://armadillo.atmark-techno.com/blog/15349/10743
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro

以下現状です。

#Imageファイル
armadillo:~# podman images
REPOSITORY                 TAG            IMAGE ID      CREATED                 SIZE
localhost/image_name       qt-build_v0.1  10a0e7ad1a86  Less than a second ago  1.75 GB
 
#コンテナ
armadillo:~# podman ps -a
CONTAINER ID  IMAGE                               COMMAND     CREATED                 STATUS                             PORTS       NAMES
6a6382bab95e  localhost/image_name:qt-build_v0.1  ls /        About a minute ago      Exited (0) About a minute ago                  qt-auto
 
#コンテナ(-aを付けない場合何も表示されない)
armadillo:~# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
 
#コンテナ作成時コマンド
# podman run -itd --name=qt-auto \
--env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \
--env=QT_QPA_PLATFORM=linuxfb \
--device=/dev/dri \
--device=/dev/galcore \
--device=/dev/fb0 \
--volume=/sys:/sys \
--volume=/dev:/dev \
--volume=/run/udev:/run/udev \
--volume=/opt/firmware:/opt/firmware \
--privileged \
localhost/localhost/image_name:qt-build_v0.1 /bin/bash
 
#confファイル
#Windows上でメモ帳にて.conf作成後、G4へコピーし、viエディタで改行削除整備
#persist_fileにて永続化済のため、reboot後に消えていないことを確認済み
armadillo:~# cat /etc/atmark/containers/qt-auto.conf
image="localhost/image_name:qt-build_v0.1"
volumes="/sys:/sys /dev:/dev /run/udev:/run/udev /opt/firmware:/opt/firmware"
devices="/dev/dri /dev/galcore /dev/fb0"
readonly=true
autostart=yes
append_args=--env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu,--env=QT_QPA_PLATFORM=linuxfb
set_command ls /
 
#再起動時の状態
Welcome to Alpine!
 
The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.
 
 
Please note this system is READ-ONLY with a read-write overlayfs,
after updating password make sure to save new password with
# persist_file /etc/shadow
 
You can change this message by editing /etc/motd.
armadillo:~#
コメント

at_dominique.m…

2022年3月4日 11時31分

yasuda0108さん、

アットマークテクノのマルティネです。 お世話になっています。

下記2点リンク先を参考にコンテナ自動起動を試しておりますが、再起動後コンテナが自動起動されません。 問題点がありましたらご教示頂けますでしょうか。

以下の行動は正しいと思います。

podman ps -a の出力に ls -a のコマンドが実行された形跡があり、 ls のプロセスが終了されたのでコンテナも同時に終了されたとのことですね。

何を実行しようとしてしていますか? 手動の実行と同じくただshellを開いて次に podman attach ができる状態にしたかったら、set_command bash で同じく設定した上に append_args -ti で手動のコンテナと同じttyの作成命令を設定必要があります。

テストのため、再起動しなくても podman_start -a で起動時のコンテナを立ち上がりますので、コンフィグファイルの作成の時に使ってみてください。

ちなみに、コンフィグファイルですが:

# cat /etc/atmark/containers/qt-auto.conf
image="localhost/image_name:qt-build_v0.1"
volumes="/sys:/sys /dev:/dev /run/udev:/run/udev /opt/firmware:/opt/firmware"
devices="/dev/dri /dev/galcore /dev/fb0"
readonly=true
autostart=yes
append_args=--env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu,--env=QT_QPA_PLATFORM=linuxfb
set_command ls /

append_args は環境変数ではなくコマンドとして扱うべきなので、

append_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu --env=QT_QPA_PLATFORM=linuxfb

append_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
append_args --env=QT_QPA_PLATFORM=linuxfb

にしてください。

よろしくお願いします。

ご回答ありがとうございます。

実際に実施したい内容としましては、
コンテナ自動起動→QtAppディレクトリ移動→実行
になります。

#以下自動起動したい、手動の内容
 
#1 コンテナ起動
armadillo:~# podman start -a qt-test
#2 ディレクトリ移動
root@05bdef5007ed:/# cd /home/qttest
#3 実行
root@05bdef5007ed:/# ./qttest

at_dominique.m…

2022年3月4日 13時42分

> #1 コンテナ起動
> armadillo:~# podman start -a qt-test
> #2 ディレクトリ移動
> root@05bdef5007ed:/# cd /home/qttest
> #3 実行
> root@05bdef5007ed:/# ./qttest

了解しました。 最終的には append_args -w /home/qtestset_command ./qttest で実行することを推奨しますが、 先ほど提案した append_args -tiset_command bash で実装可能です: armadillo:~# cat /etc/atmark/containers/shell.conf image=localhost/at-debian-image:latest append_args -ti set_command bash armadillo:~# podman_start shell Starting 'shell' 0620a7f12653c31017164bc6134b7c76d74e5c6ebb5eb03b67bbe1a204be2b28 armadillo:~# podman attach shell root@0620a7f12653:/# cd ...
ctrl-p ctrl-q を入力 ("detach") armadillo:~#

ご丁寧に最終的な実行方法までお教えいただきありがとうございます。
無事、bash, 実行ファイルともに自動起動できました。

ご対応ありがとうございました。

at_dominique.m…

2022年3月7日 14時17分

yasuda0108さん

お待たせしました。
fbsplashだけでも問題ないようです。サービスをsysinitで有効にすると綺麗に黒い画面からsplashイメージに変わって、その次にコンテナで起動したwestonに移ります。
画面が黒いままの時間は数秒ありますが、u-bootのHDMIドライバーに開発が必要ためにこれ以上早く表示することはできません。今後実装するかもしれませんが今のところに予定がないです。

# PCなどで好みのイメージをppmに変更して、Armadilloに転送します
PC$ curl -O https://armadillo.atmark-techno.com/sites/armadillo.atmark-techno.com/files/2022-03/about_iot-gw_Armadillo-IoT_G4.png
PC$ convert about_iot-gw_Armadillo-IoT_G4.png about_iot-gw_Armadillo-IoT_G4.ppm
PC$ scp about_iot-gw_Armadillo-IoT_G4.ppm armadillo-g4:/boot/splash.ppm
about_iot-gw_Armadillo-IoT_G4.ppm                                    100%  633KB  25.4MB/s   00:00    
 
armadillo# cat /etc/init.d/fbsplash
#!/sbin/openrc-run
 
name="splash screen"
 
start() {
    fbsplash -s /boot/splash.ppm
}
armadillo# chmod +x /etc/init.d/fbsplash
armadillo# rc-update add fbsplash sysinit
armadillo# persist_file -vP /etc/init.d/fbsplash /boot/splash.ppm /etc/runlevels/sysinit/fbsplash
'/etc/init.d/fbsplash' -> '/mnt/etc/init.d/fbsplash'
'/boot/splash.ppm' -> '/mnt/boot/splash.ppm'
'/etc/runlevels/sysinit/fbsplash' -> '/mnt/etc/runlevels/sysinit/fbsplash'
armadillo# reboot

よろしくお願いします

ありがとうございます。

persist_fileのオプションが正しくない旨が表記されます。
こちらは、-rvでも問題ないのでしょうか?

armadillo:~# persist_file -vP /etc/init.d/fbsplash \
> /boot/pilerman.ppm /etc/runlevels/sysinit/fbsplash
Illegal option -P
Usage: /usr/bin/persist_file [options] file [more files...]
 
Options:
        -l      go lower in lower hierarchy, can be passed multiple times
        -r      recursive copy
        -d      delete path from layer
                for intermediate layer, this deletes any persistent copy
                and masks anything from the lower level
        -D      delete path from layer, but do not mask it afterward
        -a      apk mode: pass any argument after that to apk on rootfs
        -v      verbose
 
Note this directly manipulates overlayfs lower directories
so might need a reboot to take effect

at_dominique.m…

2022年3月8日 16時00分

> persist_fileのオプションが正しくない旨が表記されます。
> こちらは、-rvでも問題ないのでしょうか?

いいえ、-vP であっています。
-P は 2021年12月のアップデートで搭載されたので、アップデートしてください:
https://armadillo.atmark-techno.com/news/20220224/update-aiotg4
(アップデートの際にpersist_filesで保存したファイルは/etc/swupdate_preserve_filesに乗っていなかったら消えるのでご注意ください)

-P はまさに /etc/swupdate_preserve_files に自動的に追加するためのオプションなので、使わなくてもすぐ困るようなことはないと思いますが、更新あるいは自動更新しましょう。

今の手順をBaseOS 3.14版で行う場合は/bootにかけないと思いますので、その場合は別のところにしてください。

よろしくお願いします。

なるほど、コマンドの件承知しました。

アップデートについてですが、例えば

/etc/atmark/containers/qt-auto.conf
/boot/splash.ppm

など、追加したファイルを/etc/swupdate_preserve_filesにコピーしておく必要があるという事でしょうか?

at_dominique.m…

2022年3月8日 16時30分

> アップデートについてですが、例えば
> /etc/atmark/containers/qt-auto.conf
> /boot/splash.ppm
> など、追加したファイルを/etc/swupdate_preserve_filesにコピーしておく必要があるという事でしょうか?

/etc/atmark下のファイルはデフォルトの設定では自動的にコピーされますので、コンテナのコンフィグファイルに関しては問題なく使いつづけます。
他のファイルは基本的に「変更されそう」なファイルだけをデフォルトに入れたので、/boot/splash.ppmはそちらに乗っていません。
マニュアルにちゃんとした手順を書いてサポートするやり方が決まればそのファイルを追加すると思いますが、今のところは自分で管理するしかありません。

デフォルトになっている詳細はこちらで確認できます:
https://github.com/atmark-techno/mkswu/blob/main/scripts/pre_rootfs.sh#…

(バージョン管理されてるので、バージョンの部分を変更しない限りは自由に足し引きできます)

何かまだ不明な点あったら聞いてください。

よろしくお願いします

ご説明ありがとうございました。

バージョンアップ後、起動時画面設定について試してみます。
引き続きよろしくお願いいたします。

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

リンク先のものにバージョンアップの実施を致しました。
https://armadillo.atmark-techno.com/news/20220224/update-aiotg4

その際、下記で対応頂いた内容が更新され、削除されました。
https://armadillo.atmark-techno.com/forum/armadillo/10684
https://armadillo.atmark-techno.com/forum/armadillo/11028
※デバイスツリーアップデート→USBドライバアップデートの際、swupdateで更新した内容については、上書き更新されませんでしたので、
 今回も同様、更新されないものと考えてしまっていました。

以前作成したswuファイルを用いて復旧を試しましたが(フォーラム:デバイスツリーファイルについてにて作成)、
下記のようなエラーのため、アップデートできない状況です。

armadillo:~# mount -t vfat /dev/sda1 /mnt
armadillo:~# swupdate -i /mnt/kernel_update_plain.swu
Swupdate v2021.04.0
 
Licensed under GPLv2. See source distribution for detailed copyright notices.
 
[INFO ] : SWUPDATE started :  Software Update started !
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : /!\ Nothing to do -- failing on purpose to save bandwidth
[ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
[ERROR] : SWUPDATE failed [0] ERROR : Command failed: sh -c 'rm -rf ${TMPDIR:-/var/tmp}/scripts && mkdir ${TMPDIR:-/var/tmp}/scripts && cd $
{TMPDIR:-/var/tmp}/scripts && tar x -vf $1 && ./swupdate_pre.sh' -- /var/tmp//scripts.tar.zst.enc
[ERROR] : SWUPDATE failed [0] ERROR : Error streaming scripts.tar.zst.enc
[ERROR] : SWUPDATE failed [1] Image invalid or corrupted. Not installing ...
[INFO ] : No SWUPDATE running :  Waiting for requests...

ついては、下記2点ご回答お願い致します。
①こちら復旧するためには、どのような手順を追っていくのが良いのでしょうか。
②アップデートの際に、過去実施したswupdateの内容が消えないようにするためには、どうすれば良いのでしょうか。

at_dominique.m…

2022年3月9日 13時57分

yasuda0108さん、

お世話になっています。

> ※デバイスツリーアップデート→USBドライバアップデートの際、swupdateで更新した内容については、上書き更新されませんでしたので、
>  今回も同様、更新されないものと考えてしまっていました。

base_os 以外の物を更新するときに rootfs をそのままコピーして、swu の内容を足す形になりますが、
base_os を更新する度に空の状態からアップデートをインストールします。
その際、/etc/swupdate_preserve_files に記載されてる内容だけをアップデートの前後にコピーして、そのファイルだけが残ります。

> その際、下記で対応頂いた内容が更新され、削除されました。
> https://armadillo.atmark-techno.com/forum/armadillo/10684
> https://armadillo.atmark-techno.com/forum/armadillo/11028

この二つのリンクを見ると,「POST /boot」を/etc/swupdate_preserve_files に追加するので、手動で入れたカーネルやdtbが保存されます。

https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
の「9.7.5.1. swupdate_preserve_files について」に少し説明があります。

> [ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
> [ERROR] : SWUPDATE failed [0] ERROR : /!\ Nothing to do -- failing on purpose to save bandwidth
> [ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------

このエラーは「更新されるような内容がこのアップデートにありません」の意味で、
現在起動中の Armadillo にすでにこの swu をインストールしたときに表示されます。

今回、まったく同じ物でもいいので、/etc/sw-versions を手動で編集してこの swu のバージョン(extra_os*等)を消したらまたインストールできます。
swu だけで対応したい場合にはただ swu の中のバージョンを上げればまたインストールできます。

本来、extra_os.*のアップデートはその内容をswupdate_preserve_filesに載せるべきと考えていますので、
同じ swu を何回もインストールすることは少ないと思っています。

> ①こちら復旧するためには、どのような手順を追っていくのが良いのでしょうか。
> ②アップデートの際に、過去実施したswupdateの内容が消えないようにするためには、どうすれば良いのでしょうか。

この二つの質問に答えたと思いますが、何か不明な点があったらまた聞いてください。

よろしくお願いします。

> base_os 以外の物を更新するときに rootfs をそのままコピーして、swu の内容を足す形になりますが、
> base_os を更新する度に空の状態からアップデートをインストールします。
> その際、/etc/swupdate_preserve_files に記載されてる内容だけをアップデートの前後にコピーして、そのファイルだけが残ります。

内容について、理解いたしました。

>
> この二つのリンクを見ると,「POST /boot」を/etc/swupdate_preserve_files に追加するので、手動で入れたカーネルやdtbが保存されます。
>
> https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
> の「9.7.5.1. swupdate_preserve_files について」に少し説明があります。
>
>

> > [ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
> > [ERROR] : SWUPDATE failed [0] ERROR : /!\ Nothing to do -- failing on purpose to save bandwidth
> > [ERROR] : SWUPDATE failed [0] ERROR : ----------------------------------------------
> 

>
> このエラーは「更新されるような内容がこのアップデートにありません」の意味で、
> 現在起動中の Armadillo にすでにこの swu をインストールしたときに表示されます。
>
> 今回、まったく同じ物でもいいので、/etc/sw-versions を手動で編集してこの swu のバージョン(extra_os*等)を消したらまたインストールできます。
> swu だけで対応したい場合にはただ swu の中のバージョンを上げればまたインストールできます。

既にインストール済みと認識されてしまう為に、swuの再インストールが出来ないということですね。
現状の/etc/sw-versionsですが、下記extra_os.initial_setup 1以外を上書き消去すれば再インストールできるということでしょうか。

armadillo:~# ls /etc/sw-versions
/etc/sw-versions
armadillo:~# cat /etc/sw-versions
base_os 3.15.0-at.3
extra_os.initial_setup 1
extra_os.kernel 5.10.82-1
extra_os.preserve_dtb 1
extra_os.firmware-moxa 1
other_boot 2020.04-at5
boot 2020.04-at5

> 本来、extra_os.*のアップデートはその内容をswupdate_preserve_filesに載せるべきと考えていますので、
> 同じ swu を何回もインストールすることは少ないと思っています。

デバイスツリー/USBドライバ設定にて実施したswupdateは、swupdate_preserve_filesに載っていないということでしょうか?

at_dominique.m…

2022年3月9日 14時39分

> > このエラーは「更新されるような内容がこのアップデートにありません」の意味で、
> > 現在起動中の Armadillo にすでにこの swu をインストールしたときに表示されます。
> >
> > 今回、まったく同じ物でもいいので、/etc/sw-versions を手動で編集してこの swu のバージョン(extra_os*等)を消したらまたインストールできます。
> > swu だけで対応したい場合にはただ swu の中のバージョンを上げればまたインストールできます。
>
> 既にインストール済みと認識されてしまう為に、swuの再インストールが出来ないということですね。

はい。
手動インストールするだけであれば面倒に思えるかもしれませんが、自動インストールでは永遠に同じ物をダウンロードすると困ります。

> 現状の/etc/sw-versionsですが、下記extra_os.initial_setup 1以外を上書き消去すれば再インストールできるということでしょうか。

そうですね、今のswuに使われてるバージョンが分かりませんが恐らくインストールできます。
.descファイルに確認すれば確認できますが、以下のコマンドですでに作成された .swu でも確認できます:

$ cpio --quiet -i --to-stdout sw-description < usb_container_nginx.swu | grep VERSION
  #VERSION container_nginx 1
  #VERSION extra_os.nginx 1

> > 本来、extra_os.*のアップデートはその内容をswupdate_preserve_filesに載せるべきと考えていますので、
> > 同じ swu を何回もインストールすることは少ないと思っています。
>
> デバイスツリー/USBドライバ設定にて実施したswupdateは、swupdate_preserve_filesに載っていないということでしょうか?

いいえ、インストール方法関係なくバージョンで許された部分は実行されます。
恐らくですが、最初にインストールした swu で swupdate_preserve_files の更新がなくて、それ以降の swu が同じバージョンで swupdate_preserve_files の部分が実行されませんでしょうか?
リンクしてくださったフォーラムの記事をもう一度よんでいたら、dtbの部分は「extra_os.kernel 5.10.0-1」で設定されてますが、現在の sw-versions に 5.10.82-1 が乗ってますので、swu の swupdate_preserve_files の部分が実行されなかったと思います。

念のため、swu でインストールした後に swupdate_preserve_files の内容を確認してください。

よろしくお願いします。

ご指摘いただいた方法で、無事再インストールが完了しました。
ありがとうございました。

ちなみにですが、現在のetc/swupdate_preserve_filesは下記になります。

armadillo:~# cat /etc/swupdate_preserve_files
### Files listed here will be copied over when rootfs is updated
### You can freely add or remove files from the list, removed
### entries will not be added back as long as the below line is
### kept intact. Do not remove or change!
PRESERVE_FILES_VERSION 2
 
# file can be prefixed with POST to be copied after rootfs is
# extracted, e.g.
#POST /boot
# would preserve the installed kernel without rebuilding a custom
# image if uncommented (destination is removed before copy)
 
# v1 list: base files, swupdate, ssh and network config
/etc/atmark
/etc/fstab
/etc/motd
/etc/conf.d/overlayfs
/etc/swupdate_preserve_files
 
/etc/hwrevision
/etc/swupdate.cfg
/etc/swupdate.pem
/etc/swupdate.aes-key
/etc/runlevels/default/swupdate-hawkbit
/etc/conf.d/swupdate-hawkbit
/etc/runlevels/default/swupdate-url
/etc/conf.d/swupdate-url
/etc/swupdate.watch
 
/etc/runlevels/default/sshd
/etc/ssh
/root/.ssh
/home/atmark/.ssh
 
/etc/hostname
/etc/network
/etc/resolv.conf
/etc/NetworkManager/system-connections
 
# v2 list: dtb symlink, ca-certificates, local.d
/boot/armadillo.dtb
/usr/local/share/ca-certificates
/etc/local.d
/etc/runlevels/default/local
/boot/armadillo_iotg_g4-at-dtweb.dtb
/boot/armadillo_iotg_g4-at-dtweb.dtb

デバイスツリー変更(kernel_update_plain.desc)の方は、/etc/swupdate_preserve_filesにコピーされているようです。
USBドライバ(kernel_firmware_update.desc)の方は、/etc/swupdate_preserve_filesにコピーできていないように見えます。
何か問題点がありましたら、ご指摘頂けますと幸いです。

atmark@atde9:~/mkswu$ cat update-dtb/kernel_update_plain.desc
# We expose `--install-if different` here in two different ways for
# demonstration purpose (either using the switch or setting the variable)
# Anything below the variable being set will have the switch automatically
# set unless they specify --install-if higher manually
# Note that if a component is installed in both modes, the swu generation
# will fail.
 
 
# armadillo.dtb link send 
swdesc_files --version extra_os.kernel 5.10.82-1 --dest /boot \
	armadillo.dtb armadillo_iotg_g4-at-dtweb.dtb
 
# add the kernel to files to be preserved on OS update
swdesc_command --version extra_os.preserve_dtb 1 \
        'echo /boot/armadillo_iotg_g4-at-dtweb.dtb >> /etc/swupdate_preserve_files'
 
atmark@atde9:~/mkswu$ cat for-moxa-uport1130/kernel_firmware_update.desc
# We expose `--install-if different` here in two different ways for
# demonstration purpose (either using the switch or setting the variable)
# Anything below the variable being set will have the switch automatically
# set unless they specify --install-if higher manually
# Note that if a component is installed in both modes, the swu generation
# will fail.
 
 
swdesc_files --version extra_os.kernel 5.10.82-1 \
	--install-if different --dest /boot \
	"Image"
 
swdesc_command "apk add linux-firmware-moxa" --version extra_os.firmware-moxa 1
 
install_if=different
swdesc_command --version extra_os.kernel 5.10.82-1 \
        'grep -qE "^POST /boot" /etc/swupdate_preserve_files || echo -e "POST /boot\nPOST /lib/modules" >> /etc/swupdate_preserve_files'

at_dominique.m…

2022年3月10日 9時50分

swupdate_preserve_files:
> /boot/armadillo_iotg_g4-at-dtweb.dtb
> /boot/armadillo_iotg_g4-at-dtweb.dtb
 
kernel_update_plain.desc:
> swdesc_files --version extra_os.kernel 5.10.82-1 --dest /boot \
> 	armadillo.dtb armadillo_iotg_g4-at-dtweb.dtb
> 
> swdesc_command --version extra_os.preserve_dtb 1 \
>         'echo /boot/armadillo_iotg_g4-at-dtweb.dtb >> /etc/swupdate_preserve_files'
 
kernel_firmware_update.desc:
> swdesc_files --version extra_os.kernel 5.10.82-1 \
> 	--install-if different --dest /boot \
> 	"Image"
> 
> swdesc_command "apk add linux-firmware-moxa" --version extra_os.firmware-moxa 1
> 
> install_if=different
> swdesc_command --version extra_os.kernel 5.10.82-1 \
>         'grep -qE "^POST /boot" /etc/swupdate_preserve_files || echo -e "POST /boot\nPOST /lib/modules" >> /etc/swupdate_preserve_files'

> デバイスツリー変更(kernel_update_plain.desc)の方は、/etc/swupdate_preserve_filesにコピーされているようです。
> USBドライバ(kernel_firmware_update.desc)の方は、/etc/swupdate_preserve_filesにコピーできていないように見えます。
> 何か問題点がありましたら、ご指摘頂けますと幸いです。

やはり、バージョンの問題でしょうか。
swupdate_preserve_files に kernel_update_plain の行が二回足されたので、そちらを2回とも(アップデートの前後)先にインストールしていですね。
そちらをインストールした時に、/etc/sw-versions に「extra_os.kernel 5.10.82-1」が記録されたので、次に「kernel_firmware_update」をインストールしたときに「extra_os.kernel > 5.10.82-1」の条件が満たされてなかったです。
こうなると、「extra_os.firmware-moxa」の部分だけがインストールされたので、恐らく前回と同じく/boot/Imageもインストールされなかったではないでしょうか?

前回何でインストールされなかったって疑問がありましたが、このバージョンの問題でしたね。
この「部分的にインストールする」機能はarmadilloが多い時にアップデートをスキップしても、swuに必要な物をすべて入れることで必要な物だけをインストールする機能の意味でしたが、こういう時には迷惑でしたね…こうならないように、できるだけ swu 一つ = バージョン 一つで管理すると楽だと思います。

当時に不便な物をおすすめして申し訳ございませんでした。直しましょう。

ちなみに、kernel_firmware_update の swupdate_preserve_files の部分は確かにカーネルを保存するようにしますが、ファームウェアの部分を保存しないので、この行が足されたとしてもアップデートの時にはシリアルを使えなくなったでしょう。

以下のコンフィグを使ってみてください。

swdesc_files --version extra_os.kernel_firmware_update 1 \
	--dest /boot "Image"
 
swdesc_command "apk add linux-firmware-moxa" --version extra_os.kernel_firmware_update 1
 
swdesc_command --version extra_os.kernel_firmware_update 1 \
        'echo -e "# kernel_firmware_update 1\nPOST /boot\nPOST /lib/modules\n/lib/firmware/moxa" >> /etc/swupdate_preserve_files'

違いは:
- バージョンをわかりやすく、swuファイルの名前にしました。
- swupdate_preserve_files の部分に /lib/firmware/moxa といつ足されたのコメントを足しました
- swupdate_preserve_files に「二回足さない」チェックを外しましたが、そちらはバージョンで管理するので必要ありません。

よろしくお願いします。

> やはり、バージョンの問題でしょうか。
> swupdate_preserve_files に kernel_update_plain の行が二回足されたので、そちらを2回とも(アップデートの前後)先にインストールしていですね。
> そちらをインストールした時に、/etc/sw-versions に「extra_os.kernel 5.10.82-1」が記録されたので、次に「kernel_firmware_update」をインストールしたときに「extra_os.kernel > 5.10.82-1」の条件が満たされてなかったです。
> こうなると、「extra_os.firmware-moxa」の部分だけがインストールされたので、恐らく前回と同じく/boot/Imageもインストールされなかったではないでしょうか?
>
> 前回何でインストールされなかったって疑問がありましたが、このバージョンの問題でしたね。
> この「部分的にインストールする」機能はarmadilloが多い時にアップデートをスキップしても、swuに必要な物をすべて入れることで必要な物だけをインストールする機能の意味でしたが、こういう時には迷惑でしたね…こうならないように、できるだけ swu 一つ = バージョン 一つで管理すると楽だと思います。
>
> 当時に不便な物をおすすめして申し訳ございませんでした。直しましょう。

確かに、今回も/boot/Imageはインストールされませんでした。
/etc/sw-versionsへ先に更新があるものに対し、アップデートがかからないようになる前回お教えいただいた仕様によって、/boot/Imageが更新されなかったということですね。内容理解いたしました。
なるべく一つのswuで管理していくように進めていきます。
こちらの知識不足でお手数をお掛けする中、ご丁寧に解説して頂き、誠にありがとうございます。

> ちなみに、kernel_firmware_update の swupdate_preserve_files の部分は確かにカーネルを保存するようにしますが、ファームウェアの部分を保存しないので、この行が足されたとしてもアップデートの時にはシリアルを使えなくなったでしょう。
>
> 以下のコンフィグを使ってみてください。
>

> swdesc_files --version extra_os.kernel_firmware_update 1 \
> 	--dest /boot "Image"
>  
> swdesc_command "apk add linux-firmware-moxa" --version extra_os.kernel_firmware_update 1
>  
> swdesc_command --version extra_os.kernel_firmware_update 1 \
>         'echo -e "# kernel_firmware_update 1\nPOST /boot\nPOST /lib/modules\n/lib/firmware/moxa" >> /etc/swupdate_preserve_files'
> 

>
> 違いは:
> - バージョンをわかりやすく、swuファイルの名前にしました。
> - swupdate_preserve_files の部分に /lib/firmware/moxa といつ足されたのコメントを足しました
> - swupdate_preserve_files に「二回足さない」チェックを外しましたが、そちらはバージョンで管理するので必要ありません。
>
確認しましたが、USBシリアル通信は確かに使用できませんでした。
お教えいただいたコンフィグファイルを使用し、再度トライしてみます。