]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: don't use vmgenid on aarch64 as it's not supported
authorArian van Putten <arian.vanputten@gmail.com>
Thu, 1 May 2025 11:19:24 +0000 (13:19 +0200)
committerArian van Putten <arian.vanputten@gmail.com>
Fri, 2 May 2025 09:05:06 +0000 (11:05 +0200)
fixes:

```
qemu-kvm: -device vmgenid,guid=5f303a47-6fae-4dd7-969c-6c1ea61e816e: 'vmgenid' is not a valid device model name
```

src/vmspawn/vmspawn-util.h
src/vmspawn/vmspawn.c

index b3d72ede726c0cdfc887f26d07dd4e2025fb4f6d..ff1cffd13e1a6d6f8a7672216b860e53d5410166 100644 (file)
 #  define ARCHITECTURE_SUPPORTS_SMBIOS 0
 #endif
 
+#if defined(__x86_64__) || defined(__i386__)
+# define ARCHITECTURE_SUPPORTS_VMGENID 1
+#else
+# define ARCHITECTURE_SUPPORTS_VMGENID 0
+#endif
+
 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
 #  define ARCHITECTURE_SUPPORTS_TPM 1
 #else
index 4b1898ac3f650f796da10803631b0f59ee91935e..4ee9e473938d7f5f048ac946464ab88a20d6a63d 100644 (file)
@@ -1656,23 +1656,25 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                 if (strv_extend_many(&cmdline, "-uuid", SD_ID128_TO_UUID_STRING(arg_uuid)) < 0)
                         return log_oom();
 
-        /* Derive a vmgenid automatically from the invocation ID, in a deterministic way. */
-        sd_id128_t vmgenid;
-        r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(bd,84,6d,e3,e4,7d,4b,6c,a6,85,4a,87,0f,3c,a3,a0), &vmgenid);
-        if (r < 0) {
-                log_debug_errno(r, "Failed to get invocation ID, making up randomized vmgenid: %m");
+        if (ARCHITECTURE_SUPPORTS_VMGENID) {
+                /* Derive a vmgenid automatically from the invocation ID, in a deterministic way. */
+                sd_id128_t vmgenid;
+                r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(bd,84,6d,e3,e4,7d,4b,6c,a6,85,4a,87,0f,3c,a3,a0), &vmgenid);
+                if (r < 0) {
+                        log_debug_errno(r, "Failed to get invocation ID, making up randomized vmgenid: %m");
 
-                r = sd_id128_randomize(&vmgenid);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to make up randomized vmgenid: %m");
-        }
+                        r = sd_id128_randomize(&vmgenid);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to make up randomized vmgenid: %m");
+                }
 
-        _cleanup_free_ char *vmgenid_device = NULL;
-        if (asprintf(&vmgenid_device, "vmgenid,guid=" SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(vmgenid)) < 0)
-                return log_oom();
+                _cleanup_free_ char *vmgenid_device = NULL;
+                if (asprintf(&vmgenid_device, "vmgenid,guid=" SD_ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(vmgenid)) < 0)
+                        return log_oom();
 
-        if (strv_extend_many(&cmdline, "-device", vmgenid_device) < 0)
-                return log_oom();
+                if (strv_extend_many(&cmdline, "-device", vmgenid_device) < 0)
+                        return log_oom();
+        }
 
         /* if we are going to be starting any units with state then create our runtime dir */
         _cleanup_free_ char *runtime_dir = NULL;