Armadilloフォーラム

コンテナからarmadillo本体の再起動について

m.yoshida

2024年4月19日 12時20分

コンテナからarmadillo本体へ再起動について質問させてください。
以下URLを参考に再起動を行うスクリプトを作成しましたが、実行せずctrl+cで止めると以下のエラーでした。
https://armadillo.atmark-techno.com/forum/armadillo/17613

/opt/sh/reboot_server.sh: 7: cannot open /shared/fifo: Interrupted system call

/shared/fifoにアクセス権限がないことによる処理の失敗でしょうか?

イメージはdocker.io/arm32v7/debian:bullseye

/etc/atmark/containersnのコンフィグファイルは

add_devices /dev/ttymxc4
add_ports 1883:1883/tcp
add_armadillo_env
add_args --cap-add=SYS_TIME
add_args --systemd=always
add_args -d
set_autostart no
set_network host
add_volumes /sys:/sys
add_volumes /var/app/volumes/sh:/opt/sh
add_volumes /run/reboot_server:/shared

スクリプトファイルはrebootだけ実行するように変更してみました。

root@armadillo:/# cat  /opt/sh/reboot_server.sh 
#!/bin/sh
 
 
# Reboot script
rm -f /shared/fifo
mkfifo /shared/fifo
while read -r action; do
        case "$action" in
        shutdown) shutdown;;
        *)reboot;;
        esac
done < /shared/fifo

やりたいことは、コンテナから再起動するようにしたいです。
ご教示ねがいます。

コメント

at_dominique.m…

2024年4月19日 12時45分

m.yoshidaさん

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

> コンテナからarmadillo本体へ再起動について質問させてください。
> 以下URLを参考に再起動を行うスクリプトを作成しましたが、実行せずctrl+cで止めると以下のエラーでした。
> https://armadillo.atmark-techno.com/forum/armadillo/17613

このフォーラムの時点にまだ ABOS web で再起動できてませんでしたが、今のバージョンでしたらできるようになりました(2023年12月でリリースされた 3.18.5-at.8 以降)

二つ目のコンテナを管理するより楽だと思いますので、よろしければ試してみたください:
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

