Armadilloフォーラム

abos-webの2038年問題対応

k.sato

2024年8月26日 17時08分

佐藤と申します。

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

2038年問題に対応するためにalpineコンテナで動作させています。
alpineコンテナ内のアプリ自体は2038/01/19 12:14:07_JST以降も動作しているようなのですが、
コンテナ内からREST APIを使用しての設定変更できず、確認したらabos-webが落ちています。
abos-webの不具合でしょうか?
対応していただけますか?

以上、よろしくお願い致します。

コメント

at_dominique.m…

2024年8月26日 18時03分

佐藤さん

お世話になっています、
マルティネです。

> 2038年問題に対応するためにalpineコンテナで動作させています。
> alpineコンテナ内のアプリ自体は2038/01/19 12:14:07_JST以降も動作しているようなのですが、
> コンテナ内からREST APIを使用しての設定変更できず、確認したらabos-webが落ちています。
> abos-webの不具合でしょうか?
> 対応していただけますか?

申し訳ございません、rust の不具合です:
https://github.com/rust-lang/libc/issues/3223

この issue は古いですが、修正の作業は進んでいます(最新: https://github.com/rust-lang/libc/pull/3791 )
この修正が入った際に次の alpine バージョンにも入りますので、来年のどこかに ABOS Web も修正される可能性が高いと思います。

大変お手数ですが、ネットワークに接続している機器として定期的な更新と強く推奨していますので、そのようにお願いします。

よろしくお願いします。

マルティネ様

佐藤です。

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

> 申し訳ございません、rust の不具合です:
> https://github.com/rust-lang/libc/issues/3223
>
> この issue は古いですが、修正の作業は進んでいます(最新: https://github.com/rust-lang/libc/pull/3791 )
> この修正が入った際に次の alpine バージョンにも入りますので、来年のどこかに ABOS Web も修正される可能性が高いと思います。
>
> 大変お手数ですが、ネットワークに接続している機器として定期的な更新と強く推奨していますので、そのようにお願いします。
定期的な更新について質問します。
コンテナについてはATDEのvscodeプロジェクト上から.swuを生成してアップデートすれば設定は引き継いだままなのですが、
ホスト側の設定変更したファイル等を残したままABOSの更新は行えるのでしょうか?

https://armadillo.atmark-techno.com/resources/software/armadillo-640/ba…
SWUイメージファイルをabos-webから更新という形ではクリアされますか?

以上、よろしくお願い致します。

at_dominique.m…

2024年8月27日 13時53分

佐藤さん、

マルティネです。

> 定期的な更新について質問します。
> コンテナについてはATDEのvscodeプロジェクト上から.swuを生成してアップデートすれば設定は引き継いだままなのですが、
> ホスト側の設定変更したファイル等を残したままABOSの更新は行えるのでしょうか?

ホスト側の設定は /etc/swupdate_preserve_files の設定どおりに引き継がれます。
デフォルト状態では、コンテナの設定や /etc/local.d のよく編集されるファイルは保存されていますが、必要でしたら persist_file -p か -P で他のファイル・ディレクトリを追加できます。
ATDE の vscode プロジェクトでインストールしている場合は何もしなくてもちゃんと残ります。

万が一、アップデートを試した後に何かのファイルがなくなった場合は:
- abos-ctrl mount-old で /target ディレクトリにアップデート前の状態の armadillo をマウントできますので、そこからファイルをコピーできます
- abos-ctrl rollback --allow-downgrade --reboot でアップデート前の状態に一度戻ってから swupdate_preserve_files を試してもう一度アップデートを試してください

> https://armadillo.atmark-techno.com/resources/software/armadillo-640/ba…
> SWUイメージファイルをabos-webから更新という形ではクリアされますか?

はい、このファイルを abos-web の SWU 画面に入れてアップデートされます。

よろしくお願いします

マルティネ様

佐藤です。

昨日、Armadillo-600の2024年8月 製品アップデートが来ていたためアップデートしてみました。
https://armadillo.atmark-techno.com/news/20240828/software-update-a600

swupdate -d '-u https://armadillo.atmark-techno.com/files/downloads
/armadillo-640/image/baseos-600-3.20.2-at.2.swu'

上記コマンドを使用してABOSのアップデートを行ったのですが、
uart1のコンソール出力が添付ファイルのところで止まってしまいます。

sshから接続してArmadilloにログインは出来ました。

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.
Last update on Thu Aug 29 09:01:32 JST 2024, updated:
  base_os: 3.20.2-at.1 -> 3.20.2-at.2
WARNING: upgrade_available wasn't either unset, 0, 1 or 2?
armadillo:~$ su root
Password:
/home/atmark # podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
/home/atmark #

コンテナも消えているのでしょうか?

ABOSアップデートをする前に何か変更しておかなければならないことがあったのでしょうか?

以上、よろしくお願い致します。

ファイル ファイルの説明
abosアップデート後の起動ログ.txt

佐藤さん、

> 上記コマンドを使用してABOSのアップデートを行ったのですが、

> uart1のコンソール出力が添付ファイルのところで止まってしまいます。
>
> コンテナも消えているのでしょうか?
>
> ABOSアップデートをする前に何か変更しておかなければならないことがあったのでしょうか?

大変申し訳ございません。何も必要ないはずです。
こちらで更新してみて問題なかったので、いくつか確認させてください。

> WARNING: upgrade_available wasn't either unset, 0, 1 or 2?

まず、このメッセージは気になります。

1/ 「fw_printenv」を実行していただければ、環境変数を読めないというエラーが出力されると思いますが、あってますか?コンソールの出力もそれが原因だと思います。
2/ 「cat /etc/fw_env.config」で変数管理のコンフィグを表示していただけますか?また、「ls /boot/uboot_env.d」でデフォルトの変数を用意しているかの確認もお願いします。環境変数を変更した場合は変更をそちらに登録する必要がありますが、デフォルトではデフォルトの値(00_defaults)があるはずで、今の変数読み取れない状態でそれ以前の問題になっていますね…
3/ 「lsblk | grep rootfs」で現在起動中の面も確認したいです。
4/ コンテナについては、 ls /etc/atmark/containers でコンフィグの有無の確認、または podman image list でコンテナイメージの存在の確認をお願いします
5/ 念のため、「abos-ctrl mount-old」で旧面をマウントして、 「ls /target/etc/atmark/containers」 と 「podman --storage-opt additionalimagestore=/target/var/lib/containers/storage_readonly/ image list」も確認してみましょう。そのデーターに問題なければ復帰はまだ可能です。

よろしくお願いします

マルティネ様

佐藤です。

> 1/ 「fw_printenv」を実行していただければ、環境変数を読めないというエラーが出力されると思いますが、あってますか?コンソールの出力もそれが原因だと思います。

/home/atmark # fw_printenv
Environment OK, copy 0
altbootcmd=log rec none warning "" 0 altbootcmd "Counted $bootlimit consecutive unfinished boots"; run rollback
apply_fit_overlays=for overlay in ${fdt_overlays}; do echo "Appending overlay ${overlay}"; fitconf="${fitconf}#${overlay}"; done; setenv fdt_overlays
apply_overlays=for overlay in ${fdt_overlays}; do if load mmc ${mmcdev}:${mmcpart} ${overlay_addr} /boot/${overlay}; then echo "Applying fdt overlay: ${overlay}"; fdt apply ${overlay_addr}; else echo "Warning: fdt overlay ${overlay} not found!"; fi; done; setenv fdt_overlays
baudrate=115200
boot_fit=no
bootcmd=mmc dev ${mmcdev}; sleep 0.5; if mmc rescan; then if run loadbootscript; then run bootscript; else run loadimage && run mmcboot; fi; run rollback; fi;
bootdelay=0
bootlimit=3
bootscript=echo Running bootscript from mmc ...; source; log rec none warning "" 0 bootscript "boot script did not boot"
console=ttymxc0,115200
ethaddr=00:11:0c:2a:62:99
fastboot_dev=mmc0
fdt_addr=0x83500000
fdt_file=boot/armadillo-640.dtb
fdt_size=0x20000
fdtautodetect=yes
fdtcontroladdr=9ef4acc0
fitconf_base=#armadillo
image=boot/uImage
load_overlays_list=load mmc ${mmcdev}:${mmcpart} ${overlay_addr} ${overlays_list} && env import -t ${overlay_addr} ${filesize}
loadaddr=0x80800000
loadbootscript=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=if load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}; then echo "Loading fdt ${fdt_file}" && fdt addr ${fdt_addr} && fdt resize ${fdt_size}; else log rec none warning "" 0 loadfdt "Could not load fdt file!"; false; fi
loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
mmcargs=setenv bootargs console=${console} root=${mmcroot} ${optargs}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fit} = yes; then run apply_fit_overlays; run load_overlays_list && run apply_fit_overlays; bootm ${loadaddr}"${fitconf_base}${fitconf}"; log rec none warning "" 0 mmcboot "Could not boot fit image"; elif run loadfdt; then run apply_overlays; run load_overlays_list && run apply_overlays; bootm ${loadaddr} - ${fdt_addr}; log rec none warning "" 0 mmcboot "Could not boot image"; fi
mmcdev=0
mmcpart=1
mmcroot=/dev/mmcblk0p1 rootwait ro
optargs=quiet
overlay_addr=0x83520000
overlays_list=boot/overlays.txt
rollback=setenv bootcount; if test "${upgrade_available}" -gt 0 && run setfallback; then log rec none warning "" 0 rollback "Rolling back to mmcblk${mmcdev}p${fallback}"; if test "${mmcdev}" = 0; then run rollback_mmc; else run rollback_other; fi; elif test "${upgrade_available}" -gt 0; then log rec none warning "" 0 rollback "Cannot compute rollback target from mmcpart ${mmcpart}"; else log rec none warning "" 0 rollback "Rollback target is not ready, refusing to rollback."; fi; saveenv; reset
rollback_mmc=saveenv && mmc partconf 0 0 ${fallback} 0 && reset
rollback_other=setenv mmcpart "${fallback}"; setenv mmcroot "mmcblk${mmcdev}p${fallback} rootwait ro"; saveenv; reset
script=boot/boot.scr
serial#=009C01480097
setfallback=setexpr fallback 3 - ${mmcpart}; test "${fallback}" = 1 || test "${fallback}" = 2
stderr=mxc_serial
stdin=mxc_serial
stdout=mxc_serial
timeoffset=32400
upgrade_available=0
/home/atmark #

