From patchwork Fri Jun 11 14:07:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jared Bents X-Patchwork-Id: 1490972 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rockwellcollins.com header.i=@rockwellcollins.com header.a=rsa-sha256 header.s=hrcrc2020 header.b=t/wpUFu3; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4G1jNN52h8z9sRN for ; Sat, 12 Jun 2021 00:07:47 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id D97B1400C2; Fri, 11 Jun 2021 14:07:43 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id my-nvUgcs7xG; Fri, 11 Jun 2021 14:07:42 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp2.osuosl.org (Postfix) with ESMTP id B416D404C1; Fri, 11 Jun 2021 14:07:41 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 222E91BF2B0 for ; Fri, 11 Jun 2021 14:07:40 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 1216482ED2 for ; Fri, 11 Jun 2021 14:07:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=rockwellcollins.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qlfn-xQuDIaZ for ; Fri, 11 Jun 2021 14:07:38 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from da1vs05.rockwellcollins.com (da1vs05.rockwellcollins.com [205.175.227.130]) by smtp1.osuosl.org (Postfix) with ESMTPS id 59F1982BC4 for ; Fri, 11 Jun 2021 14:07:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rockwellcollins.com; s=hrcrc2020; h=from:to:cc:subject:date:message-id; bh=a6maMh/HI56kXIGkuPv/bL9Y4cquZ3QnUAnNCRVw/R0=; b=t/wpUFu3B5x3ImhZ8LsyD7w3EcMwWyX1MbD1/Aodt+dEB47FW81e2OXA 35+yMj7TPZVF/bPyLfEh+w+0w92ZQnskAfDxJhAgKrh9S9q9yLdzDSmWZ LsS/egBFdeRGavev/AOxtNaPEYeZ5hMn0ocUslGdsCTINOEzDziMNArxj qONpeddA6ruulPDSjlQIKkn0OfEzU6+yZU6aUcNywNLAd0NxI9yZ4LzcE DdXIWPZfxN/bAS7ML2Wb0PyJgh5rb3JpX/VGhSaQA0m2CnjZC766pObxb jgPYs3uggSzMx2QOVaCYzQw7rYQhMUzqudp0A+hBafHMLVuAMMjrDAfsC g==; IronPort-SDR: qHK9G39SaPvpWhnZXL2AomjRAIxg9ZZXoHM9zrytKEZKQyoR57QxM0q/jnlWer1BMEOe/uFkgO zJ8+iNL5XghXzSP83XIhd1O8NKJfMTmen9DiClPt7VM3YrCwEl6WkVEo83pWJeMpovO7eQFBOK n8o/mFurSlyDVatk2Riw2JGbZd2A93huRKFZhcQYdlPP6tVvdX++OXAQ6hd91FDFgCVgq6aset lcbkPX5wJXq26a5Y05NFZuN35UaPxYAK9WNZFZNGCiL6Hz/cksfCPuym3W5R797/BijfOkLUkJ /y8= Received: from ofwda1n02.rockwellcollins.com (HELO ciulimr01.rockwellcollins.com) ([205.175.227.14]) by da1vs05.rockwellcollins.com with ESMTP; 11 Jun 2021 09:07:37 -0500 X-Received: from gravy.rockwellcollins.com (gravy.rockwellcollins.lab [10.148.114.119]) by ciulimr01.rockwellcollins.com (Postfix) with ESMTP id 2B718600E4; Fri, 11 Jun 2021 09:07:37 -0500 (CDT) From: Jared Bents To: buildroot@busybox.net Date: Fri, 11 Jun 2021 09:07:30 -0500 Message-Id: <20210611140732.47283-1-jared.bents@rockwellcollins.com> X-Mailer: git-send-email 2.17.1 Subject: [Buildroot] [PATCH v9 1/3] package/libvirt: new package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Carlos Santos , thomas.petazzoni@bootlin.com, Jared Bents MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Libvirt is collection of software that provides a convenient way to manage virtual machines and other virtualization functionality, such as storage and network interface management. These software pieces include an API library, a daemon (libvirtd), and a command line utility (virsh). http://libvirt.org/ Signed-off-by: Jared Bents --- History: v1: primitive package, for experimental purposes only v1->v2: - Clarify dependence on !BR2_TOOLCHAIN_USES_MUSL - Add run-time dependence on dnsmask - Add dependence on eudev and libpciaccess when eudev is selected (thus detected by configure). v2->v3: - Condition the use of libtirpc to !BR2_TOOLCHAIN_HAS_NATIVE_RPC - Check for BR2_PACKAGE_HAS_UDEV instead of BR2_PACKAGE_EUDEV v3->v4: - Fix version history :-). - Add optional dependency on several packages (e.g. attr, libpcap), depending on wether they are selected or not, and explicitly disable features whose required packages are not selected. This is very important to prevent selection of features based on leaks from the host environment (e.g. finding /usr/bin/numad on the host machine). - Enable the "interface" driver if either udev or netcf is available. - Disable pm-utils support, since there is no package for Buildroot. - Use either openssl or gnutls, if available. - Run qemu as user "qemu", group "kvm", not as root. - Add a LIBVIRT_USERS variable to create user "qemu" an group "kvm". - Add a device table file to set the ownership and permissions of the libvirt directories under /etc, /run and /var. - If udev is not available, add an init script to set the ownership and permissions of /dev/kvm to root:kvm and 0660; otherwise create a corresponding /etc/udev/rules.d/90-kvm.rules file. - Enable support for systemd, if applicable; otherwise install an init script to start/stop/restart libvirtd. - Ensure that a modern netcat is available. v4->v5: - Changed SOB, since I don't work for DATACOM anymore. - Bump to version 5.8.0. - Add hash for license file. - Drop OpenSSL options, since it's not supported anymore. - Use https to access libvirt.org, since http is always redirected to https. - Make libvirt daemon optional. If not selected, build only the client utilities. Reorganize run-time dependencies accordingly. - Load all vfio modules on startup, if they exist, otherwise virtual machines that depend on the PCI Passthrough feature fail to load. vfio-pci is not enough. Other modules, like vfio_iommu_type1, may be necessary. - Fix stopping dnsmasq in start/stop script. dnsmasq is not always started by libvirtd, so we must chech if it is running before attempting to stop it. - Move /etc/libvirt/{qemu,secrets,storage} to /var/lib/libvirt. It may be necessary to create persistent files (e.g. VM definitions) in these directories. Move them to /var/lib because /etc may be on a read-only or volatile (initramfs) filesystem. We could tweak the code to change these paths but the patch would be large and would break compatibility with ordinary installations and with the documentation. - Prevent an error message if pid file dissappears. start-stop-daemon sends a TERM signal to the process but does not wait for its termination, so we may reach rm_stale_pidfile while libvirtd.pid still exists but execute the cat command when the file is already gone, which leads cat to show an error message. We could use the '--retry' option to wait for the process termination but it is not supported by BusyBox. Let's just send the error messages to /dev/null and attempt to remove the file if any command fails, since 'rm -f' does nothing if the file does not exist. - Move device table creation to LIBVIRT_DEVICES instead of using the device_table.txt file. - Select libseccomp to enable seccomp support in qemu, as required by libvirt. - Select hwdata (pci.ids). It is required by libvirt to show device names when we use virtual machine manager to add hardware via PCI passthrough, otherwise only the PCI bus information (slot, port, function) is shown. - Add systemd support. - Restrict to libvirt with udev support. Drop netcf usage, which requires a new package and is hard to test. Support for non-udev systems will be added later. - Remove package/libvirt/S30devkvmperms - Fine-tune the configuration and pass host/target executable paths in ac_cv_path_* variables via LIBVIRT_CONF_ENV. - Use LIBVIRT_PERMISSIONS to set directory permissions. - Drop hook to set user/group in /etc/libvirt/qemu.conf, since it's not necessary. - Pull two upstream patches that fix building with musl. - Do not check for executables existence in the startup script. - Use separate init scripts for virtlogd and libvirtd. Make them compliant to the current pattern (as much as possible). - Do not start/stop virtlockd, since it is controlled by libvirtd. v5->v6: - Remove stray '\' in S91virtlogd Signed-off-by: Carlos Santos v6->v7: - Carlos Santos is no longer contributing to buildroot. - Adjusted handling of bash-completion to add dependency if it is enabled. - Bump to version 6.4.0 v7->v8 - Bump to version 7.0.0 - Update to mason package type. - Split off daemon, qemu, and lxc to separate patches within the series due to feedback on being a large patch in an effort to allow the base part of libvirt to get added while providing the other portions for review. v8->v9 - Bump to version 7.4.0 - Update to add host-python-docutils as dependency Signed-off-by: Jared Bents --- DEVELOPERS | 3 + package/Config.in | 1 + package/libvirt/90-kvm.rules | 1 + package/libvirt/Config.in | 42 +++++++ package/libvirt/libvirt.hash | 3 + package/libvirt/libvirt.mk | 212 +++++++++++++++++++++++++++++++++++ 6 files changed, 262 insertions(+) create mode 100644 package/libvirt/90-kvm.rules create mode 100644 package/libvirt/Config.in create mode 100644 package/libvirt/libvirt.hash create mode 100644 package/libvirt/libvirt.mk diff --git a/DEVELOPERS b/DEVELOPERS index 0ab898d94d..ef4ff17cc4 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -1264,6 +1264,9 @@ F: package/python-pexpect/ F: package/python-ptyprocess/ F: package/zynq-boot-bin/ +N: Jared Bents +F: package/libvirt/ + N: Jarkko Sakkinen F: package/quota/ diff --git a/package/Config.in b/package/Config.in index e42f579494..70ba782a2f 100644 --- a/package/Config.in +++ b/package/Config.in @@ -2463,6 +2463,7 @@ menu "System tools" source "package/kmod/Config.in" source "package/kvmtool/Config.in" source "package/libostree/Config.in" + source "package/libvirt/Config.in" source "package/lxc/Config.in" source "package/makedumpfile/Config.in" source "package/mender/Config.in" diff --git a/package/libvirt/90-kvm.rules b/package/libvirt/90-kvm.rules new file mode 100644 index 0000000000..5145c27e79 --- /dev/null +++ b/package/libvirt/90-kvm.rules @@ -0,0 +1 @@ +KERNEL=="kvm", OWNER="root", GROUP="kvm", MODE="0660" diff --git a/package/libvirt/Config.in b/package/libvirt/Config.in new file mode 100644 index 0000000000..f7999fea88 --- /dev/null +++ b/package/libvirt/Config.in @@ -0,0 +1,42 @@ +config BR2_PACKAGE_LIBVIRT + bool "libvirt" + depends on BR2_USE_MMU # fork() + depends on BR2_aarch64 || BR2_i386 || BR2_x86_64 + depends on BR2_PACKAGE_HAS_UDEV + depends on !BR2_STATIC_LIBS + depends on BR2_USE_WCHAR + depends on BR2_TOOLCHAIN_HAS_THREADS + depends on BR2_USE_WCHAR + select BR2_PACKAGE_GNUTLS + select BR2_PACKAGE_LIBTIRPC + select BR2_PACKAGE_ZLIB + # configure: You must install the pciaccess module to build with udev + select BR2_PACKAGE_LIBPCIACCESS + select BR2_PACKAGE_LIBXML2 + # run-time dependencies + select BR2_PACKAGE_CGROUPFS_MOUNT if !BR2_INIT_SYSTEMD + help + Libvirt is collection of software that provides a convenient + way to manage virtual machines and other virtualization + functionality, such as storage and network interface + management. These software pieces include an API library, a + daemon (libvirtd), and a command line utility (virsh). + + https://libvirt.org/ + +comment "libvirt needs udev /dev management" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_LIBVIRT_ARCH_SUPPORTS + depends on !BR2_PACKAGE_HAS_UDEV + +comment "libvirt needs a toolchain w/ headers >= 3.12" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_HAS_UDEV + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + +comment "libvirt needs a toolchain w/ threads, dynamic library" + depends on BR2_USE_MMU + depends on BR2_PACKAGE_HAS_UDEV + depends on !BR2_PACKAGE_NETCAT + depends on BR2_STATIC_LIBS || !BR2_USE_MMU || \ + !BR2_TOOLCHAIN_HAS_THREADS diff --git a/package/libvirt/libvirt.hash b/package/libvirt/libvirt.hash new file mode 100644 index 0000000000..ec96dfc62c --- /dev/null +++ b/package/libvirt/libvirt.hash @@ -0,0 +1,3 @@ +# locally computed +sha256 b366d73dee6ce77a226bedef592e0620ceb8e22e5998f60768017f79fc4ead26 libvirt-7.4.0.tar.xz +sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING diff --git a/package/libvirt/libvirt.mk b/package/libvirt/libvirt.mk new file mode 100644 index 0000000000..b2c9eebbfe --- /dev/null +++ b/package/libvirt/libvirt.mk @@ -0,0 +1,212 @@ +################################################################################ +# +# libvirt +# +################################################################################ + +LIBVIRT_VERSION = 7.4.0 +LIBVIRT_SITE = https://libvirt.org/sources +LIBVIRT_SOURCE = libvirt-$(LIBVIRT_VERSION).tar.xz +LIBVIRT_LICENSE = LGPL-2.1+ +LIBVIRT_LICENSE_FILES = COPYING +LIBVIRT_DEPENDENCIES = host-nfs-utils host-pkgconf host-python-docutils gnutls libglib2 libpciaccess libtirpc libxml2 udev zlib + +LIBVIRT_CONF_ENV += \ + CFLAGS="$(TARGET_CFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags libtirpc`" \ + LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libtirpc`" + +LIBVIRT_CONF_OPTS = \ + -Drpath=disabled \ + -Dapparmor=disabled \ + -Ddriver_bhyve=disabled \ + -Ddriver_esx=disabled \ + -Ddriver_hyperv=disabled \ + -Ddriver_interface=enabled \ + -Ddriver_libxl=disabled \ + -Ddriver_lxc=disabled \ + -Ddriver_network=disabled \ + -Ddriver_openvz=disabled \ + -Ddriver_qemu=disabled \ + -Ddriver_remote=enabled \ + -Ddriver_secrets=enabled \ + -Ddriver_vmware=disabled \ + -Ddriver_vbox=disabled \ + -Ddriver_vz=disabled \ + -Ddtrace=disabled \ + -Dfirewalld=disabled \ + -Dfirewalld_zone=disabled \ + -Dglusterfs=disabled \ + -Dhost_validate=enabled \ + -Dinit_script=$(if $(BR2_INIT_SYSTEMD),systemd,none) \ + -Dlibssh=disabled \ + -Dlibvirtd=disabled \ + -Dlogin_shell=disabled \ + -Dnetcf=disabled \ + -Dnss=disabled \ + -Dnumad=disabled \ + -Dopenwsman=disabled \ + -Dpciaccess=enabled \ + -Dpm_utils=disabled \ + -Dsanlock=disabled \ + -Dsasl=disabled \ + -Dsecdriver_apparmor=disabled \ + -Dssh2=disabled \ + -Dstorage_mpath=disabled \ + -Dstorage_iscsi=disabled \ + -Dstorage_iscsi_direct=disabled \ + -Dsysctl_config=enabled \ + -Dtest_coverage=false \ + -Dudev=enabled \ + -Dwireshark_dissector=disabled + +ifeq ($(BR2_PACKAGE_ATTR),y) +LIBVIRT_CONF_OPTS += -Dattr=enabled +LIBVIRT_DEPENDENCIES += attr +else +LIBVIRT_CONF_OPTS += -Dattr=disabled +endif + +ifeq ($(BR2_PACKAGE_AUDIT),y) +LIBVIRT_CONF_OPTS += -Daudit=enabled +LIBVIRT_DEPENDENCIES += audit +else +LIBVIRT_CONF_OPTS += -Daudit=disabled +endif + +ifeq ($(BR2_PACKAGE_BASH_COMPLETION),y) +LIBVIRT_CONF_OPTS += -Dbash_completion=enabled +LIBVIRT_DEPENDENCIES += bash-completion +else +LIBVIRT_CONF_OPTS += -Dbash_completion=disabled +endif + +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBBLKID),y) +LIBVIRT_CONF_OPTS += -Dblkid=enabled +LIBVIRT_DEPENDENCIES += util-linux +else +LIBVIRT_CONF_OPTS += -Dblkid=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBCAP_NG),y) +LIBVIRT_CONF_OPTS += -Dcapng=enabled +LIBVIRT_DEPENDENCIES += libcap-ng +else +LIBVIRT_CONF_OPTS += -Dcapng=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBCURL),y) +LIBVIRT_CONF_OPTS += -Dcurl=enabled +LIBVIRT_DEPENDENCIES += libcurl +else +LIBVIRT_CONF_OPTS += -Dcurl=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBFUSE),y) +LIBVIRT_CONF_OPTS += -Dfuse=enabled +LIBVIRT_DEPENDENCIES += libfuse +else +LIBVIRT_CONF_OPTS += -Dfuse=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBISCSI),y) +LIBVIRT_CONF_OPTS += -Dlibiscsi=enabled +LIBVIRT_DEPENDENCIES += libiscsi +else +LIBVIRT_CONF_OPTS += -Dlibiscsi=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBPCAP),y) +LIBVIRT_CONF_OPTS += -Dlibpcap=enabled +LIBVIRT_DEPENDENCIES += libpcap +else +LIBVIRT_CONF_OPTS += -Dlibpcap=disabled +endif + +ifeq ($(BR2_PACKAGE_NUMACTL),y) +LIBVIRT_CONF_OPTS += -Dnumactl=enabled +LIBVIRT_DEPENDENCIES += numactl +else +LIBVIRT_CONF_OPTS += -Dnumactl=disabled +endif + +ifeq ($(BR2_PACKAGE_POLKIT),y) +LIBVIRT_CONF_OPTS += -Dpolkit=enabled +LIBVIRT_DEPENDENCIES += polkit +else +LIBVIRT_CONF_OPTS += -Dpolkit=disabled +endif + +ifeq ($(BR2_PACKAGE_READLINE),y) +LIBVIRT_CONF_OPTS += -Dreadline=enabled +LIBVIRT_DEPENDENCIES += readline +else +LIBVIRT_CONF_OPTS += -Dreadline=disabled +endif + +ifeq ($(BR2_PACKAGE_LIBSELINUX),y) +LIBVIRT_CONF_OPTS += -Dselinux=enabled -Dsecdriver_selinux=enabled \ + -Dselinux_mount=/sys/fs/selinux +LIBVIRT_DEPENDENCIES += libselinux +else +LIBVIRT_CONF_OPTS += -Dselinux=disabled -Dsecdriver_selinux=disabled +endif + +ifeq ($(BR2_PACKAGE_LVM2),y) +LIBVIRT_CONF_OPTS += -Dstorage_lvm=enabled +LIBVIRT_DEPENDENCIES += lvm2 +else +LIBVIRT_CONF_OPTS += -Dstorage_lvm=disabled +endif + +ifeq ($(BR2_PACKAGE_YAJL),y) +LIBVIRT_CONF_OPTS += -Dyajl=enabled +LIBVIRT_DEPENDENCIES += yajl +else +LIBVIRT_CONF_OPTS += -Dyajl=disabled +endif + +define LIBVIRT_INSTALL_UDEV_RULES + $(INSTALL) -D -m 644 package/libvirt/90-kvm.rules \ + $(TARGET_DIR)/etc/udev/rules.d/90-kvm.rules +endef +LIBVIRT_POST_INSTALL_TARGET_HOOKS += LIBVIRT_INSTALL_UDEV_RULES + +# Adjust diretory ownerships and permissions. Notice /var/log is a symlink to +# /tmp in the default sysvinit skeleton, so some directories may disappear at +# run-time. Set the permissions anyway, since they are valid for the default +# systemd skeleton. +define LIBVIRT_PERMISSIONS + /etc/libvirt d 700 root root - - - - - + /etc/libvirt/nwfilter d 700 root root - - - - - + /var/lib/libvirt d 755 root root - - - - - + /var/lib/libvirt/boot d 711 root root - - - - - + /var/lib/libvirt/dnsmasq d 755 root root - - - - - + /var/lib/libvirt/filesystems d 711 root root - - - - - + /var/lib/libvirt/images d 711 root root - - - - - + /var/lib/libvirt/network d 700 root root - - - - - + /var/lib/libvirt/secrets d 700 root root - - - - - + /var/lib/libvirt/storage d 755 root root - - - - - + /var/lib/libvirt/storage/autostart d 755 root root - - - - - + /var/cache/libvirt d 711 root root - - - - - + /var/log/libvirt d 700 root root - - - - - + /var/log/swtpm d 755 root root - - - - - + /var/log/swtpm/libvirt d 755 root root - - - - - +endef + +# libvirt may need to create persistent files (e.g. VM definitions) in these +# directories. Move them to /var/lib because /etc may be on a read-only or +# volatile (initramfs) filesystem. We could tweak the code to change these +# paths but the patch would be large and would break compatibility with +# ordinary installations and with the documentation. +define LIBVIRT_CREATE_SYMLINKS + $(INSTALL) -m 700 -d $(TARGET_DIR)/etc/libvirt + $(INSTALL) -m 755 -d $(TARGET_DIR)/var/lib/libvirt + $(INSTALL) -m 700 -d $(TARGET_DIR)/var/lib/libvirt/secrets + $(INSTALL) -m 755 -d $(TARGET_DIR)/var/lib/libvirt/storage + ln -s -f ../../var/lib/libvirt/secrets $(TARGET_DIR)/etc/libvirt/ + ln -s -f ../../var/lib/libvirt/storage $(TARGET_DIR)/etc/libvirt/ +endef + +LIBVIRT_PRE_INSTALL_TARGET_HOOKS += LIBVIRT_CREATE_SYMLINKS + +$(eval $(meson-package)) From patchwork Fri Jun 11 14:07:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jared Bents X-Patchwork-Id: 1490974 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rockwellcollins.com header.i=@rockwellcollins.com header.a=rsa-sha256 header.s=hrcrc2020 header.b=wEqenxVI; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4G1jNd6bdKz9sWk for ; Sat, 12 Jun 2021 00:08:01 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D9450600C6; Fri, 11 Jun 2021 14:07:56 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id INOiK2NP7u_w; Fri, 11 Jun 2021 14:07:55 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp3.osuosl.org (Postfix) with ESMTP id E3AD3600D4; Fri, 11 Jun 2021 14:07:54 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id B16671BF2B0 for ; Fri, 11 Jun 2021 14:07:41 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 42F6E82BC4 for ; Fri, 11 Jun 2021 14:07:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=rockwellcollins.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wTW-_i0KWq8B for ; Fri, 11 Jun 2021 14:07:39 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from ch3vs04.rockwellcollins.com (ch3vs04.rockwellcollins.com [205.175.226.52]) by smtp1.osuosl.org (Postfix) with ESMTPS id DF3E182EAD for ; Fri, 11 Jun 2021 14:07:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rockwellcollins.com; s=hrcrc2020; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=wVKkJx2cqfh5meR/+9ODZ5XZglw3nwk7fShh9syyISQ=; b=wEqenxVIGZCKJ54Y97mvHy1SeL+cqIrpMAj4LkVUSYJTjyWeD7HBPRA5 rQMVGsWDT+wrCrOSO4X9KJmXI3FMOhbIZBFDdahaVRSs3te24OwfSVnY0 7ftdy2dsitZXSvcOaK2rD6VLTN6F9PTLLVtIdQdF0pd3dIyrQ9ezSwxgV anFksS94S24wRk3YRl54renc1TSgNWp02WA6rGb/W9um8cRJe5zfotJB+ dtUwEwAAwaB1ZpwCUiAF+0UnIbCNkShlya9q2Dvi46WMCiF1PDQ8Y59Ds 38NdL3MHNCs7P9hPzGI1IcqEyxCmzzzm28INAzoKxEvfXOeLpbfc01geA w==; IronPort-SDR: htsC9uvwH0rsLzC1Yj0/QpyYqLyN3a9iRwI0tgRyhr7OGAJz8l36bzbe0bJXtt7v+ifvckNx01 1CJ+y9ENgCt6PmGodn+lmQIxAtKy6bIY26JTGETnE29Lgdk3Rdt8kLYvQ0ltpe4GvGLlJgK3n8 L7g2ocb0QcN40Rp4i/15v2+rL7OlQYwPoCvypUQigKB6JWxUm3cZ2awwB7I1bC2nyNPNXaScJe l48NH8LrEwtZhalpioVsbS6A3jAfUlUAGtjsdb3XuBBmhwoM2lDno3Vp+6ZkVX0eoGcB+SRZRv fck= Received: from ofwch3n02.rockwellcollins.com (HELO ciulimr01.rockwellcollins.com) ([205.175.226.14]) by ch3vs04.rockwellcollins.com with ESMTP; 11 Jun 2021 09:07:38 -0500 X-Received: from gravy.rockwellcollins.com (gravy.rockwellcollins.lab [10.148.114.119]) by ciulimr01.rockwellcollins.com (Postfix) with ESMTP id EB83160299; Fri, 11 Jun 2021 09:07:37 -0500 (CDT) From: Jared Bents To: buildroot@busybox.net Date: Fri, 11 Jun 2021 09:07:31 -0500 Message-Id: <20210611140732.47283-2-jared.bents@rockwellcollins.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210611140732.47283-1-jared.bents@rockwellcollins.com> References: <20210611140732.47283-1-jared.bents@rockwellcollins.com> Subject: [Buildroot] [PATCH v9 2/3] package/libvirt: add daemon libvirtd X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thomas.petazzoni@bootlin.com, Jared Bents MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Update to add the libvirtd daemon for libvirt Signed-off-by: Jared Bents --- History: v8: - Split off from patch adding libvirt v8->v9: - N/A --- package/libvirt/Config.in | 20 ++++++ package/libvirt/S91virtlogd | 65 ++++++++++++++++++ package/libvirt/S92libvirtd | 132 ++++++++++++++++++++++++++++++++++++ package/libvirt/libvirt.mk | 49 +++++++++++-- 4 files changed, 260 insertions(+), 6 deletions(-) create mode 100644 package/libvirt/S91virtlogd create mode 100644 package/libvirt/S92libvirtd diff --git a/package/libvirt/Config.in b/package/libvirt/Config.in index f7999fea88..ae5c8aac8a 100644 --- a/package/libvirt/Config.in +++ b/package/libvirt/Config.in @@ -24,6 +24,26 @@ config BR2_PACKAGE_LIBVIRT https://libvirt.org/ +if BR2_PACKAGE_LIBVIRT + +config BR2_PACKAGE_LIBVIRT_DAEMON + bool "libvirtd" + default y + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS + select BR2_PACKAGE_DNSMASQ + select BR2_PACKAGE_EBTABLES + select BR2_PACKAGE_IPTABLES + select BR2_PACKAGE_IPROUTE2 + # These are required because there is no way to unequivocally select a modern netcat + select BR2_PACKAGE_NMAP if !BR2_PACKAGE_NETCAT_OPENBSD + select BR2_PACKAGE_NMAP_NCAT if !BR2_PACKAGE_NETCAT_OPENBSD + select BR2_PACKAGE_RADVD + help + Build the libvirt daemon (libvirtd) otherwise build only the + utility programs. + +endif + comment "libvirt needs udev /dev management" depends on BR2_USE_MMU depends on BR2_PACKAGE_LIBVIRT_ARCH_SUPPORTS diff --git a/package/libvirt/S91virtlogd b/package/libvirt/S91virtlogd new file mode 100644 index 0000000000..03d17b5dbd --- /dev/null +++ b/package/libvirt/S91virtlogd @@ -0,0 +1,65 @@ +#!/bin/sh + +DAEMON="virtlogd" +EXECFILE="/usr/sbin/$DAEMON" +PIDFILE="/var/run/$DAEMON.pid" + +VIRTLOGD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +start() { + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "$EXECFILE" \ + -- -d $VIRTLOGD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" -x "$EXECFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +# On receipt of SIGUSR1 virtlogd will re-exec() its binary, while maintaining +# all current logs and clients. This allows for live upgrades of the virtlogd +# service. +reload() { + printf 'Reloading %s: ' "$DAEMON" + start-stop-daemon -K -s USR1 -q -p "$PIDFILE" -x "$EXECFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/libvirt/S92libvirtd b/package/libvirt/S92libvirtd new file mode 100644 index 0000000000..736519f3d0 --- /dev/null +++ b/package/libvirt/S92libvirtd @@ -0,0 +1,132 @@ +#!/bin/sh + +DAEMON="libvirtd" +EXECFILE="/usr/sbin/$DAEMON" +PIDFILE="/var/run/$DAEMON.pid" + +LIBVIRTD_ARGS="" + +# shellcheck source=/dev/null +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON" + +trap 'rm -f "$TMP_MODULE_LIST" "$TMP_PIDFILE_LIST"' EXIT + +is_alive() { + [ -e "$1" ] \ + && exe="/proc/$(cat "$1" 2>/dev/null)/exe" \ + && [ -s "$exe" ] \ + && [ "$(readlink -f "$exe")" = "$2" ] +} + +load_modules() { + printf 'Loading kernel modules: ' + kver="$(uname -r)" + TMP_MODULE_LIST="$(mktemp -q)" || { + echo 'FAIL creating temporary modules list' + exit 1 + } + [ -d "/lib/modules/$kver/kernel/drivers/net" ] && \ + find "/lib/modules/$kver/kernel/drivers/net" \ + -name "tun.ko*" >> "$TMP_MODULE_LIST" + [ -d "/lib/modules/$kver/kernel/drivers/vhost" ] && \ + find "/lib/modules/$kver/kernel/drivers/vhost" \ + -name "vhost?net.ko*" >> "$TMP_MODULE_LIST" + [ -d "/lib/modules/$kver/kernel/drivers/net" ] && \ + find "/lib/modules/$kver/kernel/drivers/vfio" \ + -name "*.ko*" >> "$TMP_MODULE_LIST" + while read -r f; do + m="$(basename "${f%.ko*}")" + if modprobe -q "$m"; then + printf '%s ' "$m" + else + echo "FAIL on $m" + exit 1 + fi + done < "$TMP_MODULE_LIST" + echo "OK" +} + +# +# If libvirtd dies it leves behind one stale dnsmasq per virtual network that +# must be killed before starting libvirtd again. +# +rm_stale_dnsmasq() { + [ -d /var/run/libvirt/network ] || return 0 + TMP_PIDFILE_LIST="$(mktemp -q)" || { + echo "Could not create temporary pidfile list" + exit 1 + } + find /var/run/libvirt/network -name '*.pid' > "$TMP_PIDFILE_LIST" + while read -r pidfile; do + if is_alive "$pidfile" /usr/sbin/dnsmasq; then + start-stop-daemon -K -q -p "$pidfile" -x /usr/sbin/dnsmasq + status=$? + if [ "$status" -ne 0 ]; then + echo "Could not stop stale dnsmasq daemons" + exit 1 + fi + rm -f "$pidfile" + fi + done < "$TMP_PIDFILE_LIST" +} + +start() { + if is_alive "$PIDFILE" "$EXECFILE"; then + # libvirtd is already running. Leave it alone. + printf 'Starting %s: FAIL\n' "$DAEMON" + return 1 + fi + rm_stale_dnsmasq + load_modules + printf 'Starting %s: ' "$DAEMON" + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -p "$PIDFILE" -x "$EXECFILE" \ + -- -d $LIBVIRTD_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +stop() { + printf 'Stopping %s: ' "$DAEMON" + start-stop-daemon -K -q -p "$PIDFILE" -x "$EXECFILE" + status=$? + if [ "$status" -eq 0 ]; then + rm_stale_dnsmasq + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +restart() { + stop + sleep 1 + start +} + +# On receipt of SIGHUP libvirtd will reload its configuration. +reload() { + printf 'Reloading %s: ' "$DAEMON" + start-stop-daemon -K -s HUP -q -p "$PIDFILE" -x "$EXECFILE" + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start|stop|restart|reload) + "$1";; + *) + echo "Usage: $0 {start|stop|restart|reload}" + exit 1 +esac diff --git a/package/libvirt/libvirt.mk b/package/libvirt/libvirt.mk index b2c9eebbfe..8cc77f3c0e 100644 --- a/package/libvirt/libvirt.mk +++ b/package/libvirt/libvirt.mk @@ -24,7 +24,6 @@ LIBVIRT_CONF_OPTS = \ -Ddriver_interface=enabled \ -Ddriver_libxl=disabled \ -Ddriver_lxc=disabled \ - -Ddriver_network=disabled \ -Ddriver_openvz=disabled \ -Ddriver_qemu=disabled \ -Ddriver_remote=enabled \ @@ -38,19 +37,14 @@ LIBVIRT_CONF_OPTS = \ -Dglusterfs=disabled \ -Dhost_validate=enabled \ -Dinit_script=$(if $(BR2_INIT_SYSTEMD),systemd,none) \ - -Dlibssh=disabled \ - -Dlibvirtd=disabled \ -Dlogin_shell=disabled \ -Dnetcf=disabled \ - -Dnss=disabled \ -Dnumad=disabled \ -Dopenwsman=disabled \ -Dpciaccess=enabled \ -Dpm_utils=disabled \ -Dsanlock=disabled \ - -Dsasl=disabled \ -Dsecdriver_apparmor=disabled \ - -Dssh2=disabled \ -Dstorage_mpath=disabled \ -Dstorage_iscsi=disabled \ -Dstorage_iscsi_direct=disabled \ @@ -122,6 +116,28 @@ else LIBVIRT_CONF_OPTS += -Dlibpcap=disabled endif +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON)$(BR2_PACKAGE_LIBSSH),yy) +LIBVIRT_CONF_OPTS += -Dlibssh=enabled +LIBVIRT_DEPENDENCIES += libssh +else +LIBVIRT_CONF_OPTS += -Dlibssh=disabled +endif + +# Network is used by daemon, only +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON),y) +LIBVIRT_CONF_OPTS += -Dlibvirtd=enabled -Ddriver_network=enabled +else +LIBVIRT_CONF_OPTS += -Dlibvirtd=disabled -Ddriver_network=disabled +endif + +# Can't build nss plugin without network +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON)$(BR2_PACKAGE_LIBNSS),yy) +LIBVIRT_CONF_OPTS += -Dnss=enabled +LIBVIRT_DEPENDENCIES += libnss +else +LIBVIRT_CONF_OPTS += -Dnss=disabled +endif + ifeq ($(BR2_PACKAGE_NUMACTL),y) LIBVIRT_CONF_OPTS += -Dnumactl=enabled LIBVIRT_DEPENDENCIES += numactl @@ -143,6 +159,13 @@ else LIBVIRT_CONF_OPTS += -Dreadline=disabled endif +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON)$(BR2_PACKAGE_LIBGSASL),yy) +LIBVIRT_CONF_OPTS += -Dsasl=enabled +LIBVIRT_DEPENDENCIES += libgsasl +else +LIBVIRT_CONF_OPTS += -Dsasl=disabled +endif + ifeq ($(BR2_PACKAGE_LIBSELINUX),y) LIBVIRT_CONF_OPTS += -Dselinux=enabled -Dsecdriver_selinux=enabled \ -Dselinux_mount=/sys/fs/selinux @@ -151,6 +174,13 @@ else LIBVIRT_CONF_OPTS += -Dselinux=disabled -Dsecdriver_selinux=disabled endif +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON)$(BR2_PACKAGE_LIBSSH2),yy) +LIBVIRT_CONF_OPTS += -Dssh2=enabled +LIBVIRT_DEPENDENCIES += libssh2 +else +LIBVIRT_CONF_OPTS += -Dssh2=disabled +endif + ifeq ($(BR2_PACKAGE_LVM2),y) LIBVIRT_CONF_OPTS += -Dstorage_lvm=enabled LIBVIRT_DEPENDENCIES += lvm2 @@ -209,4 +239,11 @@ endef LIBVIRT_PRE_INSTALL_TARGET_HOOKS += LIBVIRT_CREATE_SYMLINKS +ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON),y) +define LIBVIRT_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/libvirt/S91virtlogd $(TARGET_DIR)/etc/init.d/S91virtlogd + $(INSTALL) -D -m 0755 package/libvirt/S92libvirtd $(TARGET_DIR)/etc/init.d/S92libvirtd +endef +endif + $(eval $(meson-package)) From patchwork Fri Jun 11 14:07:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jared Bents X-Patchwork-Id: 1490975 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=rockwellcollins.com header.i=@rockwellcollins.com header.a=rsa-sha256 header.s=hrcrc2020 header.b=4/XFEMhT; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4G1jNq68l4z9sWQ for ; Sat, 12 Jun 2021 00:08:11 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6B8E2404DF; Fri, 11 Jun 2021 14:08:09 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZAie8s-ufCAQ; Fri, 11 Jun 2021 14:08:08 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by smtp2.osuosl.org (Postfix) with ESMTP id 9B3E3404DB; Fri, 11 Jun 2021 14:08:07 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 61F121BF2B0 for ; Fri, 11 Jun 2021 14:07:42 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id EAEAC82EAD for ; Fri, 11 Jun 2021 14:07:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=rockwellcollins.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ds60hHud52ck for ; Fri, 11 Jun 2021 14:07:40 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from secvs04.rockwellcollins.com (secvs04.rockwellcollins.com [205.175.225.130]) by smtp1.osuosl.org (Postfix) with ESMTPS id 0D9B182EE1 for ; Fri, 11 Jun 2021 14:07:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rockwellcollins.com; s=hrcrc2020; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=MfDplKe2WkzNI1kgo4TAJZwneEOpuw3PBe/wJJpCYag=; b=4/XFEMhT++9gOYFP1zfMhn8hy3pvFycoO5zLcahheElbymfgJXp0QHoF YQZxahivrYzb4/xJ9GsTRZZnHcgxp9eRG9X96/sZJcy+avyME5KZzHMyG HH1oKfneXr577t9gRg/zo2RyR+/DzklM+T2sfzlVNATV04IDmJCdB9AVS YvX1ukZOu12WS6I3KU1ZbqjhOllZEtZDOLhaOvTCQPdTrQuzQswQFkcb1 t4fvnm2GkCRFVsaSdp4nak8n2OTJLDX8yWnhqnO/ZK/wi/mW0iAXodAT+ ID6V0bjSsMrZ0qmaO+jJ225TmWcPTVf/9MZVNNwN2TypXPwwKaoj/vCLs g==; IronPort-SDR: 1FaRgIzKTYvRPLq8LZVY9KDdjaOP6j9ENfrQGZAps69rd7paV+yUl3fPGRoOMRifIOf6BuMsgD uIF93mnVEfTqrp41sC9wvcU3zFiKVDOiyJIncCea9/cGKoM2UEnCNwedHSNz7hj2qCGn7fLZVN N+degZ0J/L6gpqSzt+YPfel1IGkELoSsHN4EMv+rE33ymk7AnJWHDl1K3F3pU46RqokYUhfSCZ TZ5Xtmtco8MJE1jQsDX7jfIydiw17/i+lvGZU6eVF933VDny8mfK2yFNdFCccJnfMnjoeH/91e t6Q= Received: from ofwgwc03.rockwellcollins.com (HELO ciulimr01.rockwellcollins.com) ([205.175.225.12]) by secvs04.rockwellcollins.com with ESMTP; 11 Jun 2021 09:07:37 -0500 X-Received: from gravy.rockwellcollins.com (gravy.rockwellcollins.lab [10.148.114.119]) by ciulimr01.rockwellcollins.com (Postfix) with ESMTP id B0BC3601C3; Fri, 11 Jun 2021 09:07:38 -0500 (CDT) From: Jared Bents To: buildroot@busybox.net Date: Fri, 11 Jun 2021 09:07:32 -0500 Message-Id: <20210611140732.47283-3-jared.bents@rockwellcollins.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210611140732.47283-1-jared.bents@rockwellcollins.com> References: <20210611140732.47283-1-jared.bents@rockwellcollins.com> Subject: [Buildroot] [PATCH v9 3/3] package/libvirt: add lxc and qemu options X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thomas.petazzoni@bootlin.com, Jared Bents MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Update to add lxc and qemu options for libvirt under the daemon config option Signed-off-by: Jared Bents --- History: v8: - Split off from patch adding libvirt v8->v9: - N/A --- package/libvirt/Config.in | 36 +++++++++++++++++++++++++++++++++++ package/libvirt/libvirt.mk | 39 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/package/libvirt/Config.in b/package/libvirt/Config.in index ae5c8aac8a..ef9c10655f 100644 --- a/package/libvirt/Config.in +++ b/package/libvirt/Config.in @@ -42,6 +42,42 @@ config BR2_PACKAGE_LIBVIRT_DAEMON Build the libvirt daemon (libvirtd) otherwise build only the utility programs. +# Stateful drivers are useful only when building the daemon. +if BR2_PACKAGE_LIBVIRT_DAEMON + +config BR2_PACKAGE_LIBVIRT_QEMU + bool "qemu" + depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS # libseccomp + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 # libseccomp + depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET + select BR2_PACKAGE_HWDATA # libpciaccess + select BR2_PACKAGE_HWDATA_PCI_IDS # libpciaccess + select BR2_PACKAGE_LIBSECCOMP + select BR2_PACKAGE_QEMU + select BR2_PACKAGE_QEMU_SYSTEM if BR2_PACKAGE_QEMU_CUSTOM_TARGETS = "" + select BR2_PACKAGE_YAJL + help + QEMU/KVM support + +comment "qemu support needs a toolchain w/ headers >= 3.12" + depends on BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET + depends on BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12 + +config BR2_PACKAGE_LIBVIRT_LXC + bool "lxc" + depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 # lxc + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 # lxc + select BR2_PACKAGE_LXC + help + Linux Container support + +comment "lxc needs a toolchain w/ threads, headers >= 3.0, dynamic library, gcc >= 4.7" + depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0 + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 + +endif + endif comment "libvirt needs udev /dev management" diff --git a/package/libvirt/libvirt.mk b/package/libvirt/libvirt.mk index 8cc77f3c0e..22b99a4323 100644 --- a/package/libvirt/libvirt.mk +++ b/package/libvirt/libvirt.mk @@ -23,9 +23,7 @@ LIBVIRT_CONF_OPTS = \ -Ddriver_hyperv=disabled \ -Ddriver_interface=enabled \ -Ddriver_libxl=disabled \ - -Ddriver_lxc=disabled \ -Ddriver_openvz=disabled \ - -Ddriver_qemu=disabled \ -Ddriver_remote=enabled \ -Ddriver_secrets=enabled \ -Ddriver_vmware=disabled \ @@ -130,6 +128,13 @@ else LIBVIRT_CONF_OPTS += -Dlibvirtd=disabled -Ddriver_network=disabled endif +ifeq ($(BR2_PACKAGE_LIBVIRT_LXC),y) +LIBVIRT_CONF_OPTS += -Dlogin_shell=enabled -Ddriver_lxc=enabled +LIBVIRT_DEPENDENCIES += lxc +else +LIBVIRT_CONF_OPTS += -Dlogin_shell=disabled -Ddriver_lxc=disabled +endif + # Can't build nss plugin without network ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON)$(BR2_PACKAGE_LIBNSS),yy) LIBVIRT_CONF_OPTS += -Dnss=enabled @@ -152,6 +157,12 @@ else LIBVIRT_CONF_OPTS += -Dpolkit=disabled endif +ifeq ($(BR2_PACKAGE_LIBVIRT_QEMU),y) +LIBVIRT_CONF_OPTS += -Ddriver_qemu=enabled -Dqemu_user=qemu -Dqemu_group=kvm +else +LIBVIRT_CONF_OPTS += -Ddriver_qemu=disabled -Dqemu_user=no -Dqemu_group=no +endif + ifeq ($(BR2_PACKAGE_READLINE),y) LIBVIRT_CONF_OPTS += -Dreadline=enabled LIBVIRT_DEPENDENCIES += readline @@ -214,13 +225,29 @@ define LIBVIRT_PERMISSIONS /var/lib/libvirt/filesystems d 711 root root - - - - - /var/lib/libvirt/images d 711 root root - - - - - /var/lib/libvirt/network d 700 root root - - - - - + /var/lib/libvirt/qemu d 751 qemu kvm - - - - - + /var/lib/libvirt/qemu/autostart d 700 root root - - - - - + /var/lib/libvirt/qemu/networks d 700 root root - - - - - + /var/lib/libvirt/qemu/networks/autostart d 700 root root - - - - - + /var/lib/libvirt/qemu/channel d 755 qemu kvm - - - - - + /var/lib/libvirt/qemu/channel/target d 755 qemu kvm - - - - - + /var/lib/libvirt/qemu/dump d 755 qemu kvm - - - - - + /var/lib/libvirt/qemu/nvram d 755 qemu kvm - - - - - + /var/lib/libvirt/qemu/save d 755 qemu kvm - - - - - + /var/lib/libvirt/qemu/snapshot d 755 qemu kvm - - - - - /var/lib/libvirt/secrets d 700 root root - - - - - /var/lib/libvirt/storage d 755 root root - - - - - /var/lib/libvirt/storage/autostart d 755 root root - - - - - /var/cache/libvirt d 711 root root - - - - - + /var/cache/libvirt/lxc d 750 root root - - - - - + /var/cache/libvirt/qemu d 750 qemu kvm - - - - - + /var/cache/libvirt/qemu/capabilities d 755 root root - - - - - /var/log/libvirt d 700 root root - - - - - + /var/log/libvirt/lxc d 750 root root - - - - - + /var/log/libvirt/qemu d 750 root root - - - - - /var/log/swtpm d 755 root root - - - - - /var/log/swtpm/libvirt d 755 root root - - - - - + /var/log/swtpm/libvirt/qemu d 711 root root - - - - - endef # libvirt may need to create persistent files (e.g. VM definitions) in these @@ -231,14 +258,22 @@ endef define LIBVIRT_CREATE_SYMLINKS $(INSTALL) -m 700 -d $(TARGET_DIR)/etc/libvirt $(INSTALL) -m 755 -d $(TARGET_DIR)/var/lib/libvirt + $(INSTALL) -m 751 -d $(TARGET_DIR)/var/lib/libvirt/qemu $(INSTALL) -m 700 -d $(TARGET_DIR)/var/lib/libvirt/secrets $(INSTALL) -m 755 -d $(TARGET_DIR)/var/lib/libvirt/storage + ln -s -f ../../var/lib/libvirt/qemu $(TARGET_DIR)/etc/libvirt/ ln -s -f ../../var/lib/libvirt/secrets $(TARGET_DIR)/etc/libvirt/ ln -s -f ../../var/lib/libvirt/storage $(TARGET_DIR)/etc/libvirt/ endef LIBVIRT_PRE_INSTALL_TARGET_HOOKS += LIBVIRT_CREATE_SYMLINKS +ifeq ($(BR2_PACKAGE_LIBVIRT_QEMU),y) +define LIBVIRT_USERS + qemu -1 kvm -1 * - - - Libvirt qemu/kvm daemon +endef +endif + ifeq ($(BR2_PACKAGE_LIBVIRT_DAEMON),y) define LIBVIRT_INSTALL_INIT_SYSV $(INSTALL) -D -m 0755 package/libvirt/S91virtlogd $(TARGET_DIR)/etc/init.d/S91virtlogd