GNU bug report logs -
#51347
[PATCH] gnu: qemu: Add Guix support to QEMU guest agent.
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 51347 in the body.
You can then email your comments to 51347 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix-patches <at> gnu.org
:
bug#51347
; Package
guix-patches
.
(Sat, 23 Oct 2021 10:09:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Timotej Lazar <timotej.lazar <at> araneo.si>
:
New bug report received and forwarded. Copy sent to
guix-patches <at> gnu.org
.
(Sat, 23 Oct 2021 10:09:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
QEMU guest agent hardcodes paths to /sbin/hwclock and /sbin/shutdown. Patch
the source to try binaries under /run/current-system/profile/sbin first.
* gnu/packages/patches/qemu-fix-agent-paths.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register the patch.
* gnu/packages/virtualization.scm (qemu)[origin]: Apply it.
---
This allows a QEMU host to set the time and shutdown Guix guests. Styled
after the patch from the Nix package:
https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
Thanks!
gnu/local.mk | 1 +
.../patches/qemu-fix-agent-paths.patch | 61 +++++++++++++++++++
gnu/packages/virtualization.scm | 3 +-
3 files changed, 64 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/qemu-fix-agent-paths.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index d432829e2d..9a900e7c30 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1707,6 +1707,7 @@ dist_patch_DATA = \
%D%/packages/patches/qemu-CVE-2021-20203.patch \
%D%/packages/patches/qemu-glibc-2.27.patch \
%D%/packages/patches/qemu-glibc-2.30.patch \
+ %D%/packages/patches/qemu-fix-agent-paths.patch \
%D%/packages/patches/qpdfview-qt515-compat.patch \
%D%/packages/patches/qrcodegen-cpp-make-install.patch \
%D%/packages/patches/qt4-ldflags.patch \
diff --git a/gnu/packages/patches/qemu-fix-agent-paths.patch b/gnu/packages/patches/qemu-fix-agent-paths.patch
new file mode 100644
index 0000000000..22cf883a8d
--- /dev/null
+++ b/gnu/packages/patches/qemu-fix-agent-paths.patch
@@ -0,0 +1,61 @@
+diff --git a/qga/commands-posix.c b/qga/commands-posix.c
+index 75dbaab..b416b03 100644
+--- a/qga/commands-posix.c
++++ b/qga/commands-posix.c
+@@ -84,6 +84,7 @@ static void ga_wait_child(pid_t pid, int *status, Error **errp)
+ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ {
+ const char *shutdown_flag;
++ const char *command;
+ Error *local_err = NULL;
+ pid_t pid;
+ int status;
+@@ -91,10 +92,13 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ slog("guest-shutdown called, mode: %s", mode);
+ if (!has_mode || strcmp(mode, "powerdown") == 0) {
+ shutdown_flag = "-P";
++ command = "shutdown";
+ } else if (strcmp(mode, "halt") == 0) {
+ shutdown_flag = "-H";
++ command = "halt";
+ } else if (strcmp(mode, "reboot") == 0) {
+ shutdown_flag = "-r";
++ command = "reboot";
+ } else {
+ error_setg(errp,
+ "mode is invalid (valid values are: halt|powerdown|reboot");
+@@ -109,6 +113,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+ reopen_fd_to_null(1);
+ reopen_fd_to_null(2);
+
++ /* try Guix’s shutdown/halt/reboot first */
++ char *path = g_strdup_printf("/run/current-system/profile/sbin/%s", command);
++ execle(path, command, (char *)NULL, environ);
++ g_free(path);
++
+ execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
+ "hypervisor initiated shutdown", (char *)NULL, environ);
+ _exit(EXIT_FAILURE);
+@@ -158,10 +167,12 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+ Error *local_err = NULL;
+ struct timeval tv;
+ static const char hwclock_path[] = "/sbin/hwclock";
++ static const char hwclock_path_guix[] = "/run/current-system/profile/sbin/hwclock";
+ static int hwclock_available = -1;
+
+ if (hwclock_available < 0) {
+- hwclock_available = (access(hwclock_path, X_OK) == 0);
++ hwclock_available = (access(hwclock_path_guix, X_OK) == 0) ||
++ (access(hwclock_path, X_OK) == 0);
+ }
+
+ if (!hwclock_available) {
+@@ -207,6 +218,8 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+
+ /* Use '/sbin/hwclock -w' to set RTC from the system time,
+ * or '/sbin/hwclock -s' to set the system time from RTC. */
++ execle(hwclock_path_guix, "hwclock", has_time ? "-w" : "-s",
++ NULL, environ);
+ execle(hwclock_path, "hwclock", has_time ? "-w" : "-s",
+ NULL, environ);
+ _exit(EXIT_FAILURE);
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index fb6e8ebfa3..fd778e21a4 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -159,7 +159,8 @@ (define-public qemu
(base32
"15iw7982g6vc4jy1l9kk1z9sl5bm1bdbwr74y7nvwjs1nffhig7f"))
(patches (search-patches "qemu-CVE-2021-20203.patch"
- "qemu-build-info-manual.patch"))
+ "qemu-build-info-manual.patch"
+ "qemu-fix-agent-paths.patch"))
(modules '((guix build utils)))
(snippet
'(begin
--
2.33.1
Reply sent
to
Ludovic Courtès <ludo <at> gnu.org>
:
You have taken responsibility.
(Sat, 30 Oct 2021 17:23:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Timotej Lazar <timotej.lazar <at> araneo.si>
:
bug acknowledged by developer.
(Sat, 30 Oct 2021 17:23:02 GMT)
Full text and
rfc822 format available.
Message #10 received at 51347-done <at> debbugs.gnu.org (full text, mbox):
Hi Timotej,
Timotej Lazar <timotej.lazar <at> araneo.si> skribis:
> QEMU guest agent hardcodes paths to /sbin/hwclock and /sbin/shutdown. Patch
> the source to try binaries under /run/current-system/profile/sbin first.
>
> * gnu/packages/patches/qemu-fix-agent-paths.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Register the patch.
> * gnu/packages/virtualization.scm (qemu)[origin]: Apply it.
> ---
> This allows a QEMU host to set the time and shutdown Guix guests. Styled
> after the patch from the Nix package:
>
> https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
Neat! I added this bit as a comment at the top of the patch and
committed.
Thanks!
Ludo’.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sun, 28 Nov 2021 12:24:07 GMT)
Full text and
rfc822 format available.
This bug report was last modified 3 years and 208 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.