* [bug#51573] [PATCH] gnu: virtualization: Add qemu-guest-agent service.
@ 2021-11-02 19:06 Timotej Lazar
2021-11-12 22:41 ` bug#51573: " Ludovic Courtès
0 siblings, 1 reply; 2+ messages in thread
From: Timotej Lazar @ 2021-11-02 19:06 UTC (permalink / raw)
To: 51573; +Cc: Timotej Lazar
* gnu/services/virtualization.scm (<qemu-guest-agent-configuration>): New
record.
(qemu-guest-agent-shepherd-service): New procedure.
(qemu-guest-agent-service-type): New variable.
* doc/guix.texi (Virtualization Services): Document it.
---
doc/guix.texi | 47 ++++++++++++++++++++++++++++++++
gnu/services/virtualization.scm | 48 ++++++++++++++++++++++++++++++++-
2 files changed, 94 insertions(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index ea1973f02c..5e6a6dea0e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -30042,6 +30042,53 @@ Return the name of @var{platform}---a string such as @code{"arm"}.
@end deffn
+@subsubheading QEMU guest agent
+
+@cindex emulation
+
+The QEMU guest agent provides control over the emulated system to the
+host. The @code{qemu-guest-agent} service runs the agent on Guix
+guests. To control the agent from the host, open a socket by invoking
+@code{qemu} with the following arguments:
+
+@example
+qemu-system-x86_64 \
+ -chardev socket,path=/tmp/qga.sock,server=on,wait=off,id=qga0 \
+ -device virtio-serial \
+ -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
+ ...
+@end example
+
+This creates a socket at @file{/tmp/qga.sock} on the host. Once the
+guest agent is running, you can issue commands with @code{socat}:
+
+@example
+$ guix shell socat -- socat unix-connect:/tmp/qga.sock stdio
+@{"execute": "guest-get-host-name"@}
+@{"return": @{"host-name": "guix"@}@}
+@end example
+
+See @url{https://wiki.qemu.org/Features/GuestAgent,QEMU guest agent
+documentation} for more options and commands.
+
+@defvr {Scheme Variable} qemu-guest-agent-service-type
+Service type for the QEMU guest agent service.
+@end defvr
+
+@deftp {Data Type} qemu-guest-agent-configuration
+Configuration for the @code{qemu-guest-agent} service.
+
+@table @asis
+@item @code{qemu} (default: @code{qemu-minimal})
+The qemu package to use.
+
+@item @code{device} (default: @code{""})
+Path to device or socket the agent uses to communicate with the host.
+If empty, QEMU uses a default path.
+@end table
+@end deftp
+
+
@subsubheading The Hurd in a Virtual Machine
@cindex @code{hurd}
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index bca5f56b87..1a5744ffbf 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2017 Ryan Moe <ryan.moe@gmail.com>
;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -82,7 +83,11 @@ (define-module (gnu services virtualization)
qemu-binfmt-configuration
qemu-binfmt-configuration?
- qemu-binfmt-service-type))
+ qemu-binfmt-service-type
+
+ qemu-guest-agent-configuration
+ qemu-guest-agent-configuration?
+ qemu-guest-agent-service-type))
(define (uglify-field-name field-name)
(let ((str (symbol->string field-name)))
@@ -847,6 +852,47 @@ (define qemu-binfmt-service-type
compiled for other architectures using QEMU and the @code{binfmt_misc}
functionality of the kernel Linux.")))
+\f
+;;;
+;;; QEMU guest agent service.
+;;;
+
+(define-configuration qemu-guest-agent-configuration
+ (qemu
+ (package qemu-minimal)
+ "QEMU package.")
+ (device
+ (string "")
+ "Path to device or socket used to communicate with the host. If not
+specified, the QEMU default path is used."))
+
+(define qemu-guest-agent-shepherd-service
+ (match-lambda
+ (($ <qemu-guest-agent-configuration> qemu device)
+ (list
+ (shepherd-service
+ (provision '(qemu-guest-agent))
+ (documentation "Run the QEMU guest agent.")
+ (start #~(make-forkexec-constructor
+ `(,(string-append #$qemu "/bin/qemu-ga") "--daemon"
+ "--pidfile=/var/run/qemu-ga.pid"
+ "--statedir=/var/run"
+ ,@(if #$device
+ (list (string-append "--path=" #$device))
+ '()))
+ #:pid-file "/var/run/qemu-ga.pid"
+ #:log-file "/var/log/qemu-ga.log"))
+ (stop #~(make-kill-destructor)))))))
+
+(define qemu-guest-agent-service-type
+ (service-type
+ (name 'qemu-guest-agent)
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ qemu-guest-agent-shepherd-service)))
+ (default-value (qemu-guest-agent-configuration))
+ (description "Run the QEMU guest agent.")))
+
\f
;;;
;;; Secrets for guest VMs.
--
2.33.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* bug#51573: [PATCH] gnu: virtualization: Add qemu-guest-agent service.
2021-11-02 19:06 [bug#51573] [PATCH] gnu: virtualization: Add qemu-guest-agent service Timotej Lazar
@ 2021-11-12 22:41 ` Ludovic Courtès
0 siblings, 0 replies; 2+ messages in thread
From: Ludovic Courtès @ 2021-11-12 22:41 UTC (permalink / raw)
To: Timotej Lazar; +Cc: 51573-done
[-- Attachment #1: Type: text/plain, Size: 475 bytes --]
Hi,
Timotej Lazar <timotej.lazar@araneo.si> skribis:
> * gnu/services/virtualization.scm (<qemu-guest-agent-configuration>): New
> record.
> (qemu-guest-agent-shepherd-service): New procedure.
> (qemu-guest-agent-service-type): New variable.
> * doc/guix.texi (Virtualization Services): Document it.
Nice. Do you think we could have a simple test under (gnu tests
virtualization) for this?
Applied with the cosmetic changes below.
Thanks!
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1140 bytes --]
diff --git a/doc/guix.texi b/doc/guix.texi
index c0dfb2e5e2..7e54b5f75e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -30060,14 +30060,14 @@ Return the name of @var{platform}---a string such as @code{"arm"}.
@end deffn
-@subsubheading QEMU guest agent
+@subsubheading QEMU Guest Agent
@cindex emulation
The QEMU guest agent provides control over the emulated system to the
host. The @code{qemu-guest-agent} service runs the agent on Guix
guests. To control the agent from the host, open a socket by invoking
-@code{qemu} with the following arguments:
+QEMU with the following arguments:
@example
qemu-system-x86_64 \
@@ -30098,11 +30098,11 @@ Configuration for the @code{qemu-guest-agent} service.
@table @asis
@item @code{qemu} (default: @code{qemu-minimal})
-The qemu package to use.
+The QEMU package to use.
@item @code{device} (default: @code{""})
-Path to device or socket the agent uses to communicate with the host.
-If empty, QEMU uses a default path.
+File name of the device or socket the agent uses to communicate with the
+host. If empty, QEMU uses a default file name.
@end table
@end deftp
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-11-12 22:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-02 19:06 [bug#51573] [PATCH] gnu: virtualization: Add qemu-guest-agent service Timotej Lazar
2021-11-12 22:41 ` bug#51573: " Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).