> 2/ 「cat /etc/fw_env.config」で変数管理のコンフィグを表示していただけますか?また、「ls /boot/uboot_env.d」でデフォルトの変数を用意しているかの確認もお願いします。環境変数を変更した場合は変更をそちらに登録する必要がありますが、デフォルトではデフォルトの値(00_defaults)があるはずで、今の変数読み取れない状態でそれ以前の問題になっていますね…

/home/atmark # cat /etc/fw_env.config
/dev/mmcblk0boot0 0x1fe000 0x2000
/dev/mmcblk0boot0 0x1fa000 0x2000
 
/home/atmark # ls /boot/uboot_env.d
00_defaults  README
/home/atmark #

> 3/ 「lsblk | grep rootfs」で現在起動中の面も確認したいです。

/home/atmark # lsblk | grep rootfs
tqmmcblk0p1  179:1    0   300M  0 part /live/rootfs
/home/atmark #

> 4/ コンテナについては、 ls /etc/atmark/containers でコンフィグの有無の確認、または podman image list でコンテナイメージの存在の確認をお願いします

/home/atmark #  ls /etc/atmark/containers
README                              at-debian-image-armv7.conf.example
alpine.conf.example                 my_project.conf
 
/home/atmark # podman image list
REPOSITORY            TAG         IMAGE ID      CREATED       SIZE        R/O
localhost/my_project  latest      714b711dc105  44 hours ago  306 MB      true
/home/atmark #

