Jak automatycznie uruchamiać maszyny Virtual Box podczas uruchamiania?

53

Mam wiele maszyn wirtualnych w moim Ubuntu12.04, za każdym razem, gdy zamykam lub ponownie uruchamiam, muszę je uruchamiać jeden po drugim.

Chcę pomóc w napisaniu skryptu do automatycznego automatycznego uruchamiania maszyn VBox podczas uruchamiania.

Maythux
źródło
@SergiyKolodyazhnyy To pytanie w żadnym wypadku nie jest duplikatem tego pytania.
Muhammad bin Yusrat

Odpowiedzi:

51

Możesz skorzystać z usługi VirtualBox Auto-start. Dobry samouczek opisujący, jak to zrobić, znajduje się na blogu „Life of a Geek Admin” .

Poniższe kroki zostały dostosowane z połączonego postu na blogu:

  1. Najpierw musisz utworzyć plik /etc/default/virtualboxi dodać kilka zmiennych.

    VBOXAUTOSTART_DB, który zawiera bezwzględną ścieżkę do katalogu bazy danych autostartu i
    VBOXAUTOSTART_CONFIG, który zawiera lokalizację ustawień konfiguracji autostartu. Plik powinien wyglądać podobnie do tego:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
    
  2. Teraz musimy utworzyć /etc/vbox/vbox.cfgplik i dodać

    # Default policy is to deny starting a VM, the other option is "allow".
    default_policy = deny
    # Create an entry for each user allowed to run autostart
    myuserid = {
    allow = true
    }
    

    Uwaga: jeśli nazwa pliku vbox.cfgnie działa powyżej, spróbuj nazwać ją autostart.cfg.

    Jeśli jesteś jedynym użytkownikiem, możesz po prostu dodać wiersz default_policy = allowdo vbox.cfgpliku.

  3. Ustaw uprawnienia do katalogu na grupę vboxuser i upewnij się, że użytkownicy mogą pisać do katalogu, jak również lepki bit.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
    
  4. Dodaj każdego użytkownika do vboxusersgrupy.

    sudo usermod -a -G vboxusers USERNAME

    (zamień USERNAMEna nazwę użytkownika)

UWAGA : Jeśli zmieniłeś uprawnienia grupy dla bieżącego użytkownika, wyloguj się i zaloguj ponownie, aby odświeżyć uprawnienia. (kredyt @ kR105)

  1. Każdy użytkownik, który chce włączyć autostart dla poszczególnych komputerów, musi ustawić ścieżkę do katalogu bazy danych autostartu za pomocą

    VBoxManage setproperty autostartdbpath /etc/vbox

    i włącz autostart dla pojedynczej maszyny wirtualnej za pomocą

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    Spowoduje to utworzenie myuserid.start pliku w /etc/vboxkatalogu

  2. Teraz uruchom ponownie usługę vboxautostart, aby odczytać zmiany.

    sudo service vboxautostart-service restart
  3. Uruchom ponownie system i maszyna wirtualna powinna się uruchomić

kdmurray
źródło
jak uruchomić konkretną maszynę wirtualną za pomocą skryptu startowego
Początkujący
1
Mój 14.04 twierdzi, że nie ma takiej usługi jak „usługa vboxautostart”, czy to przetestowałeś?
Arronical
@Arronical OP i instrukcje, z których uzyskano odpowiedź, dotyczyły zarówno Ubuntu 12.04. YMMV z późniejszymi wersjami.
kdmurray
Okazuje się, że virtualbox 4.3.10 nie pobiera skryptów inicjujących 14.04, ale poniższa odpowiedź ndasuser pomogła mi to naprawić. +1 dookoła!
Arronical
Próbowałem sprawić, by to rozwiązanie działało na Ubuntu 15.10 bez powodzenia. Skończyłem korzystać z tego postu freesoftwareservers.com/index.php/2015/10/24/ ... .. może nie jest to poprawne podejście, ale działa
mozart_ar
15

Miałem podobne nieszczęśliwe incydenty podczas próby tej operacji na waniliowym LTS.

~$ cat /etc/os-release 
NAME="Ubuntu" 
VERSION="14.04.1 LTS, Trusty Tahr" 

W tej wersji plik klucza /etc/init.d/vboxautostart-service nie został zainstalowany.

O ile wiem, wszystkie aplikacje VitualBox i wymagania zostały wprowadzone przez apt-get, więc nie mogę powiedzieć, dlaczego plik „vboxautostart-service” również nie został udostępniony. Ale aby temu zaradzić, oto moja aktualizacja posta kdmurraya.

1) Dla mnie istniał plik / etc / default / virtualbox . Więc należy dodać zmienne:

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

