qemu: split out qemu-guest-agent, add startup scripts

Split out the QEMU guest agent into a separate package. The agent is
intended to be installed within a QEMU VM guest where a user is likely
to not want to have the rest of the QEMU installation within it.

Additionally, an initscript, udev rules file, and systemd unit file are
added to the package so that the guest agent can start automatically;
the former two come from Debian's packaging for qemu-guest-agent.

(From OE-Core rev: d62fd31c70a9161596594f43c58c73898bfcf52c)

Signed-off-by: Brenda Streiff <brenda.streiff@ni.com>
Signed-off-by: Clément Péron <peron.clem@gmail.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Clément Péron
2023-03-10 19:54:22 +01:00
committed by Richard Purdie
parent 7c2b42695d
commit 1c01cbaed5
3 changed files with 111 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ LICENSE = "GPL-2.0-only & LGPL-2.1-only"
RDEPENDS:${PN}-ptest = "bash"
require qemu-targets.inc
inherit pkgconfig ptest
inherit pkgconfig ptest update-rc.d systemd
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=8c5efda6cf1e1b03dcfd0e6c0d271c7f"
@@ -32,6 +32,8 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://0001-configure-Fix-check-tcg-not-executing-any-tests.patch \
file://0001-Revert-linux-user-add-more-compat-ioctl-definitions.patch \
file://0002-Revert-linux-user-fix-compat-with-glibc-2.36-sys-mou.patch \
file://qemu-guest-agent.init \
file://qemu-guest-agent.udev \
"
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
@@ -132,6 +134,20 @@ do_configure[cleandirs] += "${B}"
do_install () {
export STRIP=""
oe_runmake 'DESTDIR=${D}' install
# If we built the guest agent, also install startup/udev rules
if [ -e "${D}${bindir}/qemu-ga" ]; then
install -d ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/qemu-guest-agent.init ${D}${sysconfdir}/init.d/qemu-guest-agent
sed -i 's:@bindir@:${bindir}:' ${D}${sysconfdir}/init.d/qemu-guest-agent
install -d ${D}${sysconfdir}/udev/rules.d/
install -m 0644 ${WORKDIR}/qemu-guest-agent.udev ${D}${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${S}/contrib/systemd/qemu-guest-agent.service ${D}${systemd_unitdir}/system
sed -i -e 's,-/usr/bin/,-${bindir}/,g' ${D}${systemd_unitdir}/system/qemu-guest-agent.service
fi
}
# The following fragment will create a wrapper for qemu-mips user emulation
@@ -210,3 +226,20 @@ PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack,"
INSANE_SKIP:${PN} = "arch"
FILES:${PN} += "${datadir}/icons"
# Put the guest agent in a separate package
PACKAGES =+ "${PN}-guest-agent"
SUMMARY:${PN}-guest-agent = "QEMU guest agent"
FILES:${PN}-guest-agent += " \
${bindir}/qemu-ga \
${sysconfdir}/udev/rules.d/60-qemu-guest-agent.rules \
${sysconfdir}/init.d/qemu-guest-agent \
${systemd_unitdir}/system/qemu-guest-agent.service \
"
INITSCRIPT_PACKAGES = "${PN}-guest-agent"
INITSCRIPT_NAME:${PN}-guest-agent = "qemu-guest-agent"
INITSCRIPT_PARAMS:${PN}-guest-agent = "defaults"
SYSTEMD_PACKAGES = "${PN}-guest-agent"
SYSTEMD_SERVICE:${PN}-guest-agent = "qemu-guest-agent.service"

View File

@@ -0,0 +1,75 @@
# SPDX-License-Identifier: GPL-2.0-only
# Initially written by: Michael Tokarev <mjt@tls.msk.ru>
# For QEMU Debian downstream package
set -e
. /etc/init.d/functions
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="QEMU Guest Agent"
NAME=qemu-ga
DAEMON=@bindir@/$NAME
PIDFILE=/var/run/$NAME.pid
# config
DAEMON_ARGS=""
# default transport
TRANSPORT=virtio-serial:/dev/virtio-ports/org.qemu.guest_agent.0
NO_START=0
test ! -r /etc/default/qemu-guest-agent || . /etc/default/qemu-guest-agent
test "$NO_START" = "0" || exit 0
test -x "$DAEMON" || exit 0
#
# Function that checks whenever system has necessary environment
# It also splits $TRANSPORT into $method and $path
#
do_check_transport() {
method=${TRANSPORT%%:*};
path=${TRANSPORT#*:}
case "$method" in
virtio-serial | isa-serial)
if [ ! -e "$path" ]; then
echo "$NAME: transport endpoint not found, not starting"
return 1
fi
;;
esac
}
case "$1" in
start)
do_check_transport || exit 0
echo -n "Starting $DESC: "
start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
$DAEMON_ARGS -d -m "$method" -p "$path"
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
echo "$NAME."
;;
status)
status "$DAEMON"
exit $?
;;
restart|force-reload)
do_check_transport || exit 0
echo -n "Restarting $DESC: "
start-stop-daemon -K -x "$DAEMON" -p $PIDFILE
sleep 1
start-stop-daemon -S -p $PIDFILE -x "$DAEMON" -- \
$DAEMON_ARGS -d -m "$method" -p "$path"
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|status|restart|force-reload}" >&2
exit 1
;;
esac
exit 0

View File

@@ -0,0 +1,2 @@
SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
TAG+="systemd", ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"