mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
meson: add qemu driver build options
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Neal Gompa <ngompa13@gmail.com>
This commit is contained in:
parent
05f0e04ff2
commit
e35b9567d2
@ -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
|
||||
@ -309,7 +306,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
|
||||
@ -363,7 +359,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([])
|
||||
|
@ -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
|
||||
])
|
127
meson.build
127
meson.build
@ -1707,6 +1707,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
|
||||
|
||||
@ -1727,6 +1842,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'),
|
||||
@ -1801,3 +1917,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
|
||||
|
@ -55,5 +55,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')
|
||||
|
Loading…
Reference in New Issue
Block a user