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


16

起動時に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

何が間違っていますか?


Virtual BoxをPUELにアップグレードしてVRDPサポートを含めましたか(ヘッドレスモードに必要)?
タックカット

@Takkat:はい、私は言及する必要がありました:ヘッドレスモードは私にとって素晴らしい作品です...起動時に実行することができません。
capdragon

1
コマンドのVBoxManage startvm --type headless "UbuntuServer"代わりに試した場合はどうなりますVBoxHeadlessか?
タックカット

次のように実行するには、rootになる必要がありますsu -c 'VBoxHeadless --startvm <MACHINE>'
タッカット

@Takkat:サイコロなし。しかし、ここでも、使用しているコマンドでVBoxHeadlessを正常に動作させることができます。起動スクリプトで実行すると機能しません。
capdragon

回答:


27

これは ある最後に働いた何!

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

/etc/init.d-にありsudo nano /etc/init.d/StartVMます。

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

#! /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


2
VRDPは余分なオーバーヘッドを追加しVBoxManage startvm --type headlessませんか?
mojzis

3
特定のケースでは、状態を保存するのではなく、VMを正常にシャットダウンする必要がありました。「savestate」を「acpipowerbutton」に置き換えると、これで完全に機能しました。
muzzamo

2

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

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

だから私はnohupを省く以外は同じスクリプトを使用しますか?
capdragon

hohupを削除しましたが、まだ動作しません。私は何か間違ったことをしているに違いない。同じスクリプトを使用していると確信していますか?回答を編集し、スクリプトを含めて、試してみてください。
capdragon

2

これは、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

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


これは私に最適です!Vbox 5.0のsudo -u $ VMUSER VBoxHeadless --startvm $ VMNAMEを除き、startvmには2つの "-"があり、-type headlessの代わりにVBoxHeadlessを訴えます。また、最後に「&」がないサーバー上にいることは確かですが、サーバーはログインプロンプトで起動しませんが、すべてのサービスはSSH、RDPなどのように動作します。サーバーがブートログオンの詳細情報でスタックしたままになります。
FreeSoftwareServers

1

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

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

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

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

その作品の場合は、使用する場合がありますのsu -lをこのするのではなく、VBoxHeadlessを実行するためのenvハック。


+1- su -lそれは良い点です!
Takkat

いや...まだ動作しません。cronジョブを使用することにしました
capdragon

1

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で機能しました。


くそー、ちょうどこれが唯一見つけるために身もだえ終わっそれはすでにここに答えています基づいて、このブログの記事
ジュール・

0

また、vrdpを使用するときにポートを直接設定することもできます。トップアンサーへのコメント。これは、異なるVMに対して異なるスクリプトを使用するためにうまく区分されます。

VBoxVRDP -startvm "myVM" -vrdpport 3391 &

0

うわー..これらのソリューションはすべて複雑に見えますが、これは3番目のラップトップであり、最終的には次のように記述します。

VBoxHeadless -s "Ubuntu Server"

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.