Ubuntu 15.10 vboxautostart-service stop が機能しない

Ubuntu 15.10 vboxautostart-service stop が機能しない

14.04 システムを 15.10 の新規インストールに置き換えました。14.04 では、vboxautostart init スクリプトを使用して、起動時に vbox ゲストを起動し、システムのシャットダウン時に停止していました。これは以前は非常にうまく機能していました。

今、Ubuntu 15.10で同様の設定を実現しようとしています。主な違いは、まだあまり使い慣れていないsystemdを使用する必要があることです。vbox固有の設定を行うことができたので、 /usr/lib/virtualbox/vboxautostart-service.sh start/stopシェルから呼び出すことができ、完璧に動作します。また、vboxゲストを起動するためにも使用できますsystemctl start vboxautostart-service.service。サービスを有効にすると、システム起動時に自動的に起動します。ただし、

systemctl stop vboxautostart-service.service

何も行われないので、ゲストはその後も実行され続けます。systemctl
status は次のように表示されます。

root@linux:~# systemctl -l status vboxautostart-service.service
● vboxautostart-service.service
   Loaded: loaded (/usr/lib/virtualbox/vboxautostart-service.sh; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sa 2015-10-31 16:39:10 CET; 4min 57s ago
  Process: 5645 ExecStop=/usr/lib/virtualbox/vboxautostart-service.sh stop (code=exited, status=0/SUCCESS)
  Process: 5586 ExecStart=/usr/lib/virtualbox/vboxautostart-service.sh start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/vboxautostart-service.service
           ├─ 875 /usr/lib/virtualbox/VBoxXPCOMIPCD
           ├─ 880 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
           └─5602 /usr/lib/virtualbox/VBoxHeadless --comment server --startvm b3376916-8562-442e-a25e-cfe26fa800db --vrde config

Okt 31 16:37:52 linux systemd[1]: Starting vboxautostart-service.service...
Okt 31 16:37:52 linux vboxautostart-service.sh[5586]: Starting VirtualBox VMs configured for autostart
Okt 31 16:37:52 linux systemd[1]: Started vboxautostart-service.service.
Okt 31 16:39:10 linux systemd[1]: Stopping vboxautostart-service.service...
Okt 31 16:39:10 linux systemd[1]: Stopped vboxautostart-service.service.

サービス内の ExecStop コマンドは正しく機能しているように見えますが、何らかの理由で systemd から呼び出されたときに機能しません。ここで何ができるのか、何かアイデアはありますか?

答え1

Oracle からパッケージ化された systemd と virtualbox 5.0.10 を搭載した Debian Jessie でも同じ問題が発生しているようです。

何度もデバッグした結果、/usr/lib/virtualbox/vboxautostart-service.sh の stop() 関数で start-stop-daemon が呼び出される方法 (236 行目あたり) に何か関係があるようですが、これは start() 関数では同じようにはトリガーされません。

私が思いついたのはひどいハックですが、もっと systemd に詳しい人にこの問題を掘り下げてもらいたいと思っています。

/usr/lib/virtualbox/vboxautostart-service.sh で置き換えました:

for user in `ls $VBOXAUTOSTART_DB/*.stop` 
do
    start_daemon `basename $user | sed -ne "s/\(.*\).stop/\1/p"` $binary $PARAMS > /dev/null 2>&1
done

と :

for user in `ls $VBOXAUTOSTART_DB/*.stop`
do
    su - `basename $user | sed -ne "s/\(.*\).stop/\1/p"` -c "$binary $PARAMS" > /dev/null 2>&1
done

答え2

Oracle からパッケージ化された systemd と VirtualBox 5.1.x を搭載した Ubuntu 16.06 xenial でも同じ問題が発生しているようです。

ここで解決策を見つけました: https://www.virtualbox.org/ticket/14955

変更内容/usr/lib/virtualbox/vboxautostart-service.sh:

  1. start-stop-daemon --background --chuid $usr --start --exec $bin -- $@
  2. start-stop-daemon --chuid $usr --start --exec $bin -- $@

関連情報