commit:     5c1c154ef90eb1815542cbcbc38f05f54a8d5820
Author:     Aisha Tammy <gentoo <AT> aisha <DOT> cc>
AuthorDate: Sun May 15 15:52:52 2022 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Sun May 15 15:53:02 2022 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=5c1c154e

sys-apps/qemu-openrc: initial import

Signed-off-by: Aisha Tammy <gentoo <AT> aisha.cc>

 sys-apps/qemu-openrc/Manifest                      |  1 +
 .../files/qemu-openrc-0.10.0-guest-agent.patch     | 87 ++++++++++++++++++++++
 sys-apps/qemu-openrc/metadata.xml                  |  8 ++
 sys-apps/qemu-openrc/qemu-openrc-0.10.0.ebuild     | 32 ++++++++
 sys-apps/qemu-openrc/qemu-openrc-9999.ebuild       | 32 ++++++++
 5 files changed, 160 insertions(+)

diff --git a/sys-apps/qemu-openrc/Manifest b/sys-apps/qemu-openrc/Manifest
new file mode 100644
index 000000000..e8dc7b35a
--- /dev/null
+++ b/sys-apps/qemu-openrc/Manifest
@@ -0,0 +1 @@
+DIST qemu-openrc-0.10.0.tar.gz 8367 BLAKE2B 
34447e04c1a81fa13bddf2f4a742059beea6eeb0025ec32219ef3718a0ff62b98a3d0c39083068f52362eb6fe3eb105338febdd36ea696f144a6b2ce583b3441
 SHA512 
cdcf51dc59dbca96102c1b73032a726a44cb62c0c93a42adb9b6806609a0fa24bf8dde4814ed5010de63d54fde75f661bb9f5245d85e28de08cdba08d538c959

