Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
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