Add LXD VM Guest Agent Support (#2145)

* Add LXD VM Guest Agent Support

* Add systemd patch, remove udev rules, change to kernel modules, fix linter

* Remove systemd patch, add conditionals to qemu-guest and lxd-agent

* Update buildroot-external/package/qemu-guest-agent/qemu-guest.service

Co-authored-by: Stefan Agner <stefan@agner.ch>
This commit is contained in:
Bryan York
2022-10-02 01:06:56 -07:00
committed by GitHub
parent e53196d176
commit 2ac9dc1c75
8 changed files with 97 additions and 0 deletions

View File

@@ -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

View File

@@ -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}"

View File

@@ -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

View File

@@ -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))

View File

@@ -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