Inicie a VM VBoxHeadless na inicialização

16

Não consigo fazer com que minha VM seja executada na inicialização.

Eu tentei os "aplicativos de inicialização" e update-rc.d sem sorte.

sudo update-rc.d startvms defaults 99 10

Isso criou todos os links simbólicos apropriados para os diferentes níveis de execução, mas a VM ainda não inicia.

Aqui está o meu script 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 "" 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

O que estou fazendo de errado?

    
por capdragon 15.08.2011 / 20:33

7 respostas

27

ESTE é finalmente funcionou!

1) Crie o arquivo de script de inicialização

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

Copiar Cole o seguinte no arquivo e substitua "My VM Name" pelo seu nome vm:

#! /bin/sh
# /etc/init.d/StartVM
#

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "" 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) Dê a permissão executável do script

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

3) Diga ao script para ser executado na inicialização.

diga ao script que seja o primeiro a desligar e o último a iniciar.

sudo update-rc.d StartVM defaults 99 01

    
por capdragon 16.04.2012 / 21:33
2

FYI, isso funciona no Opensuse sem nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
    
por Bill 07.11.2011 / 18:09
1

Desde que você mencionou que VBoxHeadless funciona bem se você digitá-lo a partir da linha de comando de um terminal, mas não inicia qualquer VM quando lançado a partir de um script de inicialização, acho que ele está procurando por alguma variável de ambiente que é definida quando você executa um shell em seu terminal, mas indefinido no ambiente de script init (que é basicamente vazio, exceto pelos parâmetros fornecidos na linha de comando do kernel ).

Você pode tentar substituir as invocações do VBoxHeadless no script por isso?

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

Aqui, "username" e o caminho do diretório home devem ser alterados para corresponder aos do usuário que você usa para iniciar a VM.

Se isso funcionar, você pode querer usar su -l para rodar o VBoxHeadless ao invés deste env hack.

    
por Riccardo Murri 15.08.2011 / 22:07
1

Isso está funcionando bem com o servidor Ubuntu 12.04 e o VirtualBox 4.2.20.

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "" 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

e

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

e

sudo update-rc.d StartVM defaults 99 01

conforme indicado em uma resposta anterior.

    
por user224910 16.12.2013 / 23:57
0

pode-se também querer definir diretamente a porta ao usar vrdp .. comente para a resposta top, que compartimenta bem para usar scripts diferentes para diferentes vms

VBoxVRDP -startvm "myVM" -vrdpport 3391 &
    
por ebricca 09.03.2015 / 12:36
0

Uau .. Estou vendo todas essas soluções, que parecem um pouco complexas, mas este é meu terceiro laptop no qual acabei simplesmente escrevendo:

VBoxHeadless -s "Ubuntu Server"

no meu arquivo rc.local no diretório / etc / e funcionou muito bem. Executa a máquina virtual automaticamente em uma reinicialização.

    
por Muhammad bin Yusrat 19.06.2017 / 02:37
0

Em versões recentes do Virtualbox (4.2.0 em diante), você não precisa rolar seu próprio script para iniciar automaticamente uma VM, mas precisa de alguma configuração. Consulte a seção 9.24 do Manual do Virtualbox " Iniciando máquinas virtuais durante a inicialização do sistema "

Infelizmente, o manual fornece apenas instruções resumidas e não é atualizado há séculos. Eu encontrei esta postagem nos fóruns do VirtualBox com mais detalhes.

Você poderia simplesmente colocar uma linha no rc.local para iniciar o seu servidor, mas se você quiser fazer isso, leia a maneira "oficial".

Adicione estas linhas ao arquivo / etc / default / virtualbox:

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

Edite /etc/vbox/vboxautostart.cfg (este exemplo nega a permissão de início automático para todos os usuários, exceto o usuário "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
}

Adicione o grupo vboxusers ao / etc / vbox e ao sticky bit:

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

Adicione todos os usuários que usarão o virtualbox ao grupo "vboxusers", por exemplo:

# adduser Bob vboxusers

Todo usuário que deseja habilitar a autoinicialização para máquinas individuais precisa definir o caminho para o diretório de banco de autoinicialização com:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Os usuários podem definir as VMs para iniciar automaticamente e configurar como elas serão interrompidas (por exemplo, savestate, acpishutdown) com:

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

O acima funcionou para mim com o Virtualbox 5, instalado a partir do repositório virtualbox.org.

    
por Jules 28.07.2017 / 19:37