O Libvirt com o Xen não inicia corretamente o Ubuntu 14.04

1

No momento, estou realmente me sentindo um pouco impotente:

Eu tentei configurar o Ubuntu 14.04 com o Xen e o libvirt para gerenciamento. Eu criei uma VM, mas não iniciei automaticamente (embora a inicialização automática esteja marcada). Se eu fizer um "stop libvirt-bin" e "start libvirt-bin" a VM iniciará perfeitamente.

O que me parece um pouco estranho é que o libvirt-bin está iniciando ANTES do daemon Xen.

Boot.log:

 * Starting configure network device security                            [ OK ]
 * Starting configure network device                                     [ OK ]
 * Starting libvirt daemon                                               [ OK ]
 * Starting Xen daemons                                                                [ OK ]

como solução alternativa, adicionei o comando start / stop ao rc.local

Alguma idéia sobre isso? A ordem de partida está correta?

    
por user279118 17.10.2015 / 15:09

1 resposta

2

Heres minha solução, Você está certo sobre o xen precisar rodar antes do libvirt-bin. O problema para mim é o fato de que xen está usando systemV e libvirt-bin usando upstart. Depois de muito debate decidi que tinha que ir com um ou outro.

Eu queria garantir que não tocasse nos scripts fornecidos, pois eles podem ser atualizados de tempos em tempos E eu queria garantir que a inicialização e o desligamento seguros ainda entrariam em vigor.

Upstart ganhou. - Desativar scripts XEN SystemV no Boot primeiro usando o seguinte

sudo update-rc.d xen disable
sudo update-rc.d xendomains disable

edite o /etc/init/libvirt-bin.conf e corrija o pré-início com exec /etc/init.d/xen start Ele só inicia uma vez na inicialização, e qualquer reinicialização anterior do serviço apenas marcará uma resposta "Serviço já em execução".

Exemplo abaixo

description "libvirt daemon"
author "Dustin Kirkland <[email protected]>"

start on runlevel [2345]
stop on starting rc RUNLEVEL=[016]

expect daemon
respawn

# daemonize
env libvirtd_opts="-d"
# whether libvirtd should run at boot/shutdown
env start_libvirtd="yes"
# by default wait 30 seconds for vms to shut down
env libvirtd_shutdown_timeout=30
# uris for which to shut down vms
env libvirt_uris='qemu:///system lxc:///'

pre-start script
 [ -r /etc/default/libvirt-bin ] && . /etc/default/libvirt-bin
 [ ! "x$start_libvirtd" = "xyes" ] && { stop; exit 0; }
 mkdir -p /var/run/libvirt
 # Clean up a pidfile that might be left around
 rm -f /var/run/libvirtd.pid
 # -----------------------------------
 exec /etc/init.d/xen start
 # -----------------------------------
end script

pre-stop script
 [ -r /etc/default/libvirt-bin ] && . /etc/default/libvirt-bin

 log_msg()
 {
  logf="/var/log/libvirt/shutdownlog.log"
  logger -p daemon.debug -s -t libvirt -- "$@" >> $logf 2>&1
 }

 run_virsh()
 {
  # We parse the output for things like domain state;
  # make sure the output is in the language we expect.
  LANG=C virsh "$@"
 }

 if [ -z "$RUNLEVEL" ]; then
  exit 0
 fi

 if [ "$RUNLEVEL" -ne 0 ] && [ "$RUNLEVEL" -ne 1 ] && [ "$RUNLEVEL" -ne 6 ]; then
  exit 0
 fi
 log_msg "libvirt-bin: entering pre-stop at $(date)"

 for uri in $libvirt_uris; do
  for domain in $(run_virsh -c "$uri" list | awk '$3 == "running" {print $2}'); do
   log_msg "libvirt-bin: attempting clean shutdown of $domain at $(date)"
   run_virsh -c "$uri" shutdown "$domain" >/dev/null
  done
 done

 delay=$libvirtd_shutdown_timeout
 while [ $delay -gt 0 ]; do
  for uri in $libvirt_uris; do
   if ! run_virsh -c "$uri" list | awk '$3 == "running" {exit 1}'; then
    # VMs at this URI are still running. Wait, then
    # start at the beginning looking for running VMs.
    sleep 1
    delay=$(($delay - 1))
    continue 2
   fi
  done
  break
 done

 for uri in $libvirt_uris; do
  for domain in $(run_virsh -c "$uri" list | awk '$3 == "running" {print $2}'); do
   log_msg "destroying $domain"
   run_virsh -c "$uri" destroy "$domain" >/dev/null
  done
 done
 log_msg "libvirt-bin: exiting pre-stop at $(date)"
end script

# /etc/default/libvirt-bin will be deprecated soon.
# If you used to set $libvirtd_opts in /etc/default/libvirt-bin,
# change the 'exec' line here instead.
script
 [ -r /etc/default/libvirt-bin ] && . /etc/default/libvirt-bin
     exec /usr/sbin/libvirtd $libvirtd_opts
end script

É isso. Reinicie seu servidor e você deve estar executando.

Espero que isso ajude ou, pelo menos, coloque você na direção certa.

    
por 24.11.2015 / 00:15