diff --git a/sys-apps/qemu-openrc/files/qemu-openrc-0.10.0-guest-agent.patch 
b/sys-apps/qemu-openrc/files/qemu-openrc-0.10.0-guest-agent.patch
new file mode 100644
index 000000000..e030870b4
--- /dev/null
+++ b/sys-apps/qemu-openrc/files/qemu-openrc-0.10.0-guest-agent.patch
@@ -0,0 +1,87 @@
+From 6928925968faf8c8c07e6e955b6864e11f614f77 Mon Sep 17 00:00:00 2001
+From: Aisha Tammy <[email protected]>
+Date: Mon, 24 Jan 2022 13:50:37 +0000
+Subject: [PATCH] allow shutdown via guest agent socket
+
+This allows shutdown events to be sent
+via qemu guest agent, which works for
+BSD agents which don't handle ACPI events
+correctly.
+
+Tested with OpenBSD 7.0.
+
+Signed-off-by: Aisha Tammy <[email protected]>
+---
+ qemu.initd | 31 +++++++++++++++++++++++++++----
+ 1 file changed, 27 insertions(+), 4 deletions(-)
+
+diff --git a/qemu.initd b/qemu.initd
+index a80d291..8756080 100644
+--- a/qemu.initd
++++ b/qemu.initd
+@@ -25,6 +25,7 @@ VM_NAME="${RC_SVCNAME#qemu.}"
+ : ${vnc_listen:=0.0.0.0}
+ : ${hugepages_path:=/dev/hugepages}
+ : ${monitor_socket:=/run/qemu/${VM_NAME}/monitor.sock}
++: ${guest_agent_socket:=/run/qemu/${VM_NAME}/ga.sock}
+ : ${extra_args:=}
+ 
+ name="VM $VM_NAME"
+@@ -53,7 +54,9 @@ command_args="
+       -vga $vga
+       -device virtio-rng-pci
+       -device virtio-scsi-pci,id=scsi
+-      -monitor unix:$monitor_socket,server,nowait"
++      -monitor unix:$monitor_socket,server,nowait
++      -chardev socket,path=$guest_agent_socket,server,nowait,id=qga0
++      -device isa-serial,chardev=qga0"
+ command_background='yes'
+ 
+ start_stop_daemon_args="
+@@ -125,10 +128,22 @@ stop() {
+ 
+       ebegin "Stopping $name"
+ 
++      if is_running && qemush "${guest_agent_socket}" "{'execute': 
'guest-exec', 'arguments': {'path': '/sbin/halt', 'arg': ['-p']}}"; then
++              count="$shutdown_timeout"
++
++              printf "   Waiting $count seconds for VM shutdown via guest 
agent "
++              while is_running && [ $count -gt 0 ]; do
++                      sleep 1
++                      printf '.'
++                      count=$(( count - 1 ))
++              done
++              printf '\n'
++      fi
++
+       if is_running && qemush 'system_powerdown'; then
+               count="$shutdown_timeout"
+ 
+-              printf "   Waiting $count seconds for VM shutdown "
++              printf "   Waiting $count seconds for VM shutdown via ACPI"
+               while is_running && [ $count -gt 0 ]; do
+                       sleep 1
+                       printf '.'
+@@ -281,12 +296,20 @@ check_bridge() {
+ 
+ qemush() {
+       local IFS=$'\n'
+-      printf "%b\n" "$*" | socat - "UNIX-CONNECT:${monitor_socket}" 
1>/dev/null
++      socket_path="${monitor_socket}"
++      case "$1" in
++              /*) socket_path="$1"; shift;
++      esac
++      printf "%b\n" "$*" | socat - "UNIX-CONNECT:${socket_path}" 1>/dev/null
+ }
+ 
+ qemush_show() {
+       local IFS=$'\n'
+-      printf "%b\n" "$*" | socat - "UNIX-CONNECT:${monitor_socket}" | tail -n 
+3 | head -n -1
++      socket_path="${monitor_socket}"
++      case "$1" in
++              /*) socket_path="$1"; shift;
++      esac
++      printf "%b\n" "$*" | socat - "UNIX-CONNECT:${socket_path}" | tail -n +3 
| head -n -1
+ }
+ 
+ gen_macaddr() {

diff --git a/sys-apps/qemu-openrc/metadata.xml 
b/sys-apps/qemu-openrc/metadata.xml
new file mode 100644
index 000000000..65ac1f205
--- /dev/null
+++ b/sys-apps/qemu-openrc/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person">
+               <email>[email protected]</email>
+               <name>Aisha Tammy</name>
+       </maintainer>
+</pkgmetadata>

diff --git a/sys-apps/qemu-openrc/qemu-openrc-0.10.0.ebuild 
b/sys-apps/qemu-openrc/qemu-openrc-0.10.0.ebuild
new file mode 100644
index 000000000..9db2cfd8f
--- /dev/null
+++ b/sys-apps/qemu-openrc/qemu-openrc-0.10.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="OpenRC init script for QEMU/KVM"
+HOMEPAGE="https://github.com/jirutka/qemu-openrc";
+
+if [[ ${PV} == 9999 ]]; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/jirutka/qemu-openrc";
+else
+       SRC_URI="https://github.com/jirutka/qemu-openrc/archive/v${PV}.tar.gz 
-> ${P}.tar.gz"
+       KEYWORDS="~amd64"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-misc/socat"
+
+PATCHES=( "${FILESDIR}/qemu-openrc-0.10.0-guest-agent.patch")
+
+src_compile() {
+       :
+}
+
+src_install() {
+       newinitd qemu.initd qemu
+       newconfd qemu.confd qemu
+       dobin qemush
+}

diff --git a/sys-apps/qemu-openrc/qemu-openrc-9999.ebuild 
b/sys-apps/qemu-openrc/qemu-openrc-9999.ebuild
new file mode 100644
index 000000000..9db2cfd8f
--- /dev/null
+++ b/sys-apps/qemu-openrc/qemu-openrc-9999.ebuild
@@ -0,0 +1,32 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="OpenRC init script for QEMU/KVM"
+HOMEPAGE="https://github.com/jirutka/qemu-openrc";
+
+if [[ ${PV} == 9999 ]]; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/jirutka/qemu-openrc";
+else
+       SRC_URI="https://github.com/jirutka/qemu-openrc/archive/v${PV}.tar.gz 
-> ${P}.tar.gz"
+       KEYWORDS="~amd64"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-misc/socat"
+
+PATCHES=( "${FILESDIR}/qemu-openrc-0.10.0-guest-agent.patch")
+
+src_compile() {
+       :
+}
+
+src_install() {
+       newinitd qemu.initd qemu
+       newconfd qemu.confd qemu
+       dobin qemush
+}

Reply via email to