今日は簡単な備忘録。
Raspberry Piなどを組み込みPCにするとき、プログラムをどこに保存していますか?(SDカード上?外付けSSD?USBメモリ?)
Raspberry Piなどはコンパイル時間もそこそこかかり、不便に思うこともあると思います。だからといってUSBメモリのマウントもMulti-user-targetにしないといけないしー… そこそこ面倒だと思います。
今回は、新規にUbuntu-server(Ubuntu18.04LTS)の導入後に一つのコマンドでその設定を素早く終わらせるスクリプトを作成しました。新規のUbuntu18-serverにgitがインストールされた状態を想定しています。
Githubにスクリプトを上げています。現段階ではとても読みにくくなっているので、そのうち修正します。
実行方法とその内容
管理者権限を付与せずに次のコマンドを実行します。
$ git clone https://github.com/Ar-Ray-code/usb_autostart.git $ cd usb_autostart $ chmod +x setup.bash $ ./setup.bash #勝手に再起動する
そのスクリプトでは、次の項目を設定します。
UbuntuのレベルをMulti-user-targetにする。
/home/ubuntu/.usb_mount.sh
にUSBメモリのマウントとその後に実行する内容を記述する。.usb_mount.sh
を自動実行するための設定ファイルを作成する。
これで、USBメモリをRasbperry Piと接続して再起動すれば、USBメモリの中にある/startup/start_service.sh
が自動で実行されます。失敗していれば、
systemctl status usb_ubuntu.service
で詳細を確認して、原因を調べましょう。
注意
USBメモリ上での動作は基本管理者権限が付与されるので、管理者権限では動かないプログラムについては別のデーモンをセットする必要があります。ROSコマンドはsudoと組み合わせると動きませんが、sudoが付与されたshell上なら、sudoと組み合わせることなくROSを動かせます。
当然ながら、USBと管理者権限を共有していると言えるので、セキュリティ等は無いに等しい状態になります。
すべて自己責任で行ってください。(たとえミスっても修復できます。)
主な用途
個人での開発では便利です。
私は、ROS2のパッケージやWi-Fiの設定ファイルをUSB側に保存して、IPアドレスをUSBメモリに書き出させるようにスクリプトを組んでいます。プログラムや設定の変更があったときに、そのUSBメモリをそのままコピーして複製すれば、わざわざRaspberry Pi(Ubuntu)を起動して変更する必要がないので、とても楽だと思います。また、初回起動時にIPアドレスが書き出されるので、ディスプレイを接続することなくIPを取得することができます。
機会があれば、USBメモリ側の実行例も示したいと思います。