(network=host でしたら、https://127.0.0.1:58080 に abos-web をアクセスできます)

> /opt/sh/reboot_server.sh: 7: cannot open /shared/fifo: Interrupted system call

> /shared/fifoにアクセス権限がないことによる処理の失敗でしょうか?

こちらの問題に関しては権限の問題というより、ctrl+c によるエラーに見えます。間欠動作も影響あるかもしれません。
(すみません、「実行せずctrl+cで止める」の説明がちゃんと分かりませんでしたので、自分が再現しようとしても再現できませんでした)
どうしてもこういうスクリプトが好ましい場合は while read のループを別のwhile true ループに入れて、こういうエラーでもリトライさせることも可能ですが、こちらとしてはやっぱり abos-web を使っていただいた方が楽かと考えています。

よろしくお願いします

マルティネさん
ご回答ありがとうございます。
abos-webからの再起動情報ありがとうございます。
こちらは、コンテナからアルマジロ本体再起動ができるのではなく、外部からabos-webに再起動要求をして
アルマジロ本体を再起動するという認識でよろしいでしょうか?(認識ちがいましたら、すいません。。。)

今回は、コンテナの処理で本体を再起動できるかが可能か確認したかったです。
以上よろしくお願いいたします。

at_dominique.m…

2024年4月19日 16時31分

マルティネです。

> こちらは、コンテナからアルマジロ本体再起動ができるのではなく、外部からabos-webに再起動要求をして
> アルマジロ本体を再起動するという認識でよろしいでしょうか?(認識ちがいましたら、すいません。。。)

いいえ、コンテナからもアクセスできます:
> (network=host でしたら、https://127.0.0.1:58080 に abos-web をアクセスできます)

なのでマニュアルどおりに認証に必要なトークンは一度 ATDE か外からアクセスの「設定管理」ページしてから、
コンテナから curl コマンドや python の requests ライブラリ等で https://127.0.0.1:58080/api/reboot に POST を送れば再起動できます。

よろしくお願いします。

マルティネさん

確認遅れました。
>コンテナから curl コマンドや python の requests ライブラリ等で https://127.0.0.1:58080/api/reboot に POST を送れば再起動できます。
curlをインストールして下記コマンド送ってみましたが、失敗しました。

alias curl_rest='curl -k -H "$AUTH" -w "\nhttp code: %{http_code}\n" '
 
root@armadillo:/# curl_rest -X POST https://127.0.0.1:58080/api/reboot
 
{"error":"No auth found"}
http code: 500

ABOSのバージョンは以下の通りです。

cat /etc/atmark-release 
3.18.6-at.10

理解不足で申し訳ございませんが、修正点ご教示願います

佐藤です。

一度、PCやATDEのウェブブラウザから ABOS Web にアクセスしていただき、
「設定管理」のページへ進んでください。
そこに、「Rest API トークン一覧」という箇所がありますので、
そこで「トークンを追加」ボタンを押して、次の画面で「Reboot」を選択して「登録」ボタンを押してください。
そうすると、「Rest API トークン一覧」にトークン(英数字の羅列)が表示されますので、これをコピーしてください。

その後に、コンテナ内にて以下を実行してみてください。

 root@armadillo:/# AUTH="Authorization: Bearer <ここにコピーしたトークン>"
 root@armadillo:/# alias curl_rest='curl -k -H "$AUTH" -w "\nhttp code: %{http_code}\n" '
 root@armadillo:/# curl_rest -X POST https://127.0.0.1:58080/api/reboot
 

> 一度、PCやATDEのウェブブラウザから ABOS Web にアクセスしていただき、
> 「設定管理」のページへ進んでください。
> そこに、「Rest API トークン一覧」という箇所がありますので、
> そこで「トークンを追加」ボタンを押して、次の画面で「Reboot」を選択して「登録」ボタンを押してください。

設定方法のご回答ありがとうございます。
大変恐縮ではございますが、ウェブブラウザから ABOS Web にアクセスできる環境でないため、
ターミナル画面で設定する方法はありますでしょうか?

お手数をおかけしますが、よろしくお願いいたします。

at_dominique.m…

2024年4月23日 15時29分

m.yoshidaさん

マルティネです。

> 大変恐縮ではございますが、ウェブブラウザから ABOS Web にアクセスできる環境でないため、
> ターミナル画面で設定する方法はありますでしょうか?

abos-web のパスワードを設定していた場合はその場合はパスワードでも REST API を使えますので、そのままパスワードで再起動させるか、一度パスワードでトークンを作れます。

以下のコマンドを armadillo で実行しましたが、コンテナは network=host で起動しているのでそちらからでも同じです。

armadillo:~# curl -k -u abosweb -w "\n" https://127.0.0.1:58080/api/tokens -d permissions=Reboot
Enter host password for user 'abosweb': (ここにパスワード入力)
{"token":"6772b5de-a8ff-4ba4-992d-47c053096fff","permissions":["Reboot"]}
# 追加制限は -d を何回か設定すれば追加される形です
# 出力されたトークンを再起動に使用可能です:
armadillo:~# curl -k -H 'Authorization: Bearer 6772b5de-a8ff-4ba4-992d-47c053096fff' -w "\n" https://127.0.0.1:58080/api/reboot -X POST
# 再起動されます

(トークンを一度生成した場合はそのトークンが永続化されていますので、そのまま使いつつけてください)

パスワードを設定されてない場合は Armadillo で「passwd abos-web-admin」を実行することで一度パスワードを設定して、「persist_file /etc/shadow」で永続化してから再起動していただければ abos-web が起動されます。

よろしくお願いします

マルティネさん
返信ありがとうございます。
> > 大変恐縮ではございますが、ウェブブラウザから ABOS Web にアクセスできる環境でないため、
> > ターミナル画面で設定する方法はありますでしょうか?
>
> abos-web のパスワードを設定していた場合はその場合はパスワードでも REST API を使えますので、そのままパスワードで再起動させるか、一度パスワードでトークンを作れます。
>
> 以下のコマンドを armadillo で実行しましたが、コンテナは network=host で起動しているのでそちらからでも同じです。
>
>

> armadillo:~# curl -k -u abosweb -w "\n" https://127.0.0.1:58080/api/tokens -d permissions=Reboot
> Enter host password for user 'abosweb': (ここにパスワード入力)
> {"token":"6772b5de-a8ff-4ba4-992d-47c053096fff","permissions":["Reboot"]}
> # 追加制限は -d を何回か設定すれば追加される形です
> # 出力されたトークンを再起動に使用可能です:
> armadillo:~# curl -k -H 'Authorization: Bearer 6772b5de-a8ff-4ba4-992d-47c053096fff' -w "\n" https://127.0.0.1:58080/api/reboot -X POST
> # 再起動されます
> 

> (トークンを一度生成した場合はそのトークンが永続化されていますので、そのまま使いつつけてください)

上記で再起動確認できました。