From: Manuel Federanko <m.federanko@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server v2] fix #5578: smbios: set serial number
Date: Thu, 19 Feb 2026 12:19:45 +0100 [thread overview]
Message-ID: <20260219111945.61300-1-m.federanko@proxmox.com> (raw)
If no smbios options are given on creation, default to generate a serial
number. This is required for Windows Autopilot to identify a user
device.
Use the already generated smbios uuid as serial number, it should be
unique enough for our purposes.
The base64 here is needed since all configuration options are stored as
a base64 encoded string, which is ensured by the format. This ensures
that the values are properly decoded in the gui, for example.
Since all fields are forced to be stored in base64 format it might make
sense for a future patch to a) remove the flag or b) allow values
different than base64 encoded data in the other fields.
Tested by creating a new vm via the gui and command line.
Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
---
Changes since v1:
* switch serial to be the same uuid
* use print_smbios1 over manually constructing strings
* remove the dedicated generate_smbios1_uuid subroutine
src/PVE/API2/Qemu.pm | 9 ++++++++-
src/PVE/CLI/qm.pm | 10 +++++++++-
src/PVE/QemuServer.pm | 4 ----
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm
index c2e185a6..bbf534e4 100644
--- a/src/PVE/API2/Qemu.pm
+++ b/src/PVE/API2/Qemu.pm
@@ -1471,7 +1471,14 @@ __PACKAGE__->register_method({
# auto generate uuid if user did not specify smbios1 option
if (!$conf->{smbios1}) {
- $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
+ my $smbios1_uuid = PVE::QemuServer::generate_uuid();
+ my $smbios1_serial = MIME::Base64::encode_base64($smbios1_uuid, "");
+ my %smbios1 = (
+ uuid => $smbios1_uuid,
+ serial => $smbios1_serial,
+ base64 => 1,
+ );
+ $conf->{smbios1} = PVE::QemuServer::print_smbios1(\%smbios1);
}
if (
diff --git a/src/PVE/CLI/qm.pm b/src/PVE/CLI/qm.pm
index bdae9641..0daf402d 100755
--- a/src/PVE/CLI/qm.pm
+++ b/src/PVE/CLI/qm.pm
@@ -912,7 +912,15 @@ __PACKAGE__->register_method({
eval {
# order matters, as do_import() will load_config() internally
$conf->{vmgenid} = PVE::QemuServer::generate_uuid();
- $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
+ my $smbios1_uuid = PVE::QemuServer::generate_uuid();
+ my $smbios1_serial = MIME::Base64::encode_base64($smbios1_uuid, "");
+ my %smbios1 = (
+ uuid => $smbios1_uuid,
+ serial => $smbios1_serial,
+ base64 => 1,
+ );
+ $conf->{smbios1} = PVE::QemuServer::print_smbios1(\%smbios1);
+
PVE::QemuConfig->write_config($vmid, $conf);
foreach my $disk (@{ $parsed->{disks} }) {
diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 545758dc..b371d00b 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -8082,10 +8082,6 @@ sub generate_uuid {
return $uuid_str;
}
-sub generate_smbios1_uuid {
- return "uuid=" . generate_uuid();
-}
-
sub create_reboot_request {
my ($vmid) = @_;
open(my $fh, '>', "/run/qemu-server/$vmid.reboot")
--
2.47.3
next reply other threads:[~2026-02-19 11:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 11:19 Manuel Federanko [this message]
2026-02-19 14:55 ` Fiona Ebner
2026-02-20 9:02 ` Manuel Federanko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260219111945.61300-1-m.federanko@proxmox.com \
--to=m.federanko@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox