summaryrefslogtreecommitdiffstats
path: root/src/launch-libvirt.c
Commit message (Collapse)AuthorAgeFilesLines
* launch: appliance is optionalOlaf Hering2012-10-091-8/+14
| | | | | | | | | | | | | | | | | # virt-filesystems -v -d 6326ad4e-5805-2ab4-1338-d1dad8c76162 --all libguestfs: libvirt version = 10002 libguestfs: [00000ms] connect to libvirt libguestfs: [00001ms] get libvirt capabilities libguestfs: [00234ms] build appliance libguestfs: [00234ms] create libvirt XML libguestfs: error: error constructing libvirt XML at "xmlTextWriterWriteAttribute (xo, BAD_CAST "file", BAD_CAST appliance)": No such file or directory libguestfs: closing guestfs handle 0x656270 (state 0) # ls -lh /usr/lib64/guestfs/* -rw-r--r-- 1 root root 13M Oct 8 16:15 /usr/lib64/guestfs/initramfs.x86_64.img -rw-r--r-- 1 root root 3.7M Oct 6 09:25 /usr/lib64/guestfs/vmlinuz.x86_64 Signed-off-by: Olaf Hering <olaf@aepfle.de>
* Add support for hotplugging (removing disks).Richard W.M. Jones2012-10-091-0/+35
| | | | | | | | New API: remove-drive. Note because of a bug in fuser, this only works with psmisc >= 22.20. This also updates the hotplugging tests.
* Add support for hotplugging (adding disks) to the libvirt attach-method.Richard W.M. Jones2012-10-081-9/+90
| | | | | | | | | | | | | When libvirt is used, we can allow disks to be hotplugged. guestfs_add_drive can be called after launch to hot-add a disk. When a disk is hot-added, we first ask libvirt to add the disk to the appliance, then we make an internal call into the appliance to get it to wait for the disk to appear (ie. udev_settle ()). Hot-added disks are tracked in the g->drives array. This also adds a test.
* launch: Add add_drive 'label' option.Richard W.M. Jones2012-10-081-0/+6
| | | | | | | | | | | | | | | | | | | | | New API: list-disk-labels Allow the user to pass an optional disk label when adding a drive. This is passed through to qemu / libvirt using the disk serial field, and from there to the appliance which exposes it through udev, creating a special alias of the device /dev/disk/guestfs/<label>. Partitions are named /dev/disk/guestfs/<label><partnum>. virtio-blk and virtio-scsi limit the serial field to 20 bytes. We further limit the name to maximum 20 ASCII characters in [a-zA-Z]. list-devices and list-partitions are not changed: these calls still return raw block device names. However a new call, list-disk-labels, returns a hash table allowing callers to map between disk labels, and block device and partition names. This commit also includes a test.
* launch: libvirt: Create qcow2 overlays for read-only drives and the appliance.Richard W.M. Jones2012-10-081-79/+219
| | | | | | | | | | | | | Instead of adding the snapshot=on option via <qemu:arg>, create qcow2 overlays for any read-only drives and the appliance using 'qemu-img create' + a temporary file. This is a workaround for missing support for <transient/> in libvirt's qemu driver. Also for the unpredictable way that libvirtd handles $TMPDIR: we want to control where the temporary disk is created. Currently it is also much slower, because qemu-img is slow. However we hope to fix qemu upstream.
* launch: Make g->drives into an array (was a linked list).Richard W.M. Jones2012-10-081-21/+12
| | | | Using an array simplifies the implementation of hotplugging.
* launch: libvirt: The drive 'iface' parameter is not yet supported.Richard W.M. Jones2012-10-031-0/+6
| | | | | We could add support, but at the moment return an error if the user tries to use the iface parameter.
* libvirt >= 0.10.2 required for libvirt backend.Richard W.M. Jones2012-09-241-1/+1
|
* launch: Handle guestfs_config qemu_value == NULL.Richard W.M. Jones2012-09-211-5/+7
| | | | | | | | | | | | | The second parameter to 'config' may be NULL. In commit 52fa23d74f6308daf804c2330b0b27e0b4412594 (refactoring of guestfs_config) the code this got lost, and guestfs_config would segfault if qemu_value was NULL. Also this fixes the libvirt method to handle the same case. I checked libguestfs-1.18 and -1.16 branches, and this problem does NOT affect them.
* launch: Make the "launched failed" message more explanatory.Richard W.M. Jones2012-09-201-2/+2
| | | | | | | Since this is the most common error seen by people who have installation problems, buggy qemu, etc, and since no one reads the FAQ, describe in this error message what resources are available to debug launch problems.
* launch: libvirt: Pass TMPDIR to qemu subprocess.Richard W.M. Jones2012-09-171-0/+14
|
* launch: libvirt: Disable sVirt if using a custom qemu (ie. setting <emulator>).Richard W.M. Jones2012-09-171-4/+34
| | | | | | See: https://bugzilla.redhat.com/show_bug.cgi?id=857659 especially Dan's comment 4.
* Fix multiple errors where jump skips variable initialization.Richard W.M. Jones2012-09-171-2/+2
| | | | | | | <file>: error: jump skips variable initialization [-Werror=jump-misses-init] This has only just appeared, possibly related to previous gnulib update. In any case, this is just code motion / cleanup.
* syntax: Remove include <assert.h> where assert is not used.Richard W.M. Jones2012-09-151-1/+0
| | | | Found by 'make syntax-check'.
* launch: libvirt: Enable sVirt.Richard W.M. Jones2012-09-141-21/+0
|
* launch: libvirt: Mark appliance disk as <shareable/> (thanks Dan Berrange).Richard W.M. Jones2012-09-141-0/+3
| | | | | | | | | | | This is a fix for multiprogramming: If two instances of libguestfs share the same appliance disk, then libvirt would unlabel the disk when one of the instances closes the handle, resulting in the other qemu being unable to continue accessing the appliance. Adding the flag makes libvirt understand that the disk is shared so it doesn't do this, and it apparently handles locking correctly too if we were using sanlock.
* shutdown: Add 'check_for_errors' hint along the shutdown path.Richard W.M. Jones2012-09-041-3/+5
| | | | | | | | This hint tells the backend whether anyone cares about errors when the appliance is shut down. Currently this only has any effect on the libvirt backend, where it controls whether or not we use the VIR_DOMAIN_DESTROY_GRACEFUL flag.
* launch: libvirt: Add VIR_DOMAIN_DESTROY_GRACEFUL flag.Richard W.M. Jones2012-09-041-2/+1
| | | | | | We want libvirt to report failures when destroying the guest. See: https://bugzilla.redhat.com/show_bug.cgi?id=853369#c12
* launch: libvirt: Direct mode flag is not (yet) supported, so give an error ↵Richard W.M. Jones2012-09-041-0/+6
| | | | | | in this case. We definitely intend to support this in future.
* launch: libvirt: Use guestfs_disk_format API to autodetect input format.Richard W.M. Jones2012-09-031-85/+19
|
* launch: libvirt: Remove code for creating sockdir.Richard W.M. Jones2012-08-301-107/+8
| | | | | | Create the sockets in g->tmpdir as usual. It's a bug in libvirt that it doesn't label the sockets correctly no matter where they are located.
* launch: libvirt: Avoid memory leak if sockdir is not created (found by ↵Richard W.M. Jones2012-08-301-0/+2
| | | | valgrind).
* launch: libvirt: Don't crash if shutdown_libvirt is called early in launch.Richard W.M. Jones2012-08-281-8/+13
| | | | | | | | | | | The assert (conn != NULL) was being triggered with this stack trace: at launch-libvirt.c:1305 fd=<optimized out>, error_if_eof=error_if_eof@entry=0) at proto.c:222 size_rtn=size_rtn@entry=0x7fffffffdb34, buf_rtn=buf_rtn@entry=0x7fffffffdb58) at proto.c:548 libvirt_uri=<optimized out>) at launch-libvirt.c:391
* launch: libvirt: Always create /var/run/libguestfs.Richard W.M. Jones2012-08-211-2/+4
| | | | | This directory won't necessarily exist (esp. if /var/run is really /run). So create it each time.
* launch: libvirt: Minimum libvirt version is now 0.10.0.Richard W.M. Jones2012-08-211-9/+26
|
* launch: libvirt: Suppress printing of libvirt errors to stderr and other ↵Richard W.M. Jones2012-07-241-4/+19
| | | | cleanups.
* launch: libvirt: Use SELinux-mandated directory for sockets (RHBZ#842307).Richard W.M. Jones2012-07-241-31/+147
| | | | | | Note this does not yet enable sVirt confinement of the appliance. That requires at least that SELinux policy goes upstream, plus there may still be bugs.
* launch: libvirt: Move free to end of function.Richard W.M. Jones2012-07-241-11/+6
| | | | This is just code motion.
* launch: libvirt: Add is_blk utility.Richard W.M. Jones2012-07-241-6/+12
| | | | This is just code motion.
* launch: libvirt: Set <emulator> in libvirt XML if g->qemu is not the default.Richard W.M. Jones2012-07-241-0/+9
|
* launch: Make get-pid and max-disks APIs into virtual methods of the current ↵Richard W.M. Jones2012-07-231-0/+14
| | | | attach-method.
* launch: libvirt: Use <driver name="qemu" type=[format] />.Richard W.M. Jones2012-07-231-3/+99
| | | | | | | | We were using format= which was bogus and libvirt was ignoring it and forcing raw format instead. Also in its default configuration libvirt won't do disk format autodetection at all, so we must do it instead.
* launch: libvirt: You can't set O_CLOEXEC flag using fcntl + F_SETFL.Richard W.M. Jones2012-07-231-1/+1
| | | | | | | And in any case there is no point, since proto.c already sets the SOCK_CLOEXEC flag (using accept4) on this socket. The code now matches the code in launch-appliance.c.
* launch: libvirt: Use accept4 to set socket flags correctly.Richard W.M. Jones2012-07-231-5/+1
|
* launch: libvirt: Add <on_reboot>destroy</on_reboot> to libvirt XML.Richard W.M. Jones2012-07-231-0/+17
| | | | | This causes libvirt to add the qemu -no-reboot option, which reflects existing behaviour.
* launch: libvirt: Move remaining to-do items to TODO file.Richard W.M. Jones2012-07-231-18/+0
|
* launch: libvirt: Add a hack to detect if KVM is available.Richard W.M. Jones2012-07-231-1/+5
| | | | | | | | We need to select the <domain type=...> attribute depending on whether KVM is detected in the libvirt capabilities. This is a hack because it doesn't try to parse the libvirt capabilities XML.
* launch: libvirt: Use <cpu model="host-model"/> (thanks Dan Berrange).Richard W.M. Jones2012-07-231-0/+6
| | | | | This ensures maximum performance of the appliance, particularly for things like MD where the guest needs to use optimal SSE instructions.
* launch: libvirt: Change disk XML according to whether host path is device or ↵Richard W.M. Jones2012-07-231-10/+39
| | | | file (thanks Dan Berrange).
* launch: libvirt: Use "guestfs-" prefix on random names (thanks Dan Berrange).Richard W.M. Jones2012-07-231-1/+1
|
* launch: libvirt: Enforce minimum version of libvirt 0.9.13.Richard W.M. Jones2012-07-231-0/+13
|
* launch: libvirt: Use snapshot=on instead of <readonly/>.Richard W.M. Jones2012-07-231-9/+33
| | | | | | | For compatibility with the appliance backend, devices added readonly are in fact added writable with snapshots on top. This is necessary because options like 'mount -o ro' usually require write access to the disk (eg. to replay journals).
* launch: Add libvirt backend.Richard W.M. Jones2012-07-221-0/+1052
Complete the attach-method libvirt backend. This backend uses libvirt to create a transient KVM domain to run the appliance. Note that this still will only work with local libvirt URIs since the <kernel>, <initrd> and appliance links in the libvirt XML refer to local files, and virtio serial only works locally (limitation of libvirt). Remote support will be added later.