On 03/24/2014 03:19 PM, Eric Blake wrote:
Note that the testsuite knows how to run uninstalled libvirt_iohelper
when testing fdstream.c directly, but also note that virfile.c uses
libvirt_iohelper but never uses its overridden location - our existing
override is only half-baked. And even though we have the override hook
for iohelper, daemon/libvirt.c main() is not taking advantage of the
hook - which means if you build libvirt.git on a system where libvirt is
not installed, and try to use ./run to test your just-built binary, it
will fail anywhere it tries to use libvirt_iohelper (because it will be
trying to use the installed location, instead of the just-built in-tree
location). So I'm definitely in favor of this patch, but think it needs
more patches in the series before it is ready to push.
I tried to actually reproduce this scenario in a VM (by attempting to
play with 'virsh pool' commands for creating a use of
libvirt_parthelper), but was foiled by hitting an even earlier failure.
In window 1 as root:
# yum uninstall -y libvirt\*
...
# ./run daemon/libvirtd
In window 2 as normal user:
$ ./run tools/virsh -c qemu:///system pool-list --all
error: failed to connect to the hypervisor
error: authentication failed: polkit: Error checking for authorization
org.libvirt.unix.manage:
GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action
org.libvirt.unix.manage is not registered
Logs in window 1:
2014-03-24 22:46:59.321+0000: 7615: info : libvirt version: 1.2.3
2014-03-24 22:46:59.321+0000: 7615: error : virCommandWait:2426 :
internal error: Child process (/usr/bin/firewall-cmd --direct
--passthrough ipv4 --table filter --delete OUTPUT --out-interface virbr0
--protocol udp --destination-port 68 --jump ACCEPT) unexpected exit
status 13
2014-03-24 22:47:06.341+0000: 7615: error : x86Decode:1573 : internal
error: Cannot find suitable CPU model for given data
2014-03-24 22:47:06.341+0000: 7615: warning : virQEMUCapsInit:918 :
Failed to get host CPU
2014-03-24 22:47:29.861+0000: 7599: warning :
remoteDispatchAuthPolkit:3210 : No support for caller UID with pkcheck.
This deployment is known to be insecure.
2014-03-24 22:47:30.204+0000: 7599: error :
remoteDispatchAuthPolkit:3229 : Policy kit denied action
org.libvirt.unix.manage from pid 7730, uid 1000 with status 127
2014-03-24 22:47:30.204+0000: 7599: error :
remoteDispatchAuthPolkit:3257 : authentication failed: polkit: Error
checking for authorization org.libvirt.unix.manage:
GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Action
org.libvirt.unix.manage is not registered
2014-03-24 22:47:30.205+0000: 7566: error : virNetSocketReadWire:1456 :
End of file while reading data: Input/output error
And sure enough, installing libvirt-daemon-qemu then retrying the test
let things succeed, so we definitely have an up-front failure situation
where we are relying on installed files instead of ./run just working
from an uninstalled tree (it's just that most developers, including
myself, already have libvirtd installed, and normally don't run into
situations where a mismatch between the older libexec helper utilities
and the current libvirt development tree make a difference).
I might eventually spend some debug time trying to figure out why we
fail and how to work around it when running uninstalled (it may just be
a matter of missing .conf files in /etc causing different default
behavior), but it's not my current highest priority.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org