Mulai VBoxHeadless VM saat startup

16

Sepertinya saya tidak bisa menjalankan VM saya saat startup.

Saya mencoba "aplikasi startup" dan memperbarui-rc.d tanpa hasil.

sudo update-rc.d startvms defaults 99 10

Ini menciptakan semua tautan simbolik yang sesuai untuk level run yang berbeda tetapi VM masih belum mulai.

Inilah skrip startvms saya:

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

Apa yang saya lakukan salah?

capdragon
sumber
Apakah Anda meningkatkan Virtual Box ke PUEL untuk memasukkan dukungan VRDP (diperlukan untuk mode tanpa kepala)?
Takkat
@Takkat: ya, saya seharusnya menyebutkan: mode headless bekerja sangat baik untuk saya ... saya tidak bisa menjalankannya saat startup.
capdragon
1
Bagaimana jika Anda mencoba VBoxManage startvm --type headless "UbuntuServer"alih-alih VBoxHeadlessperintah?
Takkat
Anda mungkin juga perlu root untuk menjalankannya su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat
@ Takkat: tidak ada dadu. Tetapi sekali lagi, saya bisa membuat VBoxHeadless bekerja dengan baik dengan perintah yang saya gunakan. HANYA tidak berfungsi ketika saya melakukannya di skrip startup.
capdragon

Jawaban:

27

INI adalah apa yang akhirnya bekerja!

1) Buat file skrip startup

di /etc/init.d - sudo nano /etc/init.d/StartVM.

Salin Tempel berikut ini di file dan ganti "My VM Name" untuk nama vm Anda:

#! /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) Berikan skrip izin yang dapat dieksekusi

dengan sudo chmod +x /etc/init.d/StartVM.

3) Beri tahu skrip untuk dijalankan saat startup.

beritahu skrip menjadi yang pertama untuk shutdown dan yang terakhir ke startup.

sudo update-rc.d StartVM defaults 99 01

capdragon
sumber
2
bukankah VRDP menambahkan overhead tambahan, tidak VBoxManage startvm --type headlessakan lebih baik?
mojzis
3
Dalam kasus spesifik saya, saya ingin VM dimatikan dengan anggun daripada menyelamatkan negara. mengganti "savestate" dengan "acpipowerbutton" bekerja sempurna untuk ini.
muzzamo
2

FYI, Ini berfungsi pada Opensuse tanpa nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Tagihan
sumber
Jadi saya menggunakan skrip yang sama saya miliki kecuali meninggalkan nohup?
capdragon
Menyingkirkan hohup, masih tidak berhasil. Saya pasti melakukan sesuatu yang salah. Apakah Anda yakin kami menggunakan skrip yang sama? Harap edit jawaban Anda dan sertakan skrip Anda sehingga saya dapat mencobanya.
capdragon
2

Ini berfungsi baik dengan server Ubuntu 12.04 dan 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

Dan

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

dan

sudo update-rc.d StartVM defaults 99 01

seperti yang ditunjukkan pada jawaban sebelumnya.

pengguna224910
sumber
Ini sangat bagus untuk saya! Kecuali dengan Vbox 5.0. Ini sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME & startvm memiliki 2 "-" dan Anda hanya menuntut VBoxHeadless alih-alih --type headless. Juga perlu dicatat adalah bahwa sementara saya yakin kita berada di server, tanpa "&" pada akhirnya, server tidak bisa boot untuk masuk prompt tetapi semua layanan bekerja seperti SSH, RDP dll, hanya sesuatu yang saya perhatikan. Itu membuat server terjebak pada informasi boot logon verbose!
FreeSoftwareServers
1

Karena Anda menyebutkan bahwa VBoxHeadless berfungsi dengan baik jika Anda mengetiknya dari baris perintah terminal tetapi tidak memulai VM apa pun ketika diluncurkan dari skrip init, tebakan saya adalah bahwa ia sedang mencari beberapa variabel lingkungan yang ditentukan ketika Anda menjalankan shell di terminal Anda tetapi tidak terdefinisi di lingkungan skrip init (yang pada dasarnya kosong, kecuali untuk parameter yang diberikan pada baris perintah kernel).

Bisakah Anda mencoba mengganti doa VBoxHeadless dalam skrip dengan ini?

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

Di sini "nama pengguna" dan jalur direktori home harus diubah agar sesuai dengan pengguna yang Anda gunakan untuk memulai VM.

Jika berhasil, Anda mungkin ingin menggunakan su-l untuk menjalankan VBoxHeadless alih-alih hack env ini .

Riccardo Murri
sumber
+1 untuk su -l- itu poin bagus!
Takkat
tidak ... masih tidak berfungsi. Saya memutuskan untuk hanya menggunakan pekerjaan cron
capdragon
1

Pada versi terbaru dari Virtualbox (4.2.0 dan seterusnya) Anda tidak perlu menggulung skrip Anda sendiri untuk melakukan autostart pada VM, tetapi itu memang membutuhkan konfigurasi. Lihat bagian 9.24 dari Manual Virtualbox " Memulai mesin virtual saat boot sistem "

Sayangnya manual ini hanya memberikan instruksi garis besar dan belum diperbarui dalam usia. Saya menemukan posting ini di forum virtualbox dengan beberapa detail tambahan.

Anda bisa meletakkan baris di rc.local untuk memulai server Anda tetapi jika Anda ingin melakukannya dengan cara "resmi" baca terus ..

Tambahkan baris ini ke / etc / default / virtualbox:

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

Edit /etc/vbox/vboxautostart.cfg (contoh ini menolak izin autostart untuk semua pengguna kecuali pengguna "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
}

Tambahkan grup vboxusers ke / etc / vbox dan sticky bit:

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

Tambahkan semua pengguna yang akan menggunakan virtualbox ke grup "vboxusers", misalnya:

# adduser Bob vboxusers

Setiap pengguna yang ingin mengaktifkan autostart untuk masing-masing mesin harus menyetel path ke direktori database autostart dengan:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Pengguna kemudian dapat mengatur VMs untuk autostart dan mengonfigurasi bagaimana mereka akan berhenti (mis. Savestate, acpishutdown) dengan:

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

Di atas bekerja untuk saya dengan Virtualbox 5, diinstal dari repositori virtualbox.org.

Jules
sumber
Sial, baru selesai menggeliat ini hanya untuk mengetahui itu sudah dijawab di sini , berdasarkan pada posting blog ini
Jules
0

kita mungkin juga ingin mengatur port secara langsung ketika menggunakan vrdp .. mengomentari jawaban teratas, yang mengelompokkan dengan baik untuk menggunakan skrip yang berbeda untuk vms yang berbeda

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

Wow .. Saya melihat semua solusi ini, yang tampaknya agak rumit, tapi ini laptop ketiga saya yang akhirnya saya tulis:

VBoxHeadless -s "Ubuntu Server"

di file rc.local saya di direktori / etc / dan itu bekerja cukup baik. Menjalankan mesin virtual secara otomatis saat reboot.

Muhammad bin Yusrat
sumber