Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.
Go to file
Daniel P. Berrangé 26cfb1a3cd qemu: ensure default machine types don't change if QEMU changes
It is increasingly likely that some distro is going to change the
default "x86" machine type in QEMU from "pc" to "q35". This will
certainly break existing applications which write their XML on the
assumption that it is using a "pc" machine by default. For example they'll
lack a IDE CDROM and get PCIe instead of PCI which changes the topology
radically.

Libvirt promises to isolate applications from hypervisor changes that
may cause incompatibilities, so we must ensure that we always use the
"pc" machine type if it is available. Only use QEMU's own reported
default machine type if "pc" does not exist.

This issue is not x86-only, other arches are liable to change their
default machine, while some arches don't report any default at all
causing libvirt to pick the first machine in the list. Thus to
guarantee stability to applications, declare a preferred default
machine for all architectures we currently support with QEMU.

Note this change assumes there will always be a "pc" alias as long as a
versioned "pc-XXX" machine type exists. If QEMU were to ship a "pc-XXX"
machine type but not provide the "pc" alias, it is too hard to decide
which to default so. Versioned machine types are supposed to be
considered opaque strings, so we can't apply any sensible ordering
ourselves and QEMU isn't reporting the list of machines in any sensible
ordering itself.

Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-08-07 15:44:09 +01:00
.gnulib@68df637b5f build: Fix accidental revert of .gnulib update 2018-07-19 16:15:51 -04:00
build-aux po: minimize & canonicalize translations stored in git 2018-04-19 11:11:08 +01:00
docs news: Update for vhost-vsock-ccw support 2018-08-07 15:02:59 +02:00
examples Forget last daemon/ dir artefacts 2018-07-27 15:44:38 +02:00
gnulib Update to latest gnulib 2018-03-12 11:27:54 +00:00
include/libvirt qemu: Add entry for balloon stat stat-disk-caches 2018-07-16 17:42:23 -04:00
m4 storage: Implement iscsi_direct pool backend 2018-08-06 12:23:55 +02:00
po po: refresh translations from zanata 2018-07-31 12:34:06 +01:00
src qemu: ensure default machine types don't change if QEMU changes 2018-08-07 15:44:09 +01:00
tests qemu: Add ccw support for vhost-vsock 2018-08-07 15:02:59 +02:00
tools storage: Introduce iscsi_direct pool type 2018-08-06 12:23:55 +02:00
.color_coded.in Add color_coded support 2017-05-09 09:51:11 +02:00
.ctags maint: Make ctags work out of the box 2013-07-18 08:47:21 +02:00
.dir-locals.el build: avoid tabs that failed syntax-check 2012-09-06 09:43:46 -06:00
.gitignore po: minimize & canonicalize translations stored in git 2018-04-19 11:11:08 +01:00
.gitmodules gnulib: switch to use https:// instead of git:// protocol 2018-03-19 16:32:34 +00:00
.gitpublish git: add config file telling git-publish how to send patches 2018-04-23 11:36:09 +01:00
.mailmap AUTHORS: Add Katerina Koukiou 2018-07-17 17:01:19 +02:00
.travis.yml travis: Add MinGW builds 2018-06-15 17:45:27 +02:00
.ycm_extra_conf.py.in Add YouCompleteMe support 2017-05-09 09:51:11 +02:00
ABOUT-NLS po: provide custom make rules for po file management 2018-04-19 10:35:58 +01:00
AUTHORS.in AUTHORS: Add Katerina Koukiou 2018-07-17 17:01:19 +02:00
autogen.sh po: provide custom make rules for po file management 2018-04-19 10:35:58 +01:00
bootstrap maint: update to latest gnulib 2018-07-14 09:10:03 +02:00
bootstrap.conf virrandom: Make virRandomBits better 2018-06-05 10:31:19 +02:00
cfg.mk cfg.mk: variable initialization when declared with cleanup macro 2018-07-14 17:01:30 +02:00
ChangeLog-old Fix typos in src/* 2014-04-21 16:49:08 -06:00
config-post.h build: remove references to WITH_YAJL for SETUID_RPC_CLIENT 2018-07-18 17:54:18 +02:00
configure.ac storage: Introduce iscsi_direct pool type 2018-08-06 12:23:55 +02:00
COPYING maint: follow recommended practice for using LGPL 2013-05-20 14:15:21 -06:00
COPYING.LESSER maint: Remove control characters from LGPL license file 2015-09-25 09:16:24 +02:00
libvirt-admin.pc.in Add libvirt-admin library 2015-06-16 13:46:20 +02:00
libvirt-lxc.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt-qemu.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt.pc.in Add pkg-config files for libvirt-qemu & libvirt-lxc 2014-06-23 16:17:27 +01:00
libvirt.spec.in util: avoid symbol clash between json libraries 2018-07-31 18:04:53 +01:00
Makefile.am Forget last daemon/ dir artefacts 2018-07-27 15:44:38 +02:00
Makefile.nonreentrant Remove backslash alignment attempts 2017-11-03 13:24:12 +01:00
mingw-libvirt.spec.in rpm: add new nwfilter RNGs to mingw-libvirt spec file 2018-07-03 16:32:42 +01:00
README Provide a useful README file 2017-05-22 17:01:37 +01:00
README-hacking docs: update all GIT repo examples to use https:// protocol 2018-03-21 14:48:01 +00:00
README.md Add CII best practices badge 2017-10-13 16:08:01 +01:00
run.in run: Fix LIBVIRTD_PATH 2018-07-24 12:10:21 -04:00

Build Status CII Best Practices

Libvirt API for virtualization

Libvirt provides a portable, long term stable C API for managing the virtualization technologies provided by many operating systems. It includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER Hypervisor.

For some of these hypervisors, it provides a stateful management daemon which runs on the virtualization host allowing access to the API both by non-privileged local users and remote users.

Layered packages provide bindings of the libvirt C API into other languages including Python, Perl, PHP, Go, Java, OCaml, as well as mappings into object systems such as GObject, CIM and SNMP.

Further information about the libvirt project can be found on the website:

https://libvirt.org

License

The libvirt C API is distributed under the terms of GNU Lesser General Public License, version 2.1 (or later). Some parts of the code that are not part of the C library may have the more restrictive GNU General Public License, version 2.1 (or later). See the files COPYING.LESSER and COPYING for full license terms & conditions.

Installation

Libvirt uses the GNU Autotools build system, so in general can be built and installed with the usual commands. For example, to build in a manner that is suitable for installing as root, use:

$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ sudo make install

While to build & install as an unprivileged user

$ ./configure --prefix=$HOME/usr
$ make
$ make install

The libvirt code relies on a large number of 3rd party libraries. These will be detected during execution of the configure script and a summary printed which lists any missing (optional) dependencies.

Contributing

The libvirt project welcomes contributions in many ways. For most components the best way to contribute is to send patches to the primary development mailing list. Further guidance on this can be found on the website:

https://libvirt.org/contribute.html

Contact

The libvirt project has two primary mailing lists:

Further details on contacting the project are available on the website:

https://libvirt.org/contact.html