初めに
Linux Deployを使っていてwebminやHomebridgeを動かそうとするのですが、sudo systemctl start webmin.serviceとかやるとchroot上だから無視するねーみたいなことを言われます。今回はこれを回避してスタートアップ設定をします。ちなみに実行環境はLinux Deploy上のUbuntu 22.04 LSTです。
方法
systemdは独自の規則に従って書かれているサービスファイルを実行します。このサービスファイルはstartに対するコマンド、stopに対するコマンドといった感じで記述されています。そこで、直接そのコマンドを実行すればいいわけです。
サービスファイルは/usr/lib/systemd/system/か/etc/systemd/system/に入っています。今回は例としてwebminを取り上げます。webminのサービスファイルは/usr/lib/systemd/system/webmin.serviceです。これの中身は
こんな感じになっています。ExecStart=のあとに続く部分(/usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf)が実行されるコマンドです。これにsudoをつけて
sudo /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf
でwebminが実行できます。他にはhomebridgeでは/usr/lib/systemd/system/homebridge.serviceの中身が
となっているのでsudo /opt/homebridge/start.shで実行できるはずです。実際に動かしてみると、rootユーザで実行するのは推奨されてないから–allow-rootフラグをつけろ的なことを言われるので
sudo /opt/homebridge/start.sh --allow-root
みたいな感じで実行できます。一応ExecStartPreもあるので、心配な人は上のコマンドを実行する前に
sudo /bin/run-parts /etc/hb-service/homebridge/prestart.d
を実行してください。
これらから起動できることがわかったと思うので、あとはスクリプトファイルを書いて/etc/rc3.d/に置くだけです。webminなら
echo 'sudo /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf' | sudo tee /etc/rc3.d/S01webmin
sudo chmod 755 /etc/rc3.d/S01webmin
Homebridgeなら
echo 'sudo /opt/homebridge/start.sh --allow-root' | sudo tee /etc/rc3.d/S99homebridge
sudo chmod 755 /etc/rc3.d/S99homebridge
みたいな感じで作って権限をつければ大丈夫です。 あとは再起動した時に自動で実行されます。
終わりに
他のサービスでも同じようにできると思うので頑張ってやってみてください。