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.