Назад | Перейти на главную страницу

Libvirt с Xen не запускается правильно Ubuntu 14.04

На данный момент я действительно чувствую себя немного беспомощным:

Я попытался настроить Ubuntu 14.04 с Xen и libvirt для управления. Я создал виртуальную машину, но не запустил ее автоматически (хотя автозапуск отмечен). Если я сделаю «остановить libvirt-bin» и «запустить libvirt-bin», виртуальная машина запустится отлично.

Что мне кажется немного странным, так это то, что libvirt-bin запускается ДО демона Xen.

Boot.log:

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

в качестве обходного пути я добавил команду start / stop в rc.local

Есть идеи по этому поводу? Правильный ли стартовый порядок?

Вот мое решение. Вы правы, говоря, что xen необходимо запустить до libvirt-bin. Для меня проблема в том, что xen использует systemV, а libvirt-bin - выскочку. После долгих споров я решил, что мне нужно выбрать одно или другое.

Я хотел убедиться, что я не касался фактических предоставленных сценариев, поскольку они могут время от времени обновляться, И я хотел, чтобы безопасный запуск и завершение работы по-прежнему вступали в силу.

Выскочка Вон. - Сначала отключите сценарии XEN SystemV при загрузке, используя следующие

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

затем редактировать /etc/init/libvirt-bin.conf и измените предварительный запуск с помощью exec /etc/init.d/xen start. Он запускается только ОДИН РАЗ при запуске, и любые предыдущие перезапуски службы будут просто отмечать ответ «Служба уже запущена».

Пример ниже

description "libvirt daemon"
author "Dustin Kirkland <kirkland@canonical.com>"

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

Это оно. Перезагрузите сервер, и вы должны работать.

Надеюсь, что это поможет или, по крайней мере, направит вас в правильном направлении.