2) Należy utworzyć plik /etc/vbox/autostart.cfg zgodnie z opcją OP.

6b) Potrzebujesz skryptu usługi vboxautostart i uczynić go wykonywalnym.

cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service

6c) Zaalarmuj kontroler rc.d, ale użyłem 24 jako godziny rozpoczęcia. Umieszczenie zaledwie 20 i nie wystartowało. Być może działał jeszcze zanim virtualbox działał.

sudo update-rc.d vboxautostart-service defaults 24 24

Następnie ponowne uruchomienie uruchomiło maszynę wirtualną poprawnie.

ndasusers
źródło
1
W wersji 5.2 musisz edytować usługę vboxautostart i zastąpić vboxdrvw # Required Start/ # Required Stoplinie przez virtualbox. Wygląda na to, że zmienili nazwę usługi, więc system operacyjny nie może poprawnie wykryć priorytetów start / stop. Myślę, że nie potrzebujesz kroku 6c, jeśli zastąpiłeś te linie.
fishbone
Dziękuję bardzo @fishbone twój komentarz był dla mnie sztuczką
Jairo Andres Velasco Romero
6

Możesz użyć vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(jednego z nich). Użyj „headless”, jeśli są to serwery, z którymi łączysz się w inny sposób niż za pomocą GUI.

Aby faktycznie uruchomić te polecenia we właściwym czasie podczas rozruchu, powinieneś przeczytać na Upstart.

Jo-Erlend Schinstad
źródło
6

Po wielu nieszczęśliwych godzinach próbujących wprowadzić procedury z kdmurray powyżej do pracy, bez powodzenia znalazłem metodę, która działała po prostu.

Najpierw mój host Linux (Mint 17) został skonfigurowany w czasie uruchamiania, aby automatycznie logować się na moje konto główne.

Po drugie, użyłem udogodnień w VirtualBox GUI (v4.3.12), aby utworzyć skrót do każdej maszyny wirtualnej na pulpicie. {kliknij prawym przyciskiem myszy maszynę wirtualną w lewej kolumnie i wybierz „Utwórz skrót na pulpicie”}

Dalej: Odkryłem już, że uruchomienie Menu-> Centrum sterowania -> Aplikacje startowe -> Dodaj i dodanie skrótów pulpitu dało pliki, które nie działały, zauważyłem z innej odpowiedzi na tej stronie, że lokalizacja startupów to / home /USERNAME/.config/autostart, więc kliknąłem prawym przyciskiem myszy każdy ze skrótów VM na pulpicie, a następnie wkleiłem je do tego folderu, zastępując wcześniejsze pliki crap. Teraz opracowali „ładne” ikony VirtualBox.

I oczywiście po ponownym uruchomieniu komputera hosta 3 maszyny wirtualne uruchomiły się automatycznie.

:-)

Bill Williams

PS: Niestety, wciąż czegoś mi brakuje, ponieważ często maszyny wirtualne nie uruchamiają się podczas rozruchu, zamiast tego generują okno dialogowe z błędem, które mówi, że są zablokowane, nawet jeśli kazałem im się zamknąć przed ponownym uruchomieniem hosta.

Bill Williams
źródło
1
Do Twojej wiadomości nie ma „odpowiedzi 5”. Liczba widoczna po lewej stronie każdej odpowiedzi to łączna liczba głosów. Powiedziawszy to, twoja jest dobrą alternatywną metodą GUI. Dzięki za wkład.
hmayag
5

Oprócz dobrego opisu powyższej usługi vboxautostart możesz to zrobić

VBoxManage modifyvm server --autostop-type savestate

aby automatycznie zatrzymać gościa przy wyłączaniu. W przypadku Ubuntu 14.04 musiałem dodać tryb uśpienia 30 do sekcji zatrzymania usługi vboxautostart, aby poczekał, aż gość zostanie całkowicie zapisany.

Michael Schlueter
źródło
2

Znalazłem prostszy sposób pod Ubuntu 16.04 z VBox 5.1.34.

Będąc w VBox, kliknij prawym przyciskiem myszy uruchomioną lub bezczynną maszynę wirtualną na liście, wybierz „Utwórz skrót na pulpicie”. Gdy zobaczysz ikonę na pulpicie, otwórz za pomocą dowolnego narzędzia, które pozwoli zobaczyć, jakie polecenie VBox zostało utworzone (na moim system, klikam prawym przyciskiem myszy i wybieram „właściwości”). Skopiuj to do schowka.

Otwórz program, aby zaktualizować „aplikacje startowe” i utwórz nową aplikację, która uruchamia się w czasie rozruchu, wklejając polecenie skopiowane z łącza pulpitu utworzonego przez VirtualBox.

Dave Nagy
źródło
1

