アップデートツール ( update_manager / update_runner / update.sh / healthcheck )¶
端末のキオスク動作を安全に保ちながら OTA 更新を段階実行するツール群。
サービス停止 → 更新実行 → 検証 → 切替 → 復帰を一連で行い、ヘルスチェックとロールバックで可用性を担保します。
関連スクリプト¶
update_manager…signage-update.serviceから起動。GUI停止→/tmp/UPDATING→update_runner実行→/tmp/update_done待機→再起動。update_runner… NTP 同期確認→パッチ適用→signage-jetsonTAR 展開・migrations 実行→xignage-metrics同期→update.sh実行→完了フラグ。update.sh…signage-server更新(TAR + healthcheck)+ Jetson のxignage-edge-detection更新。healthcheck… 必須ファイル存在と トップレベルのみの bash/python 構文チェック。
OTA manifest(mTLS)¶
update_runner / update.sh / セットアップの一部は、
/etc/signage/iot.env の証明書で mTLS を行い、
https://device.api.xrobotics.jp/api/ota/manifest から プリサインド URL を取得します。
必要な環境変数(/etc/signage/iot.env):
IOT_CERT_PATHIOT_KEY_PATHIOT_CA_PATH
update_manager¶
/tmp/UPDATINGを作成して GUI 再起動を抑止update_runnerを実行し、/tmp/update_doneを待機- 終了後に 再起動
ログ: /var/log/update_manager/update_manager_*.log(30 日超は自動削除)
update_runner¶
1) Wi-Fi 設定確認:$FLAG_FILE が無ければ更新スキップ
2) NTP 同期待機:未同期ならスキップ
3) パッチ適用:OTA manifest から signage-jetson-patches ZIP を取得し、PATCH_MARK より新しい *.sh を昇順実行
4) TAR 更新:OTA manifest から signage-jetson を取得 → 展開 → migrations/*.sh 実行
5) ヘルスチェック(before/after):失敗時はロールバック
6) metrics 同期:/opt/xignage-metrics を rsync + npm ci、サービス再起動
7) update.sh 実行
8) Web 配置:static/index.html / web/wifi_manager.py を /var/www/html に配置
9) 完了シグナル:/tmp/update_done を作成
ログ: /var/log/update_runner/update_runner_*.log
update.sh¶
signage-server 更新¶
- OTA manifest から
signage-serverを取得 releases/<timestamp>に展開してnpm ci --omit=dev --ignore-scriptscurrentを切替http://127.0.0.1:3000/healthを 最大 20 秒確認- 失敗時は 即ロールバック
xignage-edge-detection 更新(Jetson のみ)¶
- OTA manifest から TAR/SHA を取得・検証
releases/<timestamp>に展開しcurrentを切替
ログ: /var/log/update/update_*.log / update_debug_*.log
healthcheck¶
- 必須ファイル群の存在確認(
update.sh,scripts/bin/*,scripts/lib/*.sh,scripts/**/*.py,web/wifi_manager.py,setup_all.sh) - トップレベルのみの bash / python 構文チェック
scripts/**/*.pyは globstar 無効のため再帰展開されません。
またfindは-maxdepth 1で実行されるため、深い階層は検査対象外です。