mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-07-28 07:26:28 +00:00
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:
parent
e53196d176
commit
2ac9dc1c75
@ -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/os-agent/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/pi-bluetooth/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/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-eeprom/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in"
|
||||||
|
@ -16,6 +16,16 @@ CONFIG_VMWARE_VMCI=y
|
|||||||
CONFIG_VMWARE_BALLOON=y
|
CONFIG_VMWARE_BALLOON=y
|
||||||
CONFIG_VMWARE_PVSCSI=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
|
# VirtualBox
|
||||||
CONFIG_VBOXGUEST=m
|
CONFIG_VBOXGUEST=m
|
||||||
|
|
||||||
|
@ -124,6 +124,7 @@ BR2_PACKAGE_HASSIO_MACHINE="qemux86-64"
|
|||||||
BR2_PACKAGE_OS_AGENT=y
|
BR2_PACKAGE_OS_AGENT=y
|
||||||
BR2_PACKAGE_OS_AGENT_BOARD="Ova"
|
BR2_PACKAGE_OS_AGENT_BOARD="Ova"
|
||||||
BR2_PACKAGE_QEMU_GUEST_AGENT=y
|
BR2_PACKAGE_QEMU_GUEST_AGENT=y
|
||||||
|
BR2_PACKAGE_LXD_GUEST_AGENT=y
|
||||||
BR2_PACKAGE_RPI_RF_MOD=y
|
BR2_PACKAGE_RPI_RF_MOD=y
|
||||||
BR2_PACKAGE_RTL88X2BU=y
|
BR2_PACKAGE_RTL88X2BU=y
|
||||||
BR2_PACKAGE_RTL8821CU=y
|
BR2_PACKAGE_RTL8821CU=y
|
||||||
|
9
buildroot-external/package/lxd-guest-agent/Config.in
Normal file
9
buildroot-external/package/lxd-guest-agent/Config.in
Normal 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
|
39
buildroot-external/package/lxd-guest-agent/lxd-agent-setup
Executable file
39
buildroot-external/package/lxd-guest-agent/lxd-agent-setup
Executable 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}"
|
17
buildroot-external/package/lxd-guest-agent/lxd-agent.service
Normal file
17
buildroot-external/package/lxd-guest-agent/lxd-agent.service
Normal 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
|
@ -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))
|
@ -3,6 +3,7 @@ Description=QEMU Guest Agent
|
|||||||
After=syslog.target network.target
|
After=syslog.target network.target
|
||||||
ConditionVirtualization=|kvm
|
ConditionVirtualization=|kvm
|
||||||
ConditionVirtualization=|qemu
|
ConditionVirtualization=|qemu
|
||||||
|
ConditionPathExists=!/dev/virtio-ports/org.linuxcontainers.lxd
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=/usr/libexec/qemu-ga -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0
|
ExecStart=/usr/libexec/qemu-ga -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user