Jetson nano(Ubuntu)で、
組み込み機器ライクに、電源を入れるだけで(マウスやキーボードなしに)プログラムを起動させたい。
でも起動させたいプログラムがDockerベースで動いておりました。
Docker初心者が、いろいろガチャガチャやって、やっと動いたので備忘録として残します
動かしたいプログラム
こちらのJetson-inferenceです。
posenetのプログラムを動かしたいです。
手動起動で動作確認
こちらの記事を参考に動かしました。
git clone --recursive --depth=1 https://github.com/dusty-nv/jetson-inference
cd jetson-inference
docker/run.sh
でDockerを起動させたあと、
posenet.py csi://0
によって、Posenetを起動できました。
自動化手順
- Dockerコンテナを起動するシェルスクリプト用意し、name オプション付きでDockerを起動するように設定します
- Jetsonにある「Startup Applications Preference」で、Docker起動スクリプトを自動実行設定します。
- Jetsonにある「Startup Applications Preference」で、nameオプションでコンテナ指定してDocker実行するようにします。
- sudoでパスワードを聞かれるので無効化します(!)
おおよそこんなかんじです。
1. Dockerコンテナを起動するシェルスクリプト用意し、name オプション付きでDockerを起動するように設定します
jetson-inference/docker/run.sh のスクリプトで、コンテナネームを指定してください [container_name]
(前略)
# run the container
if [ $ARCH = "aarch64" ]; then
# /proc or /sys files aren't mountable into docker
cat /proc/device-tree/model > /tmp/nv_jetson_model
sudo docker run --runtime nvidia -it --rm \
--network host –name [continer_name] \
….
(後略)
2. Jetsonにある「Startup Applications Preference」で、Docker起動スクリプトを自動実行設定します。
「Startup Applications Preference」を実行して、下記のcommandを設定します。
(docker起動用)
gnome-terminal -e “bash -c ‘/path/to/jetson-inference/docker/run.sh;$SHELL’”
3. Jetsonにある「Startup Applications Preference」で、nameオプションでコンテナ指定してDocker実行するようにします。
同じく「Startup Applications Preference」を実行して、下記のcommandを設定します。
[container_name] には先程指定した名前を設定します。
gnome-terminal -e “bash -c ‘/usr/bin/docker exec [my_container] posenet.py csi://0;$SHELL’”
4. sudoでパスワードを聞かれるので無効化します(!)
docker起動時にsudoでパスワードを聞かれて自動実行がうまく行きませんでした。
(途中で止まってしまう)
セキュリティ要件とご相談ですが、今回はパスワードを無効化して対応しました。
sudo visudo
[username]のところに、jetsonのユーザー名を入れて、NO PASSWORD設定を行いました。
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
[username] ALL=NOPASSWD: ALL
以上で、なんとか自動起動するようになりました。
cronやsystemctlとかで色々試しましたが、いずれもうまくできなく回り道したので、まあ大変でした(ただの苦労話)
どなたかの助けになれば幸いです。