Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> --- configure.ac | 8 --- m4/virt-driver-qemu.m4 | 132 ----------------------------------------- meson.build | 127 +++++++++++++++++++++++++++++++++++++++ meson_options.txt | 3 + 4 files changed, 130 insertions(+), 140 deletions(-) delete mode 100644 m4/virt-driver-qemu.m4 diff --git a/configure.ac b/configure.ac index 30b84856d38..d0189c8701a 100644 --- a/configure.ac +++ b/configure.ac @@ -85,7 +85,6 @@ AM_CONDITIONAL([WITH_MACOS], [test "$with_macos" = "yes"]) # Stateful drivers are useful only when building the daemon. if test "$with_libvirtd" = "no" ; then - with_qemu=no with_vbox=no fi @@ -103,7 +102,6 @@ dnl dnl Virtualization drivers check dnl -LIBVIRT_DRIVER_ARG_QEMU LIBVIRT_DRIVER_ARG_VMWARE LIBVIRT_DRIVER_ARG_VBOX LIBVIRT_DRIVER_ARG_VZ @@ -111,7 +109,6 @@ LIBVIRT_DRIVER_ARG_TEST LIBVIRT_DRIVER_ARG_NETWORK LIBVIRT_DRIVER_ARG_INTERFACE -LIBVIRT_DRIVER_CHECK_QEMU LIBVIRT_DRIVER_CHECK_VMWARE LIBVIRT_DRIVER_CHECK_VBOX LIBVIRT_DRIVER_CHECK_VZ @@ -311,7 +308,6 @@ AC_MSG_NOTICE([=====================]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([Drivers]) AC_MSG_NOTICE([]) -LIBVIRT_DRIVER_RESULT_QEMU LIBVIRT_DRIVER_RESULT_VMWARE LIBVIRT_DRIVER_RESULT_VBOX LIBVIRT_DRIVER_RESULT_VZ @@ -366,7 +362,3 @@ LIBVIRT_RESULT_LOGIN_SHELL LIBVIRT_RESULT_HOST_VALIDATE LIBVIRT_RESULT_TLS_PRIORITY AC_MSG_NOTICE([]) -AC_MSG_NOTICE([Privileges]) -AC_MSG_NOTICE([]) -LIBVIRT_RESULT_QEMU_PRIVILEGES -AC_MSG_NOTICE([]) diff --git a/m4/virt-driver-qemu.m4 b/m4/virt-driver-qemu.m4 deleted file mode 100644 index 886261fce5c..00000000000 --- a/m4/virt-driver-qemu.m4 +++ /dev/null @@ -1,132 +0,0 @@ -dnl The QEMU driver -dnl -dnl Copyright (C) 2016 Red Hat, Inc. -dnl -dnl This library is free software; you can redistribute it and/or -dnl modify it under the terms of the GNU Lesser General Public -dnl License as published by the Free Software Foundation; either -dnl version 2.1 of the License, or (at your option) any later version. -dnl -dnl This library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with this library. If not, see -dnl <http://www.gnu.org/licenses/>. -dnl - -AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [ - LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [check]) - LIBVIRT_ARG_WITH([QEMU_USER], [username to run QEMU system instance as], - ['platform dependent']) - LIBVIRT_ARG_WITH([QEMU_GROUP], [groupname to run QEMU system instance as], - ['platform dependent']) -]) - -AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [ - dnl There is no way qemu driver will work without JSON support - AC_REQUIRE([LIBVIRT_CHECK_YAJL]) - if test "$with_qemu:$with_yajl" = "yes:no"; then - AC_MSG_ERROR([YAJL 2 is required to build QEMU driver]) - fi - if test "$with_qemu" = "check"; then - with_qemu=$with_yajl - fi - - if test "$with_qemu" = "yes" ; then - AC_DEFINE_UNQUOTED([WITH_QEMU], 1, [whether QEMU driver is enabled]) - fi - AM_CONDITIONAL([WITH_QEMU], [test "$with_qemu" = "yes"]) - - if test $with_freebsd = yes || test $with_macos = yes; then - default_qemu_user=root - default_qemu_group=wheel - else - # Try to integrate gracefully with downstream packages by running QEMU - # processes using the same user and group they would - case $(grep ^ID= /etc/os-release 2>/dev/null) in - *arch*) - default_qemu_user=nobody - default_qemu_group=nobody - ;; - *centos*|*fedora*|*gentoo*|*rhel*|*suse*) - default_qemu_user=qemu - default_qemu_group=qemu - ;; - *debian*) - default_qemu_user=libvirt-qemu - default_qemu_group=libvirt-qemu - ;; - *ubuntu*) - default_qemu_user=libvirt-qemu - default_qemu_group=kvm - ;; - *) - default_qemu_user=root - default_qemu_group=root - ;; - esac - # If the expected user and group don't exist, or we haven't hit any - # of the cases above because we're running on an unknown OS, the only - # sensible fallback is root:root - AC_MSG_CHECKING([for QEMU credentials ($default_qemu_user:$default_qemu_group)]) - if getent passwd "$default_qemu_user" >/dev/null 2>&1 && \ - getent group "$default_qemu_group" >/dev/null 2>&1; then - AC_MSG_RESULT([ok]) - else - AC_MSG_RESULT([not found, using root:root instead]) - default_qemu_user=root - default_qemu_group=root - fi - fi - - if test "x$with_qemu_user" = "xplatform dependent" ; then - QEMU_USER="$default_qemu_user" - else - QEMU_USER="$with_qemu_user" - fi - if test "x$with_qemu_group" = "xplatform dependent" ; then - QEMU_GROUP="$default_qemu_group" - else - QEMU_GROUP="$with_qemu_group" - fi - AC_DEFINE_UNQUOTED([QEMU_USER], ["$QEMU_USER"], [QEMU user account]) - AC_DEFINE_UNQUOTED([QEMU_GROUP], ["$QEMU_GROUP"], [QEMU group account]) - - AC_PATH_PROG([QEMU_BRIDGE_HELPER], [qemu-bridge-helper], - [/usr/libexec/qemu-bridge-helper], - [/usr/libexec:/usr/lib/qemu:/usr/lib]) - AC_DEFINE_UNQUOTED([QEMU_BRIDGE_HELPER], ["$QEMU_BRIDGE_HELPER"], - [QEMU bridge helper]) - AC_PATH_PROG([QEMU_PR_HELPER], [qemu-pr-helper], - [/usr/bin/qemu-pr-helper], - [/usr/bin:/usr/libexec]) - AC_DEFINE_UNQUOTED([QEMU_PR_HELPER], ["$QEMU_PR_HELPER"], - [QEMU PR helper]) - AC_PATH_PROG([QEMU_SLIRP_HELPER], [slirp-helper], - [/usr/bin/slirp-helper], - [/usr/bin:/usr/libexec]) - AC_DEFINE_UNQUOTED([QEMU_SLIRP_HELPER], ["$QEMU_SLIRP_HELPER"], - [QEMU slirp helper]) - - AC_PATH_PROG([QEMU_DBUS_DAEMON], [dbus-daemon], - [/usr/bin/dbus-daemon], - [/usr/bin:/usr/libexec]) - AC_DEFINE_UNQUOTED([QEMU_DBUS_DAEMON], ["$QEMU_DBUS_DAEMON"], - [QEMU dbus daemon]) -]) - -AC_DEFUN([LIBVIRT_DRIVER_RESULT_QEMU], [ - LIBVIRT_RESULT([QEMU], [$with_qemu]) -]) - -AC_DEFUN([LIBVIRT_RESULT_QEMU_PRIVILEGES], [ - if test "$QEMU_USER" = "root"; then - LIBVIRT_RESULT([QEMU], [$QEMU_USER:$QEMU_GROUP], - [!!! running QEMU as root is strongly discouraged !!!]) - else - LIBVIRT_RESULT([QEMU], [$QEMU_USER:$QEMU_GROUP]) - fi -]) diff --git a/meson.build b/meson.build index cae9743f5b2..b7710bd0fcb 100644 --- a/meson.build +++ b/meson.build @@ -1689,6 +1689,121 @@ elif get_option('driver_openvz').enabled() error('OpenVZ driver can be enabled on Linux only') endif +if not get_option('driver_qemu').disabled() + use_qemu = true + + if not yajl_dep.found() + use_qemu = false + if get_option('driver_qemu').enabled() + error('YAJL 2 is required to build QEMU driver') + endif + endif + + if not conf.has('WITH_LIBVIRTD') + use_qemu = false + if get_option('driver_qemu').enabled() + error('libvirtd is required to build QEMU driver') + endif + endif + + if use_qemu + conf.set('WITH_QEMU', 1) + + if host_machine.system() in ['freebsd', 'darwin'] + default_qemu_user = 'root' + default_qemu_group = 'wheel' + else + os_release = run_command('grep', '^ID=', '/etc/os-release').stdout() + if os_release.contains('arch') + default_qemu_user = 'nobody' + default_qemu_group = 'nobody' + elif ( os_release.contains('centos') or + os_release.contains('fedora') or + os_release.contains('gentoo') or + os_release.contains('rhel') or + os_release.contains('suse')) + default_qemu_user = 'qemu' + default_qemu_group = 'qemu' + elif os_release.contains('debian') + default_qemu_user = 'libvirt-qemu' + default_qemu_group = 'libvirt-qemu' + elif os_release.contains('ubuntu') + default_qemu_user = 'libvirt-qemu' + default_qemu_group = 'kvm' + else + default_qemu_user = 'root' + default_qemu_group = 'root' + endif + # If the expected user and group don't exist, or we haven't hit any + # of the cases above bacuse we're running on an unknown OS, the only + # sensible fallback is root:root + if ( run_command('getent', 'passwd', default_qemu_user).returncode() != 0 and + run_command('getent', 'group', default_qemu_group).returncode() != 0 ) + default_qemu_user = 'root' + default_qemu_group = 'root' + endif + endif + qemu_user = get_option('qemu_user') + if qemu_user == '' + qemu_user = default_qemu_user + endif + qemu_group = get_option('qemu_group') + if qemu_group == '' + qemu_group = default_qemu_group + endif + conf.set_quoted('QEMU_USER', qemu_user) + conf.set_quoted('QEMU_GROUP', qemu_group) + + qemu_bridge_prog = find_program( + 'qemu-bridge-helper', + dirs: [ '/usr/libexec', '/usr/lib/qemu', '/usr/lib' ], + required: false + ) + if qemu_bridge_prog.found() + qemu_bridge_path = qemu_bridge_prog.path() + else + qemu_bridge_path = '/usr/libexec/qemu-bridge-helper' + endif + conf.set_quoted('QEMU_BRIDGE_HELPER', qemu_bridge_path) + + qemu_pr_prog = find_program( + 'qemu-pr-helper', + dirs: [ '/usr/bin', '/usr/libexec' ], + required: false + ) + if qemu_pr_prog.found() + qemu_pr_path = qemu_pr_prog.path() + else + qemu_pr_path = '/usr/bin/qemu-pr-helper' + endif + conf.set_quoted('QEMU_PR_HELPER', qemu_pr_path) + + qemu_slirp_prog = find_program( + 'slirp-helper', + dirs: [ '/usr/bin', '/usr/libexec' ], + required: false + ) + if qemu_slirp_prog.found() + qemu_slirp_path = qemu_slirp_prog.path() + else + qemu_slirp_path = '/usr/bin/slirp-helper' + endif + conf.set_quoted('QEMU_SLIRP_HELPER', qemu_slirp_path) + + qemu_dbus_daemon_prog = find_program( + 'dbus-daemon', + dirs: [ '/usr/bin', '/usr/libexec' ], + required: false + ) + if qemu_dbus_daemon_prog.found() + qemu_dbus_daemon_path = qemu_dbus_daemon_prog.path() + else + qemu_dbus_daemon_path = '/usr/bin/dbus-daemon' + endif + conf.set_quoted('QEMU_DBUS_DAEMON', qemu_dbus_daemon_path) + endif +endif + # define top include directory @@ -1709,6 +1824,7 @@ configure_file(output: 'meson-config.h', configuration: conf) # print configuration summary driver_summary = { + 'QEMU': conf.has('WITH_QEMU'), 'OpenVZ': conf.has('WITH_OPENVZ'), 'libxl': conf.has('WITH_LIBXL'), 'LXC': conf.has('WITH_LXC'), @@ -1783,3 +1899,14 @@ devtools_summary = { 'wireshark_dissector': wireshark_dep.found(), } summary(devtools_summary, section: 'Developer Tools', bool_yn: true) + +if conf.has('WITH_QEMU') + qemu_warn = '' + if qemu_user == 'root' + qemu_warn = ' !!! running QEMU as root is strongly discouraged !!!' + endif + priv_summary = { + 'QEMU': '@0@:@1@@2@'.format(qemu_user, qemu_group, qemu_warn), + } + summary(priv_summary, section: 'Privileges') +endif diff --git a/meson_options.txt b/meson_options.txt index dbe56561752..4f8cddd0aee 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -54,5 +54,8 @@ option('driver_libvirtd', type: 'feature', value: 'auto', description: 'libvirtd option('driver_libxl', type: 'feature', value: 'auto', description: 'libxenlight driver') option('driver_lxc', type: 'feature', value: 'auto', description: 'Linux Container driver') option('driver_openvz', type: 'feature', value: 'auto', description: 'OpenVZ driver') +option('driver_qemu', type: 'feature', value: 'auto', description: 'QEMU/KVM driver') +option('qemu_user', type: 'string', value: '', description: 'username to run QEMU system instance as') +option('qemu_group', type: 'string', value: '', description: 'groupname to run QEMU system instance as') option('driver_remote', type: 'feature', value: 'enabled', description: 'remote driver') option('remote_default_mode', type: 'combo', choices: ['legacy', 'direct'], value: 'legacy', description: 'remote driver default mode') -- 2.26.2