> 5/ 念のため、「abos-ctrl mount-old」で旧面をマウントして、 「ls /target/etc/atmark/containers」 と 「podman --storage-opt additionalimagestore=/target/var/lib/containers/storage_readonly/ image list」も確認してみましょう。そのデーターに問題なければ復帰はまだ可能です。

/home/atmark # abos-ctrl mount-old
Mounted /dev/mmcblk0p2 to /target successfully.
Unmount it with 'abos-ctrl umount /target' when done
 
/home/atmark # ls /target/etc/atmark/containers
README                              at-debian-image-armv7.conf.example
alpine.conf.example                 my_project.conf
 
/home/atmark # podman --storage-opt additionalimagestore=/target/var/lib/containers/storage_readonly/ image list
REPOSITORY            TAG         IMAGE ID      CREATED       SIZE        R/O
localhost/my_project  latest      714b711dc105  44 hours ago  306 MB      true
/home/atmark #

各項目について回答します。
コンテナは大丈夫そうですかね?

以上、よろしくお願い致します。

横から失礼します。

> uart1のコンソール出力が添付ファイルのところで止まってしまいます。
これについてですが、アップデート前は正常に出力していましたでしょうか。
at-dtwebを使われていると思いますが、at-dtwebでUART1を設定していますでしょうか。

