]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: add env var that can extend the qemu cmdline
authorLennart Poettering <lennart@poettering.net>
Fri, 19 Apr 2024 12:41:43 +0000 (14:41 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 20 Apr 2024 10:10:42 +0000 (12:10 +0200)
This is a bit hackish, but really useful sometimes to play around with
some qemu switches.

docs/ENVIRONMENT.md
src/vmspawn/vmspawn.c

index 961601c72e0dc76f3215d489667a65ff02d00a1d..8068d0d33cf214a1803c688aabbb9a347fcb24d3 100644 (file)
@@ -191,6 +191,9 @@ All tools:
   expected format is six groups of two hexadecimal digits separated by colons,
   e.g. `SYSTEMD_VMSPAWN_NETWORK_MAC=12:34:56:78:90:AB`
 
+* `$SYSTEMD_VMSPAWN_QEMU_EXTRA=…` – may contain additional command line
+  arguments to append the qemu command line.
+
 `systemd-logind`:
 
 * `$SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1` — if set, report that
index 9687119df4d8100e165a1a6e219464c9025608a1..2ebb158640e7c333434ec9a169672f9e638ac927 100644 (file)
@@ -1881,6 +1881,18 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                         return log_error_errno(r, "Failed to call getsockname on VSOCK: %m");
         }
 
+        const char *e = secure_getenv("SYSTEMD_VMSPAWN_QEMU_EXTRA");
+        if (e) {
+                _cleanup_strv_free_ char **extra = NULL;
+
+                r = strv_split_full(&extra, e, /* separator= */ NULL, EXTRACT_CUNESCAPE|EXTRACT_UNQUOTE);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to split $SYSTEMD_VMSPAWN_QEMU_EXTRA environment variable: %m");
+
+                if (strv_extend_strv(&cmdline, extra, /* filter_duplicates= */ false) < 0)
+                        return log_oom();
+        }
+
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *joined = quote_command_line(cmdline, SHELL_ESCAPE_EMPTY);
                 if (!joined)