Qemu FreeBSD: fix compilation

* Autotools changes:
  - Don't assume Qemu is Linux-only
  - Check Linux headers only on Linux
  - Disable firewalld on FreeBSD
* Initctl:
  Initctl seem to present only on Linux, so stub it on other platforms
* Raw I/O: Linux-only as well
* Headers cleanup
This commit is contained in:
Roman Bogorodskiy 2012-12-12 11:44:21 +04:00 committed by Eric Blake
parent b467e9323c
commit 9a2f36ec04
3 changed files with 71 additions and 33 deletions

View File

@ -360,10 +360,11 @@ dnl are also linux specific. The "network" and storage_fs drivers are known
dnl to not work on MacOS X presently, so we also make a note if compiling
dnl for that
with_linux=no with_osx=no
with_linux=no with_osx=no with_freebsd=no
case $host in
*-*-linux*) with_linux=yes ;;
*-*-darwin*) with_osx=yes ;;
*-*-freebsd*) with_freebsd=yes ;;
esac
if test $with_linux = no; then
@ -371,14 +372,19 @@ if test $with_linux = no; then
then
with_lxc=no
fi
if test "x$with_qemu" != xyes
then
with_qemu=no
fi
with_dtrace=no
fi
if test $with_freebsd = yes; then
with_firewalld=no
fi
if test $with_osx = yes; then
with_qemu=no
fi
AM_CONDITIONAL([WITH_LINUX], [test "$with_linux" = "yes"])
AM_CONDITIONAL([WITH_FREEBSD], [test "$with_freebsd" = "yes"])
dnl Allow to build without Xen, QEMU/KVM, test or remote driver
AC_ARG_WITH([xen],
@ -949,9 +955,11 @@ fi
dnl
dnl check for kernel headers required by src/bridge.c
dnl
if test "$with_qemu" = "yes" || test "$with_lxc" = "yes" ; then
AC_CHECK_HEADERS([linux/param.h linux/sockios.h linux/if_bridge.h linux/if_tun.h],,
AC_MSG_ERROR([You must install kernel-headers in order to compile libvirt with QEMU or LXC support]))
if test "$with_linux" = "yes"; then
if test "$with_qemu" = "yes" || test "$with_lxc" = "yes" ; then
AC_CHECK_HEADERS([linux/param.h linux/sockios.h linux/if_bridge.h linux/if_tun.h],,
AC_MSG_ERROR([You must install kernel-headers in order to compile libvirt with QEMU or LXC support]))
fi
fi
@ -2880,14 +2888,24 @@ if test "x$with_libblkid" = "xyes"; then
fi
AM_CONDITIONAL([HAVE_LIBBLKID], [test "x$with_libblkid" = "xyes"])
if test $with_freebsd = yes; then
default_qemu_user=root
default_qemu_group=wheel
else
default_qemu_user=root
default_qemu_group=root
fi
AC_ARG_WITH([qemu-user],
AC_HELP_STRING([--with-qemu-user], [username to run QEMU system instance as @<:@default=root@:>@]),
AC_HELP_STRING([--with-qemu-user],
[username to run QEMU system instance as @<:@default=platform dependent@:>@]),
[QEMU_USER=${withval}],
[QEMU_USER=root])
[QEMU_USER=${default_qemu_user}])
AC_ARG_WITH([qemu-group],
AC_HELP_STRING([--with-qemu-group], [groupname to run QEMU system instance as @<:@default=root@:>@]),
AC_HELP_STRING([--with-qemu-group],
[groupname to run QEMU system instance as @<:@default=platform dependent@:>@]),
[QEMU_GROUP=${withval}],
[QEMU_GROUP=root])
[QEMU_GROUP=${default_qemu_group}])
AC_DEFINE_UNQUOTED([QEMU_USER], ["$QEMU_USER"], [QEMU user account])
AC_DEFINE_UNQUOTED([QEMU_GROUP], ["$QEMU_GROUP"], [QEMU group account])

