web-dev-qa-db-ja.com

起動時にVBoxHeadless VMを起動します

VMを起動時に実行できないようです。

「スタートアップアプリケーション」とupdate-rc.dを試してみましたが、うまくいきませんでした。

Sudo update-rc.d startvms defaults 99 10

これにより、異なる実行レベルに適切なシンボリックリンクがすべて作成されましたが、VMはまだ起動しません。

これが私のstartvmsスクリプトです。

#!/bin/bash
### BEGIN INIT INFO
# Provides:          startvms
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start my VMs at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case "$1" in
  start)
        echo "Starting"
        Nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  stop)
        echo "Stopping $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        Nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

私は何を間違えていますか?

16
capdragon

THISis最終的に機能したもの!

1)起動スクリプトファイルを作成する

/etc/init.dで-Sudo nano /etc/init.d/StartVM

コピーファイルに次を貼り付け、「My VM Name」をvm名に置き換えます。

#! /bin/sh
# /etc/init.d/StartVM
#

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    Sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    Sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

2)スクリプトの実行許可を与える

Sudo chmod +x /etc/init.d/StartVMで。

3)スクリプトを起動時に実行するように指示します。

スクリプトを最初にシャットダウンし、最後に起動するように伝えます。

Sudo update-rc.d StartVM defaults 99 01

27
capdragon

参考までに、これはNohupのないOpenSuseで動作します。

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
2
Bill

これは、Ubuntuサーバー12.04およびVirtualBox 4.2.20で正常に機能しています。

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "$1" in
  start)
    echo "Starting VirtualBox VM SMARTHOST ..."
    Sudo -u $VMUSER VBoxManage startvm SMARTHOST --type headless
    echo "Starting VirtualBox VM wxp-acceso ..."
    Sudo -u $VMUSER VBoxManage startvm wxp-acceso --type headless
    echo "Starting VirtualBox VM wmmaq_edi ..."
    Sudo -u $VMUSER VBoxManage startvm vmmaq_edi --type headless
    ;;
  stop)
    echo "Saving state of Virtualbox VM SMARTHOST ..."
    Sudo -u $VMUSER VBoxManage controlvm SMARTHOST savestate
    echo "Saving state of Virtualbox VM wxp-acceso ..."
    Sudo -u $VMUSER VBoxManage controlvm wxp-acceso savestate
    echo "Saving state of Virtualbox VM vmmaq_edi ..."
    Sudo -u $VMUSER VBoxManage controlvm vmmaq_edi savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

そして

Sudo chmod +x /etc/init.d/StartVM

そして

Sudo update-rc.d StartVM defaults 99 01

前の回答で示したように。

2
user224910

VBoxHeadless は端末のコマンドラインから入力しても、initスクリプトから起動したときにVMを開始しなくても正常に機能するということを述べているので、端末でシェルを実行するときに定義されるが、initスクリプト環境では未定義の環境変数を探します(カーネルコマンドラインで指定されたパラメーターを除き、基本的には空です)。

スクリプトのVBoxHeadless呼び出しをこれに置き換えてみてください。

env USER=username HOME=/path/to/user/homedir VBoxHeadless ...same options as before...

ここで、「ユーザー名」とホームディレクトリのパスは、VMの起動に使用するユーザーのパスと一致するように変更する必要があります。

それが機能する場合、この env ハックの代わりに su -l を使用してVBoxHeadlessを実行することができます。

1
Riccardo Murri

Virtualboxの最近のバージョン(4.2.0以降)では、VMを自動起動するために独自のスクリプトをロールする必要はありませんが、設定が必要です。 Virtualboxマニュアルのセクション9.24を参照してください " システムブート中の仮想マシンの起動 "

残念ながら、このマニュアルは概要の説明のみを提供しており、長年にわたって更新されていません。私は virtualboxフォーラムのこの投稿 いくつかの追加の詳細を見つけました。

サーバーを起動するためにrc.localに行を追加するだけでもかまいませんが、「公式」な方法で読み進めてください。

次の行を/ etc/default/virtualboxに追加します。

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vboxautostart.cfg

/etc/vbox/vboxautostart.cfgを編集します(この例では、ユーザー「Bob」を除くすべてのユーザーの自動起動許可を拒否します。

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

/ etc/vboxおよびスティッキービットにvboxusersグループを追加します。

# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox

Virtualboxを使用するすべてのユーザーを「vboxusers」グループに追加します。例:

# adduser Bob vboxusers

個々のマシンで自動起動を有効にしたいすべてのユーザーは、自動起動データベースディレクトリへのパスを次のように設定する必要があります。

$ VBoxManage setproperty autostartdbpath /etc/vbox

次に、ユーザーはVMを自動起動するように設定し、次のように停止方法(savestate、acpishutdownなど)を構成できます。

$ VBoxManage modifyvm <vmname> --autostart-enabled on
$ VBoxManage modifyvm <vmname> --autostop-type acpishutdown

上記は、virtualbox.orgリポジトリからインストールされたVirtualbox 5で機能しました。

1
Jules

うわー..これらすべての解決策を見ていますが、これは少し複雑に思えますが、これは3番目のラップトップです。

VBoxHeadless -s "Ubuntu Server"

/ etc /ディレクトリの私のrc.localファイルで、それはかなりうまくいきました。再起動時に仮想マシンを自動的に実行します。

0

vrdpを使用するときにポートを直接設定することもできます。トップアンサーにコメントします。

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
0
ebricca