Armadilloフォーラム

sudo権限のあるコンテナはありますか

ks0319

2024年4月1日 10時53分

Armadillo IoT A6Eを用いてコンテナ内のNode-RED上でBluetoothを使用しようとしています。
このプロセスの一環として、以下のブログを参考にコンテナ上でBluetoothを動作させることまでは確認できました。
https://armadillo.atmark-techno.com/blog/10899/17582

docker.io/debian:latestイメージをベースにしていますが、
nobleライブラリの要件を満たすため、特定の権限設定に苦労しています。
具体的には、setcap cap_net_raw+eip $(eval readlink -f \which node`)` コマンドを実行して、
Node.jsに必要な権限を付与しようとした際、権限エラーによりNode.jsが起動しなくなる問題に直面しています。

そこで、Armadilloで使用できるsudo権限のあるコンテナがあるかどうか、
またはこの問題に対処するための推奨されるアプローチがあれば教えていただけますか?
※apt-get install sudoを試みましたが、問題は解決しませんでした。

以下は私が使用しているコンテナの設定です-------------
armadillo:~# cat /etc/atmark/containers/mynodered.conf
set_image localhost/mynodered:latest
add_devices /dev/ttyUSB*
add_devices /dev/ttymxc*
add_devices /dev/gpiochip5
add_devices /dev/gpiochip6
add_volumes /var/app/volumes:/root/volumes
#add_volumes /etc/localtime:/etc/localtime:ro
add_ports 1880:1880
set_network host
add_args --cap-add=NET_ADMIN
set_command node-red
set_autostart no
#add_args -it
#set_command /bin/bash

コメント

at_shinya.koga

2024年4月1日 14時09分

アットマークテクノの古賀です。

ks0319さん:
>Armadillo IoT A6Eを用いてコンテナ内のNode-RED上でBluetoothを使用しようとしています。
>このプロセスの一環として、以下のブログを参考にコンテナ上でBluetoothを動作させることまでは確認できました。
>https://armadillo.atmark-techno.com/blog/10899/17582
>
>docker.io/debian:latestイメージをベースにしていますが、
>nobleライブラリの要件を満たすため、特定の権限設定に苦労しています。
>具体的には、setcap cap_net_raw+eip $(eval readlink -f \which node`)` コマンドを実行して、
>Node.jsに必要な権限を付与しようとした際、権限エラーによりNode.jsが起動しなくなる問題に直面しています。

Bluetooth をコンテナから使用できるようにして、そのコンテナで Node-RED を動かそうとしていらっしゃるのですね。
そのことと、上記のコマンドからすると、「node ライブラリ」というのは、node-red-contrib-beacon-scanner だろうかと思いましたが、合っているでしょうか?
 https://flows.nodered.org/node/node-red-contrib-beacon-scanner

# 後述する Howto を作成する際に、node-red-contrib-beacon-scanner も評価してみたことがあり、それで、上のコマンドに見覚えがありました。

>以下は私が使用しているコンテナの設定です-------------

以下の mynodered.conf で、次の二ヵ所を変更してみてください。

>armadillo:~# cat /etc/atmark/containers/mynodered.conf

>add_ports 1880:1880
>set_network host

1.) add_ports の行を削除またはコメントアウトしてください。

add_ports による、コンテナのネットワークインタフェースに対する設定と、set_network host による、コンテナのネットワークインタフェースをホスト OS と共通にする設定は、共存できません。この二行が両方あると、エラーします。

>add_args --cap-add=NET_ADMIN

--cap-add で与える権限として、NET_ADMIN に加えて NET_RAW も指定してみてください:

add_args --cap-add=NET_ADMIN --cap-add=NET_RAW

以下、余談です。
お使いになろうとしていらっしゃるノードが、Node-RED での BLE 受信用のものである場合、以下の Howto で提供しているインストールディスクイメージや SWU イメージに収録した Noxe-RED フローをご覧になって頂くと、もしかすると参考になるところがあるかも知れません:

 Armadillo-IoT A6E: 漏水監視システムをNode-REDとソラコムプラットフォームで構築する
 https://armadillo.atmark-techno.com/howto/iotg_a6e-water-leakage-sense

なお、この Howto で作成した Node-RED フローでは、node-red-contrib-beacon-scanner とは違うノード(node-red-contrib-blebeacon-scanner)を使用しています。
違うノードではありますが、どちらも @abandonware/noble を利用しており、使い勝手は大きく変わらないと思います。

以上、参考になりましたら幸いです。

ks0319

2024年4月2日 11時07分

返信ありがとうございます。
早速、いただいた設定変更の点を試してみる予定です。
add_portsの行を削除する件や--cap-add=NET_ADMINと--cap-add=NET_RAWを指定する件など、大変参考になりました。

ちなみに使用しているnodeライブラリは「node-red-contrib-ble-sense」でした。

提供していただいたコラムの方も合わせて参考にしてみます。