View File

@ -27,7 +27,12 @@
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <linux/capability.h>
#if defined(__linux__)
# include <linux/capability.h>
#elif defined(__FreeBSD__)
# include <sys/param.h>
# include <sys/cpuset.h>
#endif
#include "qemu_process.h"
#include "qemu_domain.h"
@ -3716,7 +3721,12 @@ int qemuProcessStart(virConnectPtr conn,
/* in case a certain disk is desirous of CAP_SYS_RAWIO, add this */
for (i = 0; i < vm->def->ndisks; i++) {
if (vm->def->disks[i]->rawio == 1)
#ifdef CAP_SYS_RAWIO
virCommandAllowCap(cmd, CAP_SYS_RAWIO);
#else
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Raw I/O is not supported on this platform"));
#endif
}
virCommandSetPreExecHook(cmd, qemuProcessHook, &hookData);

View File

@ -35,6 +35,8 @@
#define VIR_FROM_THIS VIR_FROM_INITCTL
#if defined(__linux__) || \
(defined(__FreeBSD_kernel__) && !(defined(__FreeBSD__)))
/* These constants & struct definitions are taken from
* systemd, under terms of LGPLv2+
*
@ -43,29 +45,29 @@
* Copyright (C) 1995-2004 Miquel van Smoorenburg
*/
#if defined(__FreeBSD_kernel__)
# define VIR_INITCTL_FIFO "/etc/.initctl"
#else
# define VIR_INITCTL_FIFO "/dev/initctl"
#endif
# if defined(__FreeBSD_kernel__)
# define VIR_INITCTL_FIFO "/etc/.initctl"
# else
# define VIR_INITCTL_FIFO "/dev/initctl"
# endif
#define VIR_INITCTL_MAGIC 0x03091969
#define VIR_INITCTL_CMD_START 0
#define VIR_INITCTL_CMD_RUNLVL 1
#define VIR_INITCTL_CMD_POWERFAIL 2
#define VIR_INITCTL_CMD_POWERFAILNOW 3
#define VIR_INITCTL_CMD_POWEROK 4
#define VIR_INITCTL_CMD_BSD 5
#define VIR_INITCTL_CMD_SETENV 6
#define VIR_INITCTL_CMD_UNSETENV 7
# define VIR_INITCTL_MAGIC 0x03091969
# define VIR_INITCTL_CMD_START 0
# define VIR_INITCTL_CMD_RUNLVL 1
# define VIR_INITCTL_CMD_POWERFAIL 2
# define VIR_INITCTL_CMD_POWERFAILNOW 3
# define VIR_INITCTL_CMD_POWEROK 4
# define VIR_INITCTL_CMD_BSD 5
# define VIR_INITCTL_CMD_SETENV 6
# define VIR_INITCTL_CMD_UNSETENV 7
#define VIR_INITCTL_CMD_CHANGECONS 12345
# define VIR_INITCTL_CMD_CHANGECONS 12345
#ifdef MAXHOSTNAMELEN
# define VIR_INITCTL_RQ_HLEN MAXHOSTNAMELEN
#else
# define VIR_INITCTL_RQ_HLEN 64
#endif
# ifdef MAXHOSTNAMELEN
# define VIR_INITCTL_RQ_HLEN MAXHOSTNAMELEN
# else
# define VIR_INITCTL_RQ_HLEN 64
# endif
/*
* This is what BSD 4.4 uses when talking to init.
@ -161,3 +163,11 @@ cleanup:
VIR_FORCE_CLOSE(fd);
return ret;
}
#else
int virInitctlSetRunLevel(virInitctlRunLevel level ATTRIBUTE_UNUSED,
const char *vroot ATTRIBUTE_UNUSED)
{
virReportError(VIR_ERR_NO_SUPPORT, "%s", __FUNCTION__);
return -1;
}
#endif