Como iniciar máquinas de caixa virtual automaticamente ao inicializar?

53

Eu tenho muitas máquinas de caixa virtual no meu Ubuntu12.04, cada vez que eu desligo ou reinicializo, preciso iniciá-las uma a uma.

Quero uma ajuda para escrever um script para iniciar automaticamente automaticamente as máquinas VBox durante a inicialização.

Maythux
fonte
Possível duplicata de Como inicio aplicativos automaticamente no login?
Sergiy Kolodyazhnyy 04/0316
@SergiyKolodyazhnyy Esta pergunta não é uma duplicata disso, por qualquer meio.
Muhammad bin Yusrat 5/05

Respostas:

51

Você pode usar o serviço de inicialização automática do VirtualBox. Um bom tutorial descrevendo como fazer isso está publicado no blog "Life of a Geek Admin" .

As etapas a seguir são adaptadas da postagem do blog vinculada:

  1. Primeiro você precisa criar o arquivo /etc/default/virtualboxe adicionar algumas variáveis.

    VBOXAUTOSTART_DB, que contém um caminho absoluto para o diretório de banco de dados de inicialização automática e
    VBOXAUTOSTART_CONFIG, que contém o local das definições de configuração de inicialização automática. O arquivo deve ser semelhante a este:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. Agora precisamos criar o /etc/vbox/vbox.cfgarquivo e adicionar

    # 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
    }

    Nota: Se o nome do arquivo vbox.cfgnão funcionar acima, tente nomeá-lo autostart.cfg.

    Se você é o único usuário, basta adicionar a linha default_policy = allowao vbox.cfgarquivo.

  3. Defina as permissões no diretório para o grupo vboxuser e verifique se os usuários podem gravar no diretório e também em bits.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. Adicione cada um dos usuários ao vboxusersgrupo.

    sudo usermod -a -G vboxusers USERNAME

    (substitua USERNAMEpelo nome de usuário)

NOTA : Se você alterou as permissões de grupo para o usuário atual, efetue logout e logon novamente para atualizar as permissões. (crédito @ kR105)

  1. Todo usuário que deseja habilitar a inicialização automática para máquinas individuais deve definir o caminho para o diretório de banco de dados de inicialização automática com

    VBoxManage setproperty autostartdbpath /etc/vbox

    e habilite a inicialização automática para uma VM individual com

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

    Isso criará um myuserid.start arquivo no /etc/vboxdiretório

  2. Agora reinicie o vboxautostart-service para ler as alterações.

    sudo service vboxautostart-service restart
  3. Reinicie seu sistema e sua VM deve iniciar

kdmurray
fonte
como iniciar uma máquina virtual específica utilizando script de inicialização
Beginner
11
Meu 14.04 afirma que não existe um serviço como 'vboxautostart-service', você já testou isso?
Arronical
@ Arronical O OP e as instruções das quais a resposta foi obtida foram ambos para o Ubuntu 12.04. YMMV com versões depois disso.
kdmurray
Acontece que o virtualbox 4.3.10 não baixa os scripts init no 14.04, mas a resposta do ndasuser abaixo me ajudou a corrigir isso. Marcam com +1 todos!
Arronical
Eu estava tentando fazer esta solução funcionar no ubuntu 15.10 sem sucesso .. Eu terminei de usar este post freesoftwareservers.com/index.php/2015/10/24/… .. talvez não seja a abordagem correta, mas funciona
mozart_ar
15

Tive incidentes infelizes semelhantes ao tentar esta operação no LTS de baunilha.

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

Nesta versão, o arquivo de chave /etc/init.d/vboxautostart-service não foi instalado.

Tanto quanto eu sei que todo o VitualBox e requisitos foram colocados pelo apt-get, não posso dizer por que o arquivo 'vboxautostart-service' também não foi fornecido. Mas, para superar isso, aqui está minha atualização para o post do kdmurray.

1) O arquivo / etc / default / virtualbox existia para mim. Então, deve adicionar vars:

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

2) É necessário criar /etc/vbox/autostart.cfg conforme indicado pelo OP.

6b) Precisa obter um script de serviço vboxautostart e torná-lo executável.

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) Alerte o controlador rc.d, mas usei 24 como horário de início. Colocando apenas 20 e não foi iniciado. Talvez tenha sido executado antes mesmo do virtualbox estar funcionando.

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

A reinicialização iniciou a VM corretamente.

ndasusers
fonte
11
Na versão 5.2, você precisa editar o vboxautostart-service e substituir vboxdrvnas linhas # Required Start/ # Required Stoppor virtualbox. Parece que eles renomearam o serviço, portanto, o sistema operacional não pode detectar as prioridades de inicialização / parada corretamente. Eu acho que você não precisa da etapa 6c se tiver substituído essas linhas.
espinha de peixe
Muito obrigado @fishbone, seu comentário foi o truque que falta para mim #
Jairo Andres Velasco Romero
6

Você pode usar vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(um desses). Use "decapitado" se forem servidores aos quais você se conecta por outros meios que não o uso da GUI.

Para realmente executar esses comandos no momento certo durante a inicialização, você deve ler o Upstart.

Jo-Erlend Schinstad
fonte
6

Depois de muitas horas infelizes tentando fazer com que os procedimentos do kdmurray acima funcionassem, sem sucesso, finalmente encontrei um método que funcionava simplesmente.

Primeiro, meu host Linux (Mint 17) foi configurado no momento da inicialização para efetuar login automaticamente na minha conta principal.

