web-dev-qa-db-ja.com

ブート時にvboxwebを適切に起動するにはどうすればよいですか

最近、ヘッドレスサーバーをUbuntu Server 15.10に更新しました。

  • 基本的なUbuntuサーバー
  • ランプ
  • Xubuntuの最小インストール

デフォルトのUbuntuソースからvirtualbox 5.0.14をインストールしました。 virtualbox/5.0.14/Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.vbox-extpackをダウンロードしてインストールしました

グループvboxのユーザーvboxusersを定義しましたが、基本的にvirtualbox自体は正常に機能します。ただし、phpvirtualboxを使用してリモートで構成できるようにしたいと考えています。

phpvirtualbox-5.0-5.Zipをダウンロードしてインストールしました

VBOXWEB_USER=vboxをファイル/etc/default/virtualboxに追加しました。

別のマシンからWebページにアクセスすると、エラーCould not connect to Hostが発生しました(詳細は msg1 を参照してください。詳細は msg2 ですが、あまり重要ではないと思います)。

Sudo netstat -peanutを使用すると、vboxwebsrvが正しいIPアドレスを使用していないように見えました。予想される::1:18083ではなく、192.168.1.12:18083としてローカルアドレスを示しました。

グーグルで調べた後、ファイルVBOXWEB_Host=192.168.1.12/etc/default/virtualboxを追加しましたが、サービスを再起動しても変更はありません。

ただし、Sudo systemctl stop vboxweb.serviceを使用してサービスを停止し、Sudo vboxwebsrv -H 192.168.1.12を使用して手動で開始した場合、正常に機能しました。 Sudo netstat -peanutは、予想されるIP /ポートアドレスで報告するようになりました。

私が見たほとんどのドキュメントはinit.dを参照し、おそらくsystemdは/etc/default/virtualboxファイルを使用しないと考え始めました...ファイル/lib/systemd/system/vboxweb.serviceを編集できることがわかり、ExecStartコマンドに-H 192.168.1.12を追加しました。 vboxwebサービスの再起動後、機能しました! :o)

起動時に自動的に開始されるようにサービスを有効にしました:

Sudo systemctl enable vboxweb.service

しかし、再起動後、ps -efはサービスが開始されたことを示していますが、Sudo netstat -peanutにvboxwebがまったく表示されませんでした。

$ ps -ef

ルート1383 1 0 mars02? 00:00:00/usr/lib/virtualbox/vboxwebsrv --pidfile /run/vboxweb.pid --background -H 192.168.1.12 -p 18083

サービスを再起動すると修正されますが、再起動後は正しく起動しません。

そのため、おそらくsystemdの初期化プロセスの初期段階でvboxweb.serviceが開始されたと考えていました。そこで、vboxweb.serviceを使用してAfter=Apache2.serviceファイルを再度編集し(後でAfter=multi-user.targetも試しました)、systemd-analyse plotを使用してvboxwebのinitが実際に初期化シーケンスの最後に移動したことを確認しました。それでも、wboxwebはnetstat -peanutにリストされていませんでした

最後に私の質問に:

  1. Init.dとsystemdの間に競合がありますか? Ubuntuがsystemdに移行している間、そのvirtualbox(標準のUbuntuソースから)はinit.d固有のファイルに依存していますか?
  2. VBOXWEB_Hostファイルの/etc/default/virtualbox設定が効果を持たなかった他の理由は何ですか?
  3. Vboxweb.serviceファイルを編集することは正しいですか(具体的にはHostパラメーターを使用)。
  4. (これは重要なことです)ブート時にvboxwebサービスを正しいIP /ポート設定で稼働させるにはどうすればよいですか?アイデア:/

PS:私はこの投稿を大幅に短縮でき、残りを解決したので(ここでいくつかの質問を残して)主な質問をここに留めることができたことを知っていますが、他の人が自分の様子を見るのは面白いと思いましたveはこの問題に取り組みました。

BR、ロルフ

3
rolfhsp

さらにいくつかのグーグルといじくり回した後、私は最終的に解決策を思いつきました:

1)/etc/defaults/virtualboxファイルは何にも影響を及ぼさないようであると結論付けました(init.d時代の名残ですか?)。そのため、そのファイルのユーザーとグループの設定は無駄になりました。

解決策:User=vboxファイルのGroup=vboxusersセクションに[Service]およびvboxweb.serviceを追加しました。

2)私が抱えていた問題のいくつかは、vboxweb.configファイルが/runフォルダー内のpidファイルを参照しており、vboxがそのフォルダーへの書き込みアクセス権を持っていないことが原因でした。最初に、vboxが所有するpidファイルを格納するサブフォルダーを作成しようとしましたが、すべてのサブフォルダーを含む/runフォルダーがブート時に消去されることがわかりました。

ソリューション:vbox homedirにサブフォルダーを作成し、その場所でvboxweb.configファイルを更新しました。

3)何らかの理由で(それでも私を避けます)、config.phpphpvirtualboxフォルダー内)およびvboxweb.configファイル内の実際のIPアドレス192.168.1.12を参照します(元の投稿で言及された)、ブート時に動作しませんでした。 (ただし、後でサービスを再起動しても機能します。)

解決策: 192.168.1.12ではなくIPアドレス127.0.0.1でconfig.phpvboxweb.configの両方を更新しました。

ケースが閉じられました! :o)...物事がそうである理由に関するすべての質問は別ですが、私はそれで生きることができます:o)

BR、ロルフ

4
rolfhsp

rolfhspの答えは本当に役に立ちます。

さらに、vboxweb.serviceがroot以外の他のユーザーとして実行するように変更された場合、別の障害が発生します。この状況では、原因は「「/ dev/vboxdrvu」、errno = 13、rc = VERR_VM_DRIVER_NOT_ACCESSIBLEを開けませんでした」と記録されます。これは、ユーザーが/dev/vboxdrvuにアクセスする権限を持っていないことを意味します。

デフォルトでは、/dev/vboxdrvu/dev/vboxnetctlおよび/dev/vboxdruは、ルートに対してのみ許可されています(crw-------)。非rootユーザーがアクセスするには、アクセス許可を変更する必要があります。 このブログ によると、以下の内容の「ルール」ファイルを/ lib/udev /に置くだけでアーカイブされます。

/lib/udev/rules.d/20-virtualbox2.rules:

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
KERNEL=="vboxdrvu", NAME="vboxdrvu", OWNER="root", GROUP="vboxusers", MODE="0660"
KERNEL=="vboxnetctl", NAME="vboxnetctl", OWNER="root",GROUP="vboxusers", MODE="0660"

次に、システムを再起動します。再起動後、これらのファイルには新しい権限が付与されます。

crw-------. 1 root root      10, 54 Mar 20 00:24 /dev/vboxdrv
crw-rw----. 1 root vboxusers 10, 53 Mar 20 00:24 /dev/vboxdrvu
crw-rw----. 1 root vboxusers 10, 52 Mar 20 00:24 /dev/vboxnetctl

vboxdruはまだ変更されていませんが、vboxdrvuはすでに(vboxusersグループ内の)非ルートがアクセスするための適切な許可を持っています。この変更後、vboxweb.serviceが非rootユーザーによって正常に実行される可能性があります。

0
周默晗