Inicie a VM do VBoxHeadless na inicialização

16

Não consigo executar minha VM na inicialização.

Eu tentei os "aplicativos de inicialização" e o 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 "$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

O que estou fazendo de errado?

capdragon
fonte
Você atualizou o Virtual Box para PUEL para incluir o suporte VRDP (necessário para o modo sem cabeça)?
Takkat 15/08/11
@ Takkat: sim, eu deveria ter mencionado: o modo sem cabeça funciona muito bem para mim ... eu simplesmente não consigo fazê-lo funcionar na inicialização.
precisa saber é o seguinte
11
E se você tentasse em VBoxManage startvm --type headless "UbuntuServer"vez de VBoxHeadlesscomandar?
Takkat 15/08/11
Você também pode precisar ser root para fazê-lo funcionar como su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat 15/08/11
@ Takkat: sem dados. Mas, novamente, posso obter o VBoxHeadless funcionando bem com o comando que estou usando. Só não está funcionando quando eu faço isso em um script de inicialização.
Capdragon 15/08

Respostas:

27

Isto é o que finalmente funcionou!

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

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

Copie Cole o seguinte no arquivo e substitua "My VM Name" pelo nome da sua VM:

#! /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) Conceda ao script permissão executável

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

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

diga ao script o primeiro a desligar e o último a inicializar.

sudo update-rc.d StartVM defaults 99 01

capdragon
fonte
2
o VRDP não adiciona sobrecarga extra, não VBoxManage startvm --type headlessseria melhor?
mojzis 7/09/12
3
No meu caso específico, queria que a VM fosse desligada normalmente, em vez de salvar o estado. substituir "savestate" por "acpipowerbutton" funcionou perfeitamente para isso.
muzzamo 23/05
2

Para sua informação, isso funciona no Opensuse sem nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &
Conta
fonte
Então, eu uso o mesmo script que tenho, exceto deixar de fora o nohup?
Capdagon # 07/11
Livre-se do hohup, ainda não funciona. Eu devo estar fazendo outra coisa errada. Tem certeza de que estamos usando o mesmo script? Edite sua resposta e inclua seu script para que eu possa tentar.
Capdagon #
2

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 "$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

E

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

e

sudo update-rc.d StartVM defaults 99 01

como indicado em uma resposta anterior.

user224910
fonte
Isso funciona muito bem para mim! Exceto no Vbox 5.0, seu sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME e, portanto, o startvm possui 2 "-" e você processa o VBoxHeadless em vez de --type headless. Também digno de nota é que, embora tenha certeza de que estamos em um servidor, sem o "&" no final, o servidor não inicializa no prompt de login, mas todos os serviços funcionam como SSH, RDP etc., apenas algo que notei. Deixa o servidor preso no logon de inicialização com informações detalhadas!
FreeSoftwareServers
1

Como você menciona que o VBoxHeadless funciona bem se você digitar na linha de comando de um terminal, mas não inicia nenhuma VM quando iniciada a partir de um script init, meu palpite é que ele está procurando alguma variável de ambiente definida quando você executa um shell no seu terminal, mas não definido no ambiente de script init (que está 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, "nome de usuário" e o caminho do diretório inicial 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 executar o VBoxHeadless em vez deste env hack.

Riccardo Murri
fonte
+1 para su -l- esse é um bom ponto!
Takkat 15/08/11
não ... ainda não funciona. Eu decidi usar apenas um trabalho cron
capdragon
1

Nas versões recentes do Virtualbox (4.2.0 em diante), não é necessário rolar o seu próprio script para iniciar automaticamente uma VM, mas é preciso 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 detalhadas e não é atualizado há séculos. Encontrei este post nos fóruns do VirtualBox com alguns detalhes extras.

Você pode simplesmente colocar uma linha no rc.local para iniciar o servidor, mas se você quiser fazê-lo da maneira "oficial", continue lendo.

Adicione estas linhas ao / 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 inicialização automática 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 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 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

Os usuários podem configurar 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 exemplo acima funcionou para mim com o Virtualbox 5, instalado a partir do repositório virtualbox.org.

Jules
fonte
Droga, acabado de se contorcendo isso apenas para descobrir que já está respondida aqui , com base neste post
Jules
0

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

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

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

VBoxHeadless -s "Ubuntu Server"

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

Muhammad bin Yusrat
fonte