佐藤です。

返信ありがとうございます。

> > uart1のコンソール出力が添付ファイルのところで止まってしまいます。
> これについてですが、アップデート前は正常に出力していましたでしょうか。
> at-dtwebを使われていると思いますが、at-dtwebでUART1を設定していますでしょうか。
at-dtwebではuart1、uart2、uart5、ecspi1を設定し、アップデート前までは正常に出力されていました。

/home/atmark # ls -l /boot/
total 6376
-rw-r--r--    1 root     root           140 Aug 26 15:37 armadillo-610-at-dtweb.dtbo
-rw-r--r--    1 root     root          2074 Aug 26 15:37 armadillo-610-extboard-eva-grove.dtbo
-rw-r--r--    1 root     root          1602 Aug 26 15:37 armadillo-610-extboard-eva-usdhc2.dtbo
-rw-r--r--    1 root     root          5870 Aug 26 15:37 armadillo-610-extboard-eva.dtbo
-rw-r--r--    1 root     root         37239 Aug 26 15:37 armadillo-610.dtb
-rw-r--r--    1 root     root          3865 Aug 26 15:37 armadillo-640-at-dtweb.dtbo
-rw-r--r--    1 root     root          1727 Aug 26 15:37 armadillo-640-con9-rtc.dtbo
-rw-r--r--    1 root     root          2596 Aug 26 15:37 armadillo-640-con9-thread-lwb5plus.dtbo
-rwxr-xr-x    1 root     root           705 Aug  7 14:23 armadillo-640-customize.dtbo
-rw-r--r--    1 root     root          4413 Aug 26 15:37 armadillo-640-lcd70ext-l00.dtbo
-rw-r--r--    1 root     root         38353 Aug 26 15:37 armadillo-640.dtb
-rw-r--r--    1 root     root         40027 Aug 26 15:37 armadillo-iotg-a6e.dtb
lrwxrwxrwx    1 root     root            17 Aug 29 09:36 armadillo.dtb -> armadillo-640.dtb
-rw-------    1 root     root            70 Aug  7 14:24 overlays.txt
-rw-r--r--    1 root     root       6381320 Aug 26 15:37 uImage
drwxr-xr-x    2 root     root          1024 Aug 29 09:37 uboot_env.d
/home/atmark #

armadillo-640-customize.dtboはuart2とuart5をRS485の送受信切替ピンを動作させるように改造したもので、
armadillo-640-at-dtweb.dtboがat-dtwebで生成して動いていたものだと思います。
しかしarmadillo-640-at-dtweb.dtboのファイル日時をみるとabosアップデートしたバージョンの日付になっているのでしょうか?

# v12 list: timezone settings/twin agent enable state
/etc/localtime
/etc/zoneinfo
/etc/runlevels/default/armadillo-twin-agentd
/boot/armadillo-640-at-dtweb.dtbo

swupdate_preserve_filesを添付します。
/boot/armadillo-640-at-dtweb.dtboということはat-dtwebの変更は引き継がれるのですよね?

