masa.yamaguchi
2024年12月4日 16時47分
==========
製品型番:Aramadillo-610
ABOSバージョン: 3.20.3-at.5
カーネルバージョン: 5.10.230-0
その他:ATDE9を使用
==========
Armadillo Base OSの「コンテナ内」から、REST APIを使用して動作確認をしています。
無線ネットワーク アクセスポイント設定時において、アクセスは確認できております。(AP接続にて、ABOS Web 表示を確認)
しかしながら、その状態で無線ネットワークのリスト取得をREST APIで実施した場合
取得できるのは空リストとなります。
これは想定通りの動作となるかご教示頂きたいです。
<以下コンテナ内でREST API実行時のコンソール画面> root@5156224686cd:/# curl_rest -d ssid=test -d passphrase=testtest -d bridge_addr=192.168.1.1/24 -d channel=36 https://host.containers.internal:58080/api/wlan/ap http code: 200 →★AP接続実施 root@5156224686cd:/# curl_rest https://host.containers.internal:58080/api/dhcp/br_ap -d start_addr=192.168.1.10 -d end_addr=192.168.1.254 http code: 200 →★DHCP設定 root@5156224686cd:/# curl_rest -X GET -H 'Content-type: application/json' -d '{}' https://host.containers.internal:58080/api/wlan/scan [] http code: 200 →★無線ネットワークリストを取得しようとするが、空リストとなる root@5156224686cd:/# curl_rest -X DELETE https://host.containers.internal:58080/api/wlan/ap http code: 200 →★AP接続削除 root@5156224686cd:/# curl_rest -X GET -H 'Content-type: application/json' -d '{}' https://host.containers.internal:58080/api/wlan/scan [{"id":・・・・・・・・ →★AP接続削除後は無線ネットワークリストが取得できる
コメント
masa.yamaguchi
佐藤様
masa.yamaguchiです。
一点確認させてください。 アクセスポイントモード時でも、無線ネットワークのリストを取得して、 クライアントとしてリスト内にある無線ネットワークに接続したいということでしょうか。 つまり、アクセスポイントモードとクライアントモードを同時に使用したいということでしょうか。
ご質問の件について回答いたします。
同時に使用というわけでは無く、以下ケースを想定しております。
-----
<想定するケース>
初期状態はアクセスポイントモードで起動する。
ユーザがアクセスポイントモードで接続しArmadillo-610から無線ネットワークのリストを取得する。
その後、ユーザが指定したアクセスポイントの情報を Armadillo-610が受信後、
クライアントモードに切り替えて、別のアクセスポイントに接続する。
at_makoto.sato
佐藤です。
アクセスポイントモードに設定した時点で、 wlan0 を NetworkManger の管理から外しているため、
アクセスポイントモードとSSIDリスト取得は同時に行えません(SSIDリスト取得は NetworkManger を通して行っております)
手間がかかって申し訳ないのですが、NetworkMangerを使わずに iw コマンドでSSID を取得するカスタムスクリプトを作成し、
それを Rest API で呼び出すことでアクセスポイントモード設定時でもSSIDのリストが取得できるかと思います。
armadillo 上の "/etc/doas.d/abos_web_customize.conf" ファイルを開いて以下を追加します。
[armadillo]# vi /etc/doas.d/abos_web_customize.conf permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/ssid_list.sh # ★これを追加 [armadillo]# persist_file -p /etc/doas.d/abos_web_customize.conf # ★ファイルの永続化
"/etc/atmark/abos_web/customize_rest/" ディレクトリにカスタムスクリプト本体を用意します。
スクリプトのファイル名は "ssid_list.sh" とします。
[armadillo]# mkdir /etc/atmark/abos_web/customize_rest [armadillo]# vi /etc/atmark/abos_web/customize_rest/ssid_list.sh #!/bin/sh iw dev wlan0 scan | grep "SSID:" | cut -d: -f2 | tr -d " " [armadillo]# chmod +x /etc/atmark/abos_web/customize_rest/ssid_list.sh # ★実行権付与 [armadillo]# persist_file -p /etc/atmark/abos_web/customize_rest/ssid_list.sh # ★ファイルの永続化
次に、ABOS Web 上で Rest API 用のトークンに "Custom" の権限を追加してください。
そのトークンを使用して、以下のようにアクセスすると SSID 一覧が取得できるかと思います。
curl_rest -X POST https://host.containers.internal:58080/api/custom/print_args.sh -H 'Content-type: application/json' -d '{"root":true}'
masa.yamaguchi
佐藤様
masa.yamaguchiです。
ご回答ありがとうございます。
ご提示の方法でコンテナ内からREST APIを実行したところ、以下コンソール出力が表示されました。
root@1261e989ac1f:/# curl_rest -X POST https://host.containers.internal:58080/api/custom/print_args.sh -H 'Content-type: application/json' -d '{"root":true}' {"stderr":"doas: Operation not permitted\n"} {"exit_code":1}
上記エラーとなる事象につきまして、こちらの不足処理等ありましたら、ご指摘いただけますと幸いです。
[備考]
・アクセスポイントモードでスマホ直接接続できることを確認してから、上記処理を行っております。
・REST API トークンにはAdmin, Custom の権限を設定しています。
・ホストOSでは「iw dev wlan0 scan | grep "SSID:" | cut -d: -f2 | tr -d " "」 実行により、アクセスポイントリストが取得できたことを確認済みです。
at_makoto.sato
masa.yamaguchi
佐藤様
masa.yamaguchiです。
以下のコマンドの実行結果はどうなってますでしょうか。
ご依頼のコマンド確認結果について報告いたします。
(念のため実行時の状況を添付資料でも送付いたします)
/home/atmark # cat /etc/doas.d/abos_web_customize.conf permit nopass abos-web-admin as root cmd /etc/atmark/abos_web/customize_rest/ssid_list.sh /home/atmark # cat /etc/atmark/abos_web/customize_rest/ssid_list.sh #!/bin/sh iw dev wlan0 scan | grep "SSID:" | cut -d: -f2 | tr -d " " /home/atmark # ls /etc/atmark/abos_web/customize_rest/ -la total 3 drwxr-xr-x 2 root root 1024 Dec 6 10:53 . drwxr-xr-x 5 abos-web abos-web 1024 Dec 6 10:53 .. -rwxr-xr-x 1 root root 75 Dec 6 10:52 ssid_list.sh
[備考]
・コマンド実行は念のため、ファイル作成・設定したのちのリブート後に実施しています。
ファイル | ファイルの説明 |
---|---|
コマンド確認結果キャプチャ.png | コマンド実行結果キャプチャ |
コマンド確認結果.txt | コマンド実行結果テキスト版(コマンド実行結果キャプチャ と内容は同じです) |
at_makoto.sato
佐藤です。
申し訳ありません。先にお伝えしたアクセス用のURLが間違っておりました。
誤:
curl_rest -X POST https://host.containers.internal:58080/api/custom/print_args.sh -H 'Content-type: application/json' -d '{"root":true}'
正:
curl_rest -X POST https://host.containers.internal:58080/api/custom/ssid_list.sh -H 'Content-type: application/json' -d '{"root":true}'
上記で試していただけますでしょうか。
masa.yamaguchi
at_makoto.sato
2024年12月4日 17時50分
佐藤です。
一点確認させてください。
アクセスポイントモード時でも、無線ネットワークのリストを取得して、
クライアントとしてリスト内にある無線ネットワークに接続したいということでしょうか。
つまり、アクセスポイントモードとクライアントモードを同時に使用したいということでしょうか。