Aby uruchomić maszynę wirtualną po zalogowaniu się do naszej sesji, możemy chcieć zdefiniować plik .desktop:

Kiedy ten plik został skopiowany lub przeniesiony do naszego katalogu autostartu, zostanie on wykonany po zalogowaniu:

Uruchamianie Virtual Box w przestrzeni użytkownika może pomóc uniknąć niepożądanych efektów ubocznych uruchamiania ich podczas uruchamiania (np. Maszyna wirtualna działa jako root, czas uruchamiania niesamowicie wzrasta, ...).

Takkat
źródło
1

Można to zrobić za pomocą interfejsu zarządzania wiersza poleceń VirtualBox. Po prostu uruchom następujący skrypt podczas uruchamiania.

#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")

case "$1" in
    start)
        echo "===Starting VirtualBox VM==="
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    stop)
        echo "===Saving state of Virtualbox VM==="
    sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
    sleep 20
        ;;
    shutdown)
        echo "===Shutting down Virtualbox VM==="
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
    sleep 20
        ;;
    reset)
        echo "===Resetting VirtualBox VM==="
         sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    status)
         echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
        ;;
        echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
        exit 1
        ;;
    esac

exit 0

Jest fajny samouczek, aby uzyskać więcej informacji.

Artex
źródło
Witamy .. Skopiuj / wklej ważne informacje z linku
burza
1

Dodatek do odpowiedzi @kdmurray.

Jeśli pojawi się błąd:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

Aby rozwiązać ten problem, musiałem ręcznie utworzyć pliki „nazwa użytkownika” .start i „nazwa użytkownika” .stop za pomocą:

sudo touch "username".start
sudo touch "username".stop

I zmień właściciela za pomocą:

sudo chown "username" "username".start
sudo chown "username" "username".stop

ponownie odtwarzać:

VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

następnie uruchom ponownie usługę:

sudo service vboxautostart-service stop
sudo service vboxautostart-service start

sprawdzenie, czy wszystko jest w porządku z:

top

i powinieneś zobaczyć proces „VBox ...” na liście, jeśli maszyna wirtualna jest uruchomiona

Solata
źródło
0

Możesz również uzyskać opisanego tutaj menedżera sesji gnome. Gnome Session Manager Jest w centrum oprogramowania lub możesz po prostu przejść do terminala i wpisać sudo apt-get install gnome-session-common

Następnie możesz utworzyć mały skrypt do uruchomienia i użyć menedżera sesji gnome, aby go uruchomić. Oto mały przykładowy skrypt na początek ...

#!/bin/sh

#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...

vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
Scott Goodgame
źródło
0

W ten sposób uruchamiam moje Centos (nazwa mojej maszyny wirtualnej) po ponownym uruchomieniu komputera. Używam crontab do tej pracy. Oto mój wpis w crontabie:

@reboot VBoxHeadless --startvm "Centos" &
użytkownik514700
źródło
0

W przypadku serwera Ubuntu 16.04.1 LTS rozwiązałem ten problem, wykonując:

Najpierw aktywuj usługę rc-local.service

sudo systemctl enable rc-local.service

Dodaj następujący wiersz /etc/rc.local

su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"

Zauważ, że użytkownik virtual_box_user może zobaczyć maszynę wirtualną (którą chcesz uruchomić) wykonującą polecenie:

VBoxManage list vms

Przykład:

$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28} 
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}

Zmodyfikowany /etc/rc.localpowinien wyglądać tak

#!/bin/sh -e
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error.
# 
# In order to enable or disable this script just change the execution
# bits. 
# 
# By default this script does nothing. 

su bob -c "VBoxManage startvm 'virtualbox1' --type headless &" 
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &" 

exit 0 

Jeśli nie wybierzesz odpowiedniego właściciela virtualbox, powinieneś zobaczyć błąd podczas wpisywania polecenia:

sudo systemctl status rc-local.service

Mam nadzieję, że to może pomóc

Alessandro Cimbelli
źródło
0

1 - Utwórz plik:

nano /etc/init.d/vm-start

Wklej to:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Zamień „validuser” na swoją nazwę użytkownika
  • Zamień „MACHINENAME” na nazwę maszyny wirtualnej
  • Jeśli chcesz uruchomić więcej niż 1 maszynę, powtórz powyższy wiersz z nazwą maszyny wirtualnej:

/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless" /bin/sleep 1

2 - Zrób plik vm-start wykonywalny:

chmod +x /etc/init.d/vm-start

3 - Edytuj plik rc.local

nano /etc/rc.local

Dodaj:

#!/bin/bash
/etc/init.d/vm-start
exit 0

4 - Uruchom ponownie.

Lucas Catani
źródło