以上、よろしくお願い致します。

ファイル ファイルの説明
swupdate_preserve_files.txt abosアップデート後にArmadillo-640から取得

at_dominique.m…

2024年8月30日 10時17分

佐藤さん、

確認ありがとうございます。

> しかしarmadillo-640-at-dtweb.dtboのファイル日時をみるとabosアップデートしたバージョンの日付になっているのでしょうか?

まさにそのとおりです。

at-dtweb の dtbo をパッケージから外していたはずですが、何かの誤りでパッケージに入ってしまってデフォルトの値が戻ってしまいました。
確認不足で申し訳ございません。

原因が分かりましたので、修正を案内させてください:

# 正常に動作できていたB面をマウントします
armadillo:~# abos-ctrl mount-old
Mounted /dev/mmcblk0p1 to /target successfully.
Unmount it with 'abos-ctrl umount /target' when done
# B面の at-dtweb.dtbo を確認します。日付が古い物になっているはずです。
# 以下の様にパッケージの日付でしたらお手数ですが ATDE から再び転送してください。
# ~/mkswu/at-dtweb-Armadillo-640/armadillo-640-at-dtweb.dtbo にあるはずです。
armadillo:~# ls -l /target/boot/armadillo-640-at-dtweb.dtbo
-rw-r--r--    1 root     root          3865 Aug 26 15:37 /target/boot/armadillo-640-at-dtweb.dtbo
# ファイルをコピーして永続化してから再起動します
armadillo:~# cp /target/boot/armadillo-640-at-dtweb.dtbo /boot
armadillo:~# persist_file -v /boot/armadillo-640-at-dtweb.dtbo 
'/mnt/boot/armadillo-640-at-dtweb.dtbo' -> '/target/boot/armadillo-640-at-dtweb.dtbo'
armadillo:~# reboot

これからですが、at-dtweb のファイルをパッケージから排除しましたのでこれ以降のアップデートで上書きされなくなります。
再び抜けないように何かのテストも追加します。
別の armadillo に今のバージョンを更新したい場合は、/etc/swupdate_preserve_files に「POST /boot/armadillo-640-at-dtweb.dtbo」を追加していただければパッケージにファイルが入っても現在のバージョンが優先されますのでそういう方法で対応できますが、この個体だけであれば追加対応は特に不要です。

コンテナの方は、コンフィグもイメージもちゃんとコピーされたようですので、dtb の設定でコンテナが正常に動いてなかっただけの可能性があると思います。
dtbo を修正した後に再起動した際にコンテナがまだ動いてない場合は「podman ps -a」、「podman logs my_project」の確認からお願いします。

お手数をおかけして申し訳ございませんが引き続きよろしくお願いします

佐藤です。

修正方法ありがとうございます。

> 原因が分かりましたので、修正を案内させてください:

> # 正常に動作できていたB面をマウントします
> armadillo:~# abos-ctrl mount-old
> Mounted /dev/mmcblk0p1 to /target successfully.
> Unmount it with 'abos-ctrl umount /target' when done
> # B面の at-dtweb.dtbo を確認します。日付が古い物になっているはずです。
> # 以下の様にパッケージの日付でしたらお手数ですが ATDE から再び転送してください。
> # ~/mkswu/at-dtweb-Armadillo-640/armadillo-640-at-dtweb.dtbo にあるはずです。
> armadillo:~# ls -l /target/boot/armadillo-640-at-dtweb.dtbo
> -rw-r--r--    1 root     root          3865 Aug 26 15:37 /target/boot/armadillo-640-at-dtweb.dtbo
> # ファイルをコピーして永続化してから再起動します
> armadillo:~# cp /target/boot/armadillo-640-at-dtweb.dtbo /boot
> armadillo:~# persist_file -v /boot/armadillo-640-at-dtweb.dtbo 
> '/mnt/boot/armadillo-640-at-dtweb.dtbo' -> '/target/boot/armadillo-640-at-dtweb.dtbo'
> armadillo:~# reboot

教えていただいた方法でuart1のコンソール出力が正常になりました。
コンテナも無事起動しています。

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