** Description changed:
[Impact]
* libvirt-bin, in: libvirt-1.3.1-1ubuntu10.24~cloud0 in trusty mitaka uca
- and the parent package in xenial, libvirt-1.3.1-1ubuntu10.24 are effected.
+ and the parent package in xenial, libvirt-1.3.1-1ubuntu10.24 are
+ affected.
* When you shutdown a system in trusty which is running some kvm virtual
machines, the libvirt-bin service is stopped before libvirt-guests.
libvirt-guests tries to connect to the libvirt socket to send shutdown
commands to the running vms, which cannot happen since libvirtd is not
running.
- * On some machines, the qemu processes behind the virtual machines are not
- killed and are left behind as defunct processes, which can cause the
- system to hang on them not being terminated.
+ * On some machines, the qemu processes behind the virtual machines are
+ not killed and are left behind as defunct processes, which can cause
+ the system to hang on them not being terminated.
* The bug is caused by the libvirt-bin upstart script [1] calling a
- non-existant script, /usr/lib/libvirt/libvirt-stop-guests [2]. This script
- used to exist in the upstart script itself in version 1.2.2-0ubuntu13.1.27
- [3], the version in the trusty archives. In liberty UCA,
- version 1.2.16-2ubuntu11.15.10.4~cloud0 [4], the script was seperated out
- into /usr/lib/libvirt/libvirt-stop-guests [2]. In the mitaka release, the
- libvirt-stop-guests script was removed and rewritten as
- /etc/init.d/libvirt-guests [5], but the script in [1] was never updated to
- point to it.
+ non-existant script, /usr/lib/libvirt/libvirt-stop-guests [2]. This
+ script used to exist in the upstart script itself in version
+ 1.2.2-0ubuntu13.1.27 [3], the version in the trusty archives. In
+ liberty UCA, version 1.2.16-2ubuntu11.15.10.4~cloud0 [4], the script
+ was separated out into /usr/lib/libvirt/libvirt-stop-guests [2].
+ In the mitaka release, the libvirt-stop-guests script was removed and
+ rewritten as /etc/init.d/libvirt-guests [5], but the script in [1] was
+ never updated to point to it.
[1] http://paste.ubuntu.com/p/GxxBczkCmk
[2] http://paste.ubuntu.com/p/fKCDQh46vh
[3] http://paste.ubuntu.com/p/QrKXqK2Bvz
[4] http://paste.ubuntu.com/p/W8DgQwpYv3
[5] http://paste.ubuntu.com/p/Z28Sp2fPd6
* Since the upstart script was never updated to point to it, libvirt-bin
stops without stopping libvirt-guests first. When libvirt-guests is
- stopped later, it cannot access the libvirt socket, cannot shut down the
- machines, causing the bug.
+ stopped later, it cannot access the libvirt socket, cannot shut down
+ the machines, causing the bug.
- * The fix is to change the upstart script to point to the new libvirt-guests
- script.
+ * The fix is to change the upstart script to point to the new libvirt-
+ guests script.
[Test Case]
- * You can reproduce this in trusty with the mitaka UCA enabled.
+ * You can reproduce this in trusty with the mitaka UCA enabled.
- 1) Enable mitaka UCA and install libvirt0 and libvirt-bin
+ 1) Enable mitaka UCA and install libvirt0 and libvirt-bin
- $ sudo add-apt-repository cloud-archive:mitaka
- $ sudo apt update
- $ sudo apt install libvirt0 libvirt-bin
+ $ sudo add-apt-repository cloud-archive:mitaka
+ $ sudo apt update
+ $ sudo apt install libvirt0 libvirt-bin
- 2) Install a virtual machine, either by using virt-install or virt-manager.
- I used a bionic VM.
+ 2) Install a virtual machine, either by using virt-install or
+ virt-manager.
+ I used a bionic VM.
- 3) Enable debugging on libvirt-guests so you can see what is going on
+ 3) Enable debugging on libvirt-guests so you can see what is going on
- Modify /etc/init.d/libvirt-guests and add "-x" to the end of "!/bin/sh"
+ Modify /etc/init.d/libvirt-guests and add "-x" to the end of "!/bin/sh"
- 4) With the vm running, shut down the system
+ 4) With the vm running, shut down the system
- $ sudo shutdown -h now
+ $ sudo shutdown -h now
- 5) Check /var/log/upstart/libvirt-bin.log, on reboot. It will say
- "No such file or directory: /usr/lib/libvirt/libvirt-stop-guests"
+ 5) Check /var/log/upstart/libvirt-bin.log, on reboot. It will say
+ "No such file or directory: /usr/lib/libvirt/libvirt-stop-guests"
- 6) During that shutdown, you will see messages like:
- error: failed to connect to the hypervisor
- error: no valid connection
- error: Failed to connect socket to '/var/run/libvirt/libvirt-sock':
- No such file or directory
+ 6) During that shutdown, you will see messages like:
+ error: failed to connect to the hypervisor
+ error: no valid connection
+ error: Failed to connect socket to '/var/run/libvirt/libvirt-sock':
+ No such file or directory
- What should happen:
+ What should happen:
- If you follow the same steps with the fixed package, when you look at
- /var/log/upstart/libvirt-bin.log, you will see output of libvirt-guests
- connecting to and shutting down the virtual machines which looks a little
- like this: https://paste.ubuntu.com/p/s4jyJX2y9F/
+ If you follow the same steps with the fixed package, when you look at
+ /var/log/upstart/libvirt-bin.log, you will see output of libvirt-guests
+ connecting to and shutting down the virtual machines which looks a little
+ like this: https://paste.ubuntu.com/p/s4jyJX2y9F/
[Regression Potential]
* There is only one file modified, the upstart script for libvirt-bin.
Currently this upstart file references a file which doesn't exist, so
- fixing it will restore the behaviour in a way which aligns with exactly
+ fixing it will restore the behavior in a way which aligns with exactly
what took place in previous versions.
- * In xenial, there is no concern of stopping an already stopped service in
- the event that the upstart script pre-stop section is called by systemd.
+ * In xenial, all of this isn't used at all - see below at "Other Info"
* This change only effects systems during shutdown while they still
have virtual machines running, and do not effect starting and stopping
services while the machine is running normally.
* I believe the regression potential is low.
[Other Info]
* Xenial is not effected by this bug even though it ships the exact same
packages. This is because xenial uses insserv to generate service
- dependency files ".depend.boot" ".depend.start" ".depend.stop" which parse
- the scripts in /etc/init.d/ and systemd respects the dependency ordering
- in these files.
- libvirt-guests reports a dependency on libvirt-bin in the script header,
- so systemd will always stop libvirt-guests before libvirt-bin, avoiding
- the problem seen in trusty.
+ dependency files ".depend.boot" ".depend.start" ".depend.stop" which
+ parse the scripts in /etc/init.d/ and systemd respects the dependency
+ ordering in these files.
+ libvirt-guests reports a dependency on libvirt-bin in the script
+ header, so systemd will always stop libvirt-guests before libvirt-bin,
+ avoiding the problem seen in trusty.
- * The fix is needed in trusty mitaka UCA and xenial will likely need the SRU
- as part of the process.
+ * The fix is needed in trusty mitaka UCA and xenial will likely need the
+ SRU as part of the process.
+
+ * We'd never have uploaded that change alone for xenial (being a no-op
+ causing MBs to download and an upgrade. But we will bundle it with an
+ actual change - so it can "ride along" to eventually help
+ Trusty-Mitaka.
** Changed in: libvirt (Ubuntu Xenial)
Status: Fix Released => Triaged
** Changed in: libvirt (Ubuntu Xenial)
Assignee: (unassigned) => Christian Ehrhardt (paelzer)
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1829823
Title:
libvirt-bin: during shutdown libvirt-bin is stopped before libvirt-
guests causing hang
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-archive/+bug/1829823/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs