From 4c9a4aadc835876cb1568e01f54d19be8671346c Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 12 Dec 2019 10:44:41 +0100 Subject: [PATCH] Add qemu guest agent (#505) * Add qemu guest agent * Fix make file * Fix targets * Convert it to autobuild * Fix paths * fix target * Fix options * Fix startup * Update kernel * Fix state dir * Only load on kvm --- buildroot-external/Config.in | 1 + .../board/intel/ova/kernel.config | 5 + buildroot-external/configs/ova_defconfig | 1 + .../package/qemu-guest-agent/Config.in | 9 ++ .../qemu-guest-agent/qemu-guest-agent.mk | 110 ++++++++++++++++++ .../qemu-guest-agent/qemu-guest.service | 11 ++ 6 files changed, 137 insertions(+) create mode 100644 buildroot-external/package/qemu-guest-agent/Config.in create mode 100644 buildroot-external/package/qemu-guest-agent/qemu-guest-agent.mk create mode 100644 buildroot-external/package/qemu-guest-agent/qemu-guest.service diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in index eb56fe71b..e57911006 100644 --- a/buildroot-external/Config.in +++ b/buildroot-external/Config.in @@ -4,3 +4,4 @@ source "$BR2_EXTERNAL_HASSOS_PATH/package/apparmor/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-bcm43xx/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-rtl8723/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/hardkernel-boot/Config.in" +source "$BR2_EXTERNAL_HASSOS_PATH/package/qemu-guest-agent/Config.in" diff --git a/buildroot-external/board/intel/ova/kernel.config b/buildroot-external/board/intel/ova/kernel.config index 72e2e1300..c0806dc73 100644 --- a/buildroot-external/board/intel/ova/kernel.config +++ b/buildroot-external/board/intel/ova/kernel.config @@ -5,6 +5,7 @@ CONFIG_VMWARE_PVSCSI=y CONFIG_VMWARE_VMCI_VSOCKETS=y CONFIG_VMWARE_VMCI=y CONFIG_VMWARE_BALLOON=y +CONFIG_VMWARE_PVSCSI=y CONFIG_VIRTIO=y CONFIG_VIRTIO_PCI=y @@ -12,6 +13,9 @@ CONFIG_VIRTIO_NET=y CONFIG_VIRTIO_BALLOON=m CONFIG_VIRTIO_INPUT=m CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_CONSOLE=m +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_SCSI_VIRTIO=y CONFIG_HW_RANDOM_VIRTIO=y CONFIG_SCSI_LOWLEVEL=y @@ -27,4 +31,5 @@ CONFIG_HYPERV_BALLOON=m CONFIG_HYPERV_KEYBOARD=m CONFIG_HYPERV_STORAGE=y CONFIG_HYPERV_NET=y +CONFIG_HYPERV_VSOCKETS=m CONFIG_FB_HYPERV=y diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 8190d1d72..bbbd7a3a0 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -56,6 +56,7 @@ BR2_PACKAGE_TINI=y BR2_PACKAGE_DOCKER_ENGINE=y BR2_PACKAGE_DOCKER_CLI=y BR2_PACKAGE_OPENVMTOOLS=y +BR2_PACKAGE_QEMU_GUEST_AGENT=y BR2_PACKAGE_RAUC=y BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_RNG_TOOLS=y diff --git a/buildroot-external/package/qemu-guest-agent/Config.in b/buildroot-external/package/qemu-guest-agent/Config.in new file mode 100644 index 000000000..8ec346511 --- /dev/null +++ b/buildroot-external/package/qemu-guest-agent/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_QEMU_GUEST_AGENT + depends on BR2_USE_MMU # libglib2 + depends on BR2_USE_WCHAR # libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2 + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_ZLIB + bool "QEMU Guest Agent" + help + QEMU guest agent for qemu based virtualisations \ No newline at end of file diff --git a/buildroot-external/package/qemu-guest-agent/qemu-guest-agent.mk b/buildroot-external/package/qemu-guest-agent/qemu-guest-agent.mk new file mode 100644 index 000000000..713ce9605 --- /dev/null +++ b/buildroot-external/package/qemu-guest-agent/qemu-guest-agent.mk @@ -0,0 +1,110 @@ +################################################################################ +# +# qemu-guest-agent +# +################################################################################ + +QEMU_GUEST_AGENT_VERSION = 3.1.1.1 +QEMU_GUEST_AGENT_SOURCE = qemu-$(QEMU_GUEST_AGENT_VERSION).tar.xz +QEMU_GUEST_AGENT_SITE = http://download.qemu.org +QEMU_GUEST_AGENT_LICENSE = GPL-2.0, LGPL-2.1, MIT, BSD-3-Clause, BSD-2-Clause, Others/BSD-1c +QEMU_GUEST_AGENT_LICENSE_FILES = COPYING COPYING.LIB +# NOTE: there is no top-level license file for non-(L)GPL licenses; +# the non-(L)GPL license texts are specified in the affected +# individual source files. + +QEMU_GUEST_AGENT_DEPENDENCIES = host-pkgconf libglib2 zlib + +# Need the LIBS variable because librt and libm are +# not automatically pulled. :-( +QEMU_GUEST_AGENT_LIBS = -lrt -lm + +QEMU_GUEST_AGENT_VARS = LIBTOOL=$(HOST_DIR)/bin/libtool + +QEMU_GUEST_AGENT_OPTS = --enable-guest-agent + +# Override CPP, as it expects to be able to call it like it'd +# call the compiler. +define QEMU_GUEST_AGENT_CONFIGURE_CMDS + ( cd $(@D); \ + LIBS='$(QEMU_GUEST_AGENT_LIBS)' \ + $(TARGET_CONFIGURE_OPTS) \ + $(TARGET_CONFIGURE_ARGS) \ + CPP="$(TARGET_CC) -E" \ + $(QEMU_GUEST_AGENT_VARS) \ + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --cross-prefix=$(TARGET_CROSS) \ + --audio-drv-list= \ + --disable-kvm \ + --disable-linux-user \ + --disable-linux-aio \ + --disable-xen \ + --disable-docs \ + --disable-curl \ + --disable-gnutls \ + --disable-gtk \ + --disable-vte \ + --disable-vnc-jpeg \ + --disable-opengl \ + --disable-usb-redir \ + --disable-sdl \ + --disable-system \ + --disable-user \ + --disable-guest-agent \ + --disable-nettle \ + --disable-gcrypt \ + --disable-curses \ + --disable-vnc \ + --disable-virtfs \ + --disable-brlapi \ + --disable-fdt \ + --disable-bluez \ + --disable-kvm \ + --disable-rdma \ + --disable-vde \ + --disable-netmap \ + --disable-cap-ng \ + --disable-attr \ + --disable-vhost-net \ + --disable-spice \ + --disable-rbd \ + --disable-libiscsi \ + --disable-libnfs \ + --disable-smartcard \ + --disable-libusb \ + --disable-usb-redir \ + --disable-lzo \ + --disable-snappy \ + --disable-bzip2 \ + --disable-seccomp \ + --disable-coroutine-pool \ + --disable-glusterfs \ + --disable-tpm \ + --disable-numa \ + --disable-blobs \ + --disable-capstone \ + --disable-tools \ + --disable-tcg-interpreter \ + $(QEMU_GUEST_AGENT_OPTS) \ + ) +endef + +define QEMU_GUEST_AGENT_BUILD_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) +endef + +define QEMU_GUEST_AGENT_INSTALL_TARGET_CMDS + $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(QEMU_GUEST_AGENT_MAKE_ENV) DESTDIR=$(TARGET_DIR) install +endef + +define QEMU_GUEST_AGENT_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(QEMU_GUEST_AGENT_PKGDIR)/qemu-guest.service \ + $(TARGET_DIR)/usr/lib/systemd/system/qemu-guest.service + $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + ln -fs ../../../../usr/lib/systemd/system/qemu-guest.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/qemu-guest.service +endef + +$(eval $(generic-package)) diff --git a/buildroot-external/package/qemu-guest-agent/qemu-guest.service b/buildroot-external/package/qemu-guest-agent/qemu-guest.service new file mode 100644 index 000000000..7888dcb4f --- /dev/null +++ b/buildroot-external/package/qemu-guest-agent/qemu-guest.service @@ -0,0 +1,11 @@ +[Unit] +Description=QEMU Guest Agent +After=syslog.target network.target +ConditionVirtualization=kvm + +[Service] +ExecStart=/usr/bin/qemu-ga -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0 +Restart=on-failure + +[Install] +WantedBy=multi-user.target