Hello Brenda,

It seems this fails in some builds:

ERROR: lib32-qemu-6.2.0-r0 do_package: Didn't find service unit 
'lib32-qemu-guest-agent.service', specified in 
SYSTEMD_SERVICE:lib32-qemu-guest-agent. 

Full log here:
https://autobuilder.yoctoproject.org/typhoon/#/builders/108/builds/2850/steps/12/logs/stdio

On 07/04/2022 15:01:16-0500, Brenda Streiff wrote:
> 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.
> 
> Signed-off-by: Brenda Streiff <brenda.stre...@ni.com>
> ---
>  meta/recipes-devtools/qemu/qemu.inc           | 35 +++++++-
>  .../qemu/qemu/qemu-guest-agent.init           | 84 +++++++++++++++++++
>  .../qemu/qemu/qemu-guest-agent.udev           |  2 +
>  3 files changed, 120 insertions(+), 1 deletion(-)
>  create mode 100644 meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init
>  create mode 100644 meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev
> 
> diff --git a/meta/recipes-devtools/qemu/qemu.inc 
> b/meta/recipes-devtools/qemu/qemu.inc
> index 9f2fa4322e..bd1d1ea010 100644
> --- a/meta/recipes-devtools/qemu/qemu.inc
> +++ b/meta/recipes-devtools/qemu/qemu.inc
> @@ -9,7 +9,7 @@ LICENSE = "GPL-2.0-only & LGPL-2.1-only"
>  RDEPENDS:${PN}-ptest = "bash"
>  
>  require qemu-targets.inc
> -inherit pkgconfig ptest python3-dir
> +inherit pkgconfig ptest python3-dir 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-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch \
>             
> file://0001-vhost-vsock-detach-the-virqueue-element-in-case-of-e.patch \
>             
> file://0002-virtio-net-fix-map-leaking-on-error-during-receive.patch \
> +           file://qemu-guest-agent.init \
> +           file://qemu-guest-agent.udev \
>             "
>  UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
>  
> @@ -127,6 +129,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
> @@ -199,3 +215,20 @@ PACKAGECONFIG[selinux] = 
> "--enable-selinux,--disable-selinux"
>  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 = "${PN}-guest-agent.service"
> diff --git a/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init 
> b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init
> new file mode 100644
> index 0000000000..493da0ef1a
> --- /dev/null
> +++ b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.init
> @@ -0,0 +1,84 @@
> +#!/bin/sh
> +### BEGIN INIT INFO
> +# Provides:          qemu-guest-agent
> +# Required-Start:    $remote_fs $syslog
> +# Required-Stop:     $remote_fs $syslog
> +# Default-Start:     2 3 4 5
> +# Default-Stop:              0 1 6
> +# Short-Description: QEMU Guest Agent
> +### END INIT INFO
> +#
> +# Do not configure this file. Edit /etc/default/qemu-guest-agent
> +#
> +
> +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
> diff --git a/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev 
> b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev
> new file mode 100644
> index 0000000000..8a290abbd3
> --- /dev/null
> +++ b/meta/recipes-devtools/qemu/qemu/qemu-guest-agent.udev
> @@ -0,0 +1,2 @@
> +SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
> +  TAG+="systemd" ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"
> -- 
> 2.20.1
> 

> 
> 
> 


-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#164174): 
https://lists.openembedded.org/g/openembedded-core/message/164174
Mute This Topic: https://lists.openembedded.org/mt/90321828/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to