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
やりたいことは、コンテナから再起動するようにしたいです。
ご教示ねがいます。
コメント
m.yoshida
at_dominique.m…
マルティネです。
> こちらは、コンテナからアルマジロ本体再起動ができるのではなく、外部から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 を送れば再起動できます。
よろしくお願いします。
m.yoshida
マルティネさん
確認遅れました。
>コンテナから 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
理解不足で申し訳ございませんが、修正点ご教示願います
at_makoto.sato
佐藤です。
一度、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
m.yoshida
> 一度、PCやATDEのウェブブラウザから ABOS Web にアクセスしていただき、
> 「設定管理」のページへ進んでください。
> そこに、「Rest API トークン一覧」という箇所がありますので、
> そこで「トークンを追加」ボタンを押して、次の画面で「Reboot」を選択して「登録」ボタンを押してください。
設定方法のご回答ありがとうございます。
大変恐縮ではございますが、ウェブブラウザから ABOS Web にアクセスできる環境でないため、
ターミナル画面で設定する方法はありますでしょうか?
お手数をおかけしますが、よろしくお願いいたします。
at_dominique.m…
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 が起動されます。
よろしくお願いします
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 > # 再起動されます >
> (トークンを一度生成した場合はそのトークンが永続化されていますので、そのまま使いつつけてください)
上記で再起動確認できました。
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 をアクセスできます)
> /shared/fifoにアクセス権限がないことによる処理の失敗でしょうか?
こちらの問題に関しては権限の問題というより、ctrl+c によるエラーに見えます。間欠動作も影響あるかもしれません。
(すみません、「実行せずctrl+cで止める」の説明がちゃんと分かりませんでしたので、自分が再現しようとしても再現できませんでした)
どうしてもこういうスクリプトが好ましい場合は
while read
のループを別のwhile true
ループに入れて、こういうエラーでもリトライさせることも可能ですが、こちらとしてはやっぱり abos-web を使っていただいた方が楽かと考えています。よろしくお願いします