Armadilloフォーラム

【SWupdate】BaseOS起動時のスクリプト実行

yasuda0108

2024年10月16日 15時02分

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

https://armadillo.atmark-techno.com/forum/armadillo/11261
上記リンクを参考に、下記の通り.descを作成しましたが、現在コメントアウトしている箇所を有効にすると更新後の起動時に失敗します。
解決方法をご教示お願い致します。

###.decs
swdesc_option component=gkib
swdesc_option version=100
#swdesc_option POST_ACTION=wait
 
swdesc_embed_container "GKIB_0100.tar"
swdesc_files --extra-os baseOS
swdesc_files --extra-os --dest /etc/atmark/containers/ "01_cptrans_network.conf"
swdesc_files --extra-os --dest /etc/atmark/containers/ "02_gkib.conf"
swdesc_files --extra-os --dest /var/app/volumes/ "swuVersions"
#swdesc_files --extra-os --dest /etc/local.d/ "shutdown.start"
#swdesc_command --extra-os 'chmod 755 /etc/local.d/shutdown.start'
#swdesc_command --extra-os 'rc-update add local default'
↑コメントアウトを外すと再起動の途中でフリーズする
 
###log
Starting kernel ...
 
[    0.423876] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock
[    0.791499] imx6q-pcie 33800000.pcie: invalid resource
[    0.948270] mdio_bus 30be0000.ethernet-1: MDIO device at address 0 is missing.
[    1.141792] mdio_bus stmmac-1: MDIO device at address 0 is missing.
[    1.801235] imx6q-pcie 33800000.pcie: failed to initialize host
[    1.807240] imx6q-pcie 33800000.pcie: unable to add pcie port.
 
   OpenRC 0.48 is starting up Linux 5.10.205-0-at (aarch64)
 
 * Mounting /proc ... [ ok ]
 * Mounting /run ... [ ok ]
 * /run/openrc: creating directory
 * /run/lock: creating directory
 * /run/lock: correcting owner
 * Caching service dependencies ... [ ok ]
 * Clock skew detected with `/etc/init.d'
 * Adjusting mtime of `/run/openrc/deptree' to Thu Dec 28 14:10:35 2023
 
 * WARNING: clock skew detected!
 * Mounting /sys ... * Remounting devtmpfs on /dev ... [ ok ]
 [ ok ]
 * Mounting security filesystem ... [ ok ]
 * Mounting config filesystem ... [ ok ]
 * Mounting /dev/mqueue ... [ ok ]
 * Mounting /dev/pts ... [ ok ]
 * Mounting /dev/shm ... [ ok ]
udev                     | * Starting udev ... [ ok ]
fsck                     | * Checking local filesystems  ... [ ok ]
fsck_atlog               | * Checking log filesystems ...root                     | * Remounting filesyst
ems ... [ ok ]
 [ ok ]
localmount               | * Mounting local filesystems ... [ ok ]
overlayfs                | * Preparing overlayfs over / ... [ ok ]
 * WARNING: clock skew detected!
udev-trigger             | * Generating a rule to create a /dev/root symlink ...sysctl                   
| * Configuring kernel parameters ... [ ok ]
udev-trigger             | * Populating /dev with existing devices through uevents ...hostname           
      | * Setting hostname ... [ ok ]
 [ ok ]
 [ ok ]
bootmisc                 | * Migrating /var/lock to /run/lock ... [ ok ]
bootmisc                 | * Creating user login records ... [ ok ]
bootmisc                 | * Wiping /var/tmp directory ... [ ok ]
syslog                   | * Starting busybox syslog ...dbus                     | * /run/dbus: creating 
directory
dbus                     | * /run/dbus: correcting owner
micron-emmc-reten        | * Starting micron-emmc-reten
 [ ok ]
dbus                     | * Starting System Message Bus ... [ ok ]
klogd                    | * Starting busybox klogd ... [ ok ]
networkmanager           | * Starting networkmanager ... [ ok ]
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: creating file
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: correcting owner
dnsmasq                  | * Starting dnsmasq ... [ ok ]
 * WARNING: clock skew detected!
buttond                  | * Starting button watching daemon ...reset_bootcount          | * Resetting bo
otcount in bootloader env ...Environment OK, copy 0
 [ ok ]
reset_bootcount          | [ ok ]
chronyd                  | * Starting chronyd ...avahi-daemon             | * Starting avahi-daemon ...zr
amswap                 | * Creating zram swap device ...podman-atmark            | * Starting configured 
podman containers ... [ ok ]
/usr/bin/podman_start: /etc/atmark/containers/01_cptrans_network.conf: line 3: set_gateway: not found
podman-atmark            |/usr/bin/podman_start: /etc/atmark/containers/01_cptrans_network.conf: line 4: 
set_dns: not found
 [ ok ]
abos-web                 | * Starting abos-web ... [ ok ]
podman-atmark            |Creating network '01_cptrans_network'
podman-atmark            |01_cptrans_network
podman-atmark            |Starting '02_gkib'
podman-atmark            |dcde8407a2a19ddedf16bade3f27cb6c1f1b40d54b00779ef076be1fd4464ee1
podman-atmark            | [ ok ]
 [ ok ]
local                    | * Starting local ...
↑ここでフリーズ

尚、shutdown.shの動作は確認済みです。

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

コメント

at_dominique.m…

2024年10月16日 15時49分

yasuda0108さん

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

> 上記リンクを参考に、下記の通り.descを作成しましたが、現在コメントアウトしている箇所を有効にすると更新後の起動時に失敗します。

確認させてください。
「失敗します」というのは、インストールが失敗するということではなく、インストールして再起動すると最後のログの様のフリーズするということであってますね?
(swupdate と関係なく、手動にそのファイルを設置すれば再現する問題という認識です)

> 尚、shutdown.shの動作は確認済みです。

shutdown.sh の動作を確認したということは、shutdown.start を実行するとスクリプトがすぐに終了することであってますか?

local のサービスはディレクトリ内のスクリプトを順番に実行して、終わるまで待っていますので、shutdown.start が終了しないといただいたログの様にサービスが起動しないように見えてしまいます。
何か長い処理があれば、関数に入れてバックグラウンドで実行すれば起動が完了するはずです。

スクリプトがちゃんと停止するのであれば、申し訳ないですがスクリプトの内容を見せていただかなければ何ともいえません。スクリプト内に何かのログを /dev/tty に出力すれば何かわかるかもしれません。

また、今回の問題と関係ないですが、いくつかコメントをさせていただきます。
以下は無視していただいて構いません。

> swdesc_files --extra-os --dest /etc/atmark/containers/ "01_cptrans_network.conf"
> swdesc_files --extra-os --dest /etc/atmark/containers/ "02_gkib.conf"

swdesc_files にいくつかのファイルを引数で指定できますので、一つの 「swdesc_files --extra-os --dest ... 01...conf 02..conf」でもいいです。

> #swdesc_command --extra-os 'chmod 755 /etc/local.d/shutdown.start'

swdesc_files で書き込みされる実行制限は手元のファイルの実行制限をコピーしていますので、atde側で chmod していただければ同じ結果になります(desc ファイル内に「chmod 655 shutdown.start」でもいいです)

> #swdesc_command --extra-os 'rc-update add local default'

local サービスはデフォルトで有効になっているはずですのでこの行は不要です。

よろしくお願いします。

各種ご丁寧にご説明頂きありがとうございます。
内容とlocal.dでの挙動について理解致しました。

>>インストールして再起動すると最後のログの様のフリーズするということであってますね?
その認識で問題ございません。

スクリプト自体がwhile doで実行する内容になっていますので、そこで停止しているように見えたということになりそうです。
ホストOS上で上記スクリプトはバックグラウンド実行させておきたいのですが、可能でしょうか?

※desc記述方法について、各種アドバイスありがとうございます。

at_dominique.m…

2024年10月16日 16時51分

yasuda0108さん

> スクリプト自体がwhile doで実行する内容になっていますので、そこで停止しているように見えたということになりそうです。
> ホストOS上で上記スクリプトはバックグラウンド実行させておきたいのですが、可能でしょうか?

質問をそのまま繰り替えしているだけですが、処理をバックグラウンドで実行すれば可能です。

複雑な処理になってきた場合は個別にサービスを建てることもいいかもしれませんが、シンプルなシェルループの場合は例えば関数か別のスクリプトに入れて「 & 」文字でバックグラウンドで関数を実行することです。
(関数なくても while ... done & でも実行できますがちょっと分かりにくい気がします)

handle_shutdown() {
   while true; do
        ...
   done
handle_shutdown
}
 
# run in background
handle_shutdown &

バックグラウンドで実行しておけばサービスが完了してログインまで表示されるようになります。

また、深読みかもしれませんが、shutdown.start と while ループで以前コンテナから停止するスクリプト ( https://armadillo.atmark-techno.com/forum/armadillo/17613 ) と関係しているかと思いましたが、それでしたら今の Armadillo Base OS であればコンテナから abos-web の REST API で制御することを推奨しています: https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
まだ確定されてなければご顧慮ください。

よろしくお願いします。

早速のご返答ありがとうございます。
無事解決致しました。

RESTAPI制御についても、情報のご共有ありがとうございます。
引き続きよろしくお願いいたします。