diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in index 4aaf2bbc6eb..1962c6a60c4 100644 --- a/buildroot-external/Config.in +++ b/buildroot-external/Config.in @@ -8,6 +8,7 @@ source "$BR2_EXTERNAL_HASSOS_PATH/package/khadas-boot/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/os-agent/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/pi-bluetooth/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/qemu-guest-agent/Config.in" +source "$BR2_EXTERNAL_HASSOS_PATH/package/lxd-guest-agent/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-eeprom/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in" source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in" diff --git a/buildroot-external/board/pc/ova/kernel.config b/buildroot-external/board/pc/ova/kernel.config index 95e4b380bc2..e6139c841d4 100644 --- a/buildroot-external/board/pc/ova/kernel.config +++ b/buildroot-external/board/pc/ova/kernel.config @@ -16,6 +16,16 @@ CONFIG_VMWARE_VMCI=y CONFIG_VMWARE_BALLOON=y CONFIG_VMWARE_PVSCSI=y +# These options are for LXD Guest Support +CONFIG_NET_9P=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_9P_FS=m +CONFIG_9P_FS_POSIX_ACL=m +CONFIG_PCI=y +CONFIG_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m +CONFIG_VHOST_VSOCK=m + # VirtualBox CONFIG_VBOXGUEST=m diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 2fcf54d6d57..7e95b29937c 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -123,6 +123,7 @@ BR2_PACKAGE_HASSIO_ARCH="amd64" BR2_PACKAGE_HASSIO_MACHINE="qemux86-64" BR2_PACKAGE_OS_AGENT=y BR2_PACKAGE_QEMU_GUEST_AGENT=y +BR2_PACKAGE_LXD_GUEST_AGENT=y BR2_PACKAGE_RPI_RF_MOD=y BR2_PACKAGE_RTL88X2BU=y BR2_PACKAGE_RTL8821CU=y diff --git a/buildroot-external/package/lxd-guest-agent/Config.in b/buildroot-external/package/lxd-guest-agent/Config.in new file mode 100644 index 00000000000..f5a6a1e7133 --- /dev/null +++ b/buildroot-external/package/lxd-guest-agent/Config.in @@ -0,0 +1,9 @@ +config BR2_PACKAGE_LXD_GUEST_AGENT + bool "LXD 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 + help + LXD guest agent for LXD based virtualisations diff --git a/buildroot-external/package/lxd-guest-agent/lxd-agent-setup b/buildroot-external/package/lxd-guest-agent/lxd-agent-setup new file mode 100755 index 00000000000..42e16aedb9f --- /dev/null +++ b/buildroot-external/package/lxd-guest-agent/lxd-agent-setup @@ -0,0 +1,39 @@ +#!/bin/sh +set -eu +PREFIX="/run/lxd_agent" + +# Functions. +mount_virtiofs() { + mount -t virtiofs config "${PREFIX}/.mnt" >/dev/null 2>&1 +} + +mount_9p() { + /sbin/modprobe 9pnet_virtio >/dev/null 2>&1 || true + /bin/mount -t 9p config "${PREFIX}/.mnt" -o access=0,trans=virtio >/dev/null 2>&1 +} + +fail() { + umount -l "${PREFIX}" >/dev/null 2>&1 || true + rmdir "${PREFIX}" >/dev/null 2>&1 || true + echo "${1}" + exit 1 +} + +# Setup the mount target. +umount -l "${PREFIX}" >/dev/null 2>&1 || true +mkdir -p "${PREFIX}" +mount -t tmpfs tmpfs "${PREFIX}" -o mode=0700,size=50M +mkdir -p "${PREFIX}/.mnt" + +# Try virtiofs first. +mount_virtiofs || mount_9p || fail "Couldn't mount virtiofs or 9p, failing." + +# Copy the data. +cp -Ra "${PREFIX}/.mnt/"* "${PREFIX}" + +# Unmount the temporary mount. +umount "${PREFIX}/.mnt" +rmdir "${PREFIX}/.mnt" + +# Fix up permissions. +chown -R root:root "${PREFIX}" diff --git a/buildroot-external/package/lxd-guest-agent/lxd-agent.service b/buildroot-external/package/lxd-guest-agent/lxd-agent.service new file mode 100644 index 00000000000..0e7314a961a --- /dev/null +++ b/buildroot-external/package/lxd-guest-agent/lxd-agent.service @@ -0,0 +1,17 @@ +[Unit] +Description=LXD - agent +After=syslog.target network.target +ConditionPathExists=/dev/virtio-ports/org.linuxcontainers.lxd + +[Service] +Type=notify +WorkingDirectory=-/run/lxd_agent +ExecStartPre=/usr/lib/systemd/lxd-agent-setup +ExecStart=/run/lxd_agent/lxd-agent +Restart=on-failure +RestartSec=5s +StartLimitInterval=60 +StartLimitBurst=10 + +[Install] +WantedBy=multi-user.target diff --git a/buildroot-external/package/lxd-guest-agent/lxd-guest-agent.mk b/buildroot-external/package/lxd-guest-agent/lxd-guest-agent.mk new file mode 100644 index 00000000000..87cb5000462 --- /dev/null +++ b/buildroot-external/package/lxd-guest-agent/lxd-guest-agent.mk @@ -0,0 +1,19 @@ +################################################################################ +# +# lxd-guest-agent +# +################################################################################ + +LXD_GUEST_AGENT_DEPENDENCIES = host-pkgconf + +define LXD_GUEST_AGENT_INSTALL_INIT_SYSTEMD + $(INSTALL) -D -m 644 $(LXD_GUEST_AGENT_PKGDIR)/lxd-agent.service \ + $(TARGET_DIR)/usr/lib/systemd/system/lxd-agent.service + $(INSTALL) -D -m 755 $(LXD_GUEST_AGENT_PKGDIR)/lxd-agent-setup \ + $(TARGET_DIR)/usr/lib/systemd/lxd-agent-setup + $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants + ln -fs /usr/lib/systemd/system/lxd-agent.service \ + $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/lxd-agent.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 index 87e7ab81f0c..6ac807e137d 100644 --- a/buildroot-external/package/qemu-guest-agent/qemu-guest.service +++ b/buildroot-external/package/qemu-guest-agent/qemu-guest.service @@ -3,6 +3,7 @@ Description=QEMU Guest Agent After=syslog.target network.target ConditionVirtualization=|kvm ConditionVirtualization=|qemu +ConditionPathExists=!/dev/virtio-ports/org.linuxcontainers.lxd [Service] ExecStart=/usr/libexec/qemu-ga -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0