Segundo, usei os recursos da GUI do VirtualBox (v4.3.12) para criar um atalho para cada máquina virtual na área de trabalho. {clique com o botão direito do mouse na VM na coluna esquerda e selecione "Criar atalho na área de trabalho"}

Próximo: Eu já havia descoberto que abrir Menu-> Centro de Controle -> Aplicativos de Inicialização -> Adicionar e adicionar atalhos da área de trabalho fornecia arquivos que não funcionavam, vi em outra resposta nesta página que a localização das startups é / home /USERNAME/.config/autostart, então cliquei com o botão direito do mouse em cada um dos atalhos da VM da área de trabalho e colei-os nessa pasta, substituindo os arquivos ruins anteriores. Agora eles desenvolveram os ícones 'bonitos' do VirtualBox.

E com certeza, ao reiniciar o computador host, as 3 VMs foram iniciadas automaticamente.

:-)

Bill Williams

PS: infelizmente ainda tenho algo faltando, porque muitas vezes as Máquinas Virtuais não iniciam na inicialização. Em vez disso, elas geram uma caixa de diálogo de erro informando que estão bloqueadas, mesmo que eu tenha pedido para que desligassem antes da reinicialização do host.

Bill Williams
fonte
11
Para sua informação, não há "resposta 5". O número que você vê à esquerda de cada resposta é a contagem total de votos. Dito isto, o seu é um bom método alternativo de GUI. Obrigado pela contribuição.
precisa saber é
5

Além da boa descrição do serviço vboxautostart acima, você pode fazer

VBoxManage modifyvm server --autostop-type savestate

para parar automaticamente o convidado no desligamento. Para o Ubuntu 14.04, tive que adicionar um sono 30 na seção vboxautostart-service stop, para que espere até que o hóspede seja salvo completamente.

Michael Schlueter
fonte
2

Eu encontrei uma maneira mais simples no Ubuntu 16.04 executando o VBox 5.1.34.

Enquanto estiver no VBox, clique com o botão direito do mouse na VM inativa ou em execução na lista, selecione 'Criar atalho na área de trabalho ". Depois de ver o ícone na área de trabalho, abra com qualquer ferramenta que permita ver o comando subjacente criado pela VBox (no meu clique com o botão direito do mouse e selecione 'propriedades') Copie isso para a área de transferência.

Abra o programa para atualizar 'aplicativos de inicialização' e crie um novo aplicativo que inicie no momento da inicialização, colando o comando que você copiou do link da área de trabalho criado pelo VirtualBox.

Dave Nagy
fonte
1

Para iniciar uma VM ao fazer login em nossa sessão, podemos definir um arquivo .desktop:

Quando esse arquivo foi copiado ou movido para o diretório de inicialização automática, ele será executado após o login:

A execução do Virtual Box no espaço do usuário pode ajudar a evitar efeitos colaterais indesejados ao iniciá-los durante a inicialização (por exemplo, a VM é executada como raiz, o tempo de inicialização aumenta incrivelmente, ...).

Takkat
fonte
1

Isso pode ser feito usando a Interface de gerenciamento de linha de comando do VirtualBox. Basta executar o seguinte script na inicialização.

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

um bom tutorial para mais informações.

Artex
fonte
Bem-vindo .. Copie / cole informações importantes a partir do link
tempestade
1

Complemento para a resposta @kdmurray.

Se você receber um erro em:

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

Para resolver isso, tive que criar manualmente os arquivos "nome de usuário" .start e "nome de usuário" .stop com:

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

E mude o proprietário com:

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

executar novamente:

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

reinicie o serviço:

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

verifique se está tudo bem com:

top

e você verá o processo "VBox ..." em uma lista, se a máquina virtual estiver em execução

Solata
fonte
0

Você também pode obter o gerenciador de sessões gnome descrito aqui. Gnome Session Manager Está no centro de software ou você pode simplesmente acessar um terminal e digitar sudo apt-get install gnome-session-common

Em seguida, você pode criar um pequeno script para executar e usar o gerenciador de sessões do gnome para iniciá-lo. Aqui está um pequeno exemplo de script para você começar ...

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

É assim que inicio o meu Centos (nome da minha máquina virtual) quando minha máquina host é reinicializada. Eu uso o crontab para esse trabalho. Aqui está minha entrada do crontab:

@reboot VBoxHeadless --startvm "Centos" &
user514700
fonte
0

Para o servidor Ubuntu 16.04.1 LTS, resolvi isso fazendo:

Primeiro ative o rc-local.service

sudo systemctl enable rc-local.service

Adicione a seguinte linha em /etc/rc.local

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

Observe que o virtual_box_user é aquele que pode ver a máquina virtual (que você deseja iniciar) executando o comando:

VBoxManage list vms

Exemplo:

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

O modificado /etc/rc.localdeve ficar assim

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

Se você não escolher o proprietário certo do virtualbox, verá o erro ao digitar o comando:

sudo systemctl status rc-local.service

Espero que isso possa ajudar

Alessandro Cimbelli
fonte
0

1 - Crie um arquivo:

nano /etc/init.d/vm-start

Cole isto:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Substitua "validuser" pelo seu nome de usuário
  • Substitua "MACHINENAME" pelo nome da sua máquina virtual
  • Se você precisar iniciar mais de uma máquina, repita a linha acima com o nome da sua máquina virtual:

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

2 - Torne o arquivo vm-start executável:

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

3 - Editar rc.local

nano /etc/rc.local

Adicione isso:

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

4 - Reinicie.

Lucas Catani
fonte