Como iniciar máquinas de caixas virtuais automaticamente ao inicializar?

43

Eu tenho muitas máquinas de caixas virtuais no meu Ubuntu12.04, cada vez que eu desligar ou reiniciar eu tenho que iniciá-los um por um.

Eu quero uma ajuda na criação de scripts para automaticamente iniciar automaticamente as máquinas VBox ao inicializar.

    
por Maythux 13.01.2014 / 07:12

12 respostas

44

Você pode usar o serviço de início automático do VirtualBox. Um bom tutorial descrevendo como fazer isso é postado no "Life of a Geek Admin "blog .

As etapas a seguir foram adaptadas da postagem do blog vinculada:

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

    VBOXAUTOSTART_DB , que contém um caminho absoluto para o diretório de banco de dados de início automático e VBOXAUTOSTART_CONFIG , que contém o local das configurações de autostart. 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 arquivo /etc/vbox/vbox.cfg 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
    }
    

    Observação: Se o nome do arquivo vbox.cfg não funcionar acima, tente dar um nome a ele em autostart.cfg .

    Se você for o único usuário, basta adicionar a linha default_policy = allow ao arquivo vbox.cfg .

  3. Defina permissões no diretório para o grupo de usuários do vbox e verifique se os usuários podem gravar no diretório, bem como em bits fixos.

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

    sudo usermod -a -G vboxusers USERNAME
    

    (substitua USERNAME pelo nome de usuário)

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

  1. Todo usuário que deseja habilitar a autoinicialização para máquinas individuais precisa definir o caminho para o diretório de banco de dados de início automático com

    VBoxManage setproperty autostartdbpath /etc/vbox
    

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

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

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

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

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

por kdmurray 13.01.2014 / 08:27
11

Eu tive incidentes infelizes semelhantes tentando 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.

Até onde eu sei, todos os requisitos e requisitos do VitualBox foram inseridos pelo apt-get, então não posso dizer por que o arquivo 'vboxautostart-service' 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) Deve criar /etc/vbox/autostart.cfg conforme indicado pelo OP.

6b) É necessário 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) Alertar o controlador rc.d, mas usei 24 como a hora de início. Colocando apenas 20 e não foi iniciado. Talvez tenha sido executado antes mesmo de o Virtualbox estar funcionando.

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

Em seguida, a reinicialização iniciou a VM corretamente.

    
por ndasusers 11.11.2014 / 03:32
6

Depois de muitas horas infelizes tentando obter os procedimentos em do kdmurray acima para funcionar, sem sucesso eu finalmente encontrei um método que funcionou simplesmente.

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

Em segundo lugar, usei os recursos da VirtualBox GUI (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 da esquerda & amp; selecione "Criar atalho na área de trabalho"}

Próximo: eu já tinha descoberto que educar Menu- > Centro de controle - > Aplicativos de inicialização - > Adicionar e adicionando os atalhos da área de trabalho deu arquivos que não funcionaram, vi de 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 os colei nessa pasta, sobrescrevendo os arquivos anteriores. Agora eles desenvolveram os ícones 'bonitos' do VirtualBox.

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

:-)

Bill Williams

PS: infelizmente eu ainda tenho algo faltando, porque muitas vezes as Máquinas Virtuais não inicializam na inicialização, elas geram uma caixa de diálogo de erro que diz que elas estão bloqueadas, mesmo que eu tenha dito para desligar antes do host foi reinicializado.

    
por Bill Williams 24.08.2014 / 20:44
5

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

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

    
por Jo-Erlend Schinstad 13.01.2014 / 08:19
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 sleep 30 à seção de parada do serviço vboxautostart, para que ele esperasse até que o convidado fosse salvo completamente.

    
por Michael Schlueter 12.05.2015 / 19:36
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 em execução ou ociosa na lista, selecione 'Criar atalho na área de trabalho ".Após você ver o ícone na área de trabalho, abra com qualquer ferramenta que permita ver o comando subjacente criado pelo VBox (no meu sistema, clico com o botão direito do mouse e seleciono 'propriedades') Copia isso para a área de transferência.

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

    
por Dave Nagy 10.04.2018 / 22:17
1

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

Quando este arquivo foi copiado ou movido para nosso diretório de autoinicialização, ele será executado após o login:

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

    
por Takkat 13.01.2014 / 10:23
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 ótimo tutorial para mais informações.

    
por Artex 27.05.2016 / 20:52
1

Addon para @kdmurray answer.

Se você receber um erro:

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

Para resolver isso, eu tive que criar manualmente os arquivos "username" .start e "username" .stop com:

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

E altere o proprietário com:

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

reexecute:

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

depois reinicie o serviço:

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

verifique se está tudo bem com:

top

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

    
por Solata 26.07.2016 / 11:52
0

Você também pode obter o gerenciador de sessão do gnome descrito aqui. Gerenciador de Sessões do Gnome Está no centro do software ou você pode simplesmente ir para 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ão do gnome para iniciá-lo. Aqui está um pequeno exemplo de script para você ir ...

#!/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
    
por Scott Goodgame 13.01.2014 / 08:51
0

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

@reboot VBoxHeadless --startvm "Centos" &
    
por user514700 04.03.2016 / 15:31
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' &"

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

VBoxManage list vms

Exemplo:

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

O /etc/rc.local modificado deve ter esta aparência

#!/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, deverá ver o erro ao digitar o comando:

sudo systemctl status rc-local.service

Espero que isso possa ajudar

    
por Alessandro Cimbelli 14.09.2017 / 22:09