From: Manuel Federanko <m.federanko@proxmox.com>
To: Fiona Ebner <f.ebner@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH qemu-server v2] fix #5578: smbios: set serial number
Date: Fri, 20 Feb 2026 10:02:19 +0100 [thread overview]
Message-ID: <25a2909a-f22b-47fb-97fd-c1eeeb688d83@proxmox.com> (raw)
In-Reply-To: <7e936548-ee2e-4452-83f1-8c95ed1678d7@proxmox.com>
On 2026-02-19 3:55 PM, Fiona Ebner wrote:
> Am 19.02.26 um 12:19 PM schrieb Manuel Federanko:
>> 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 bug report mentions VMWare using "VMware-42 xx yy zz .....". Maybe
> we should also use a "Proxmox-" prefix or similar?
Agreed, I'm open to suggestions on what exactly the prefix should be,
"Proxmox-" sounds good though, maybe "PMX-" or "PVE-" as suggested by
Stoiko off-list.
> I do wonder if we should set this unconditionally or somehow guard it,
> e.g. only do it for win11 OS type, or if guarding would be overly
> cautious. It does only affect new VMs, so if this does cause some kind
> of regression, we can still adapt it again.
>
>> 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.
>
> Note that absence of the flag is needed for backwards compatibility with
> pre-existing configuration files (also in backups) from before the flag
> was introduced [0]. If the base64=1 is not set, the values are
> interpreted directly and not decoded first.
>
>> 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
>
> Missing use statement for MIME::Base64
>
>> @@ -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 = (
>
> Style nit: our code base mostly uses hash references rather than hashes
> directly. Especially, since you need to pass it along as a reference,
> you can already define it as such.
>
>> + 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
>
> Missing use statement for MIME::Base64
>
>> @@ -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();
>
> Rather than removing the helper here, it could be extended. This would
> avoid duplicating the behavior on the (previous) call sites that need it.
Will extend the helper, which makes the use statements moot, and switch to
a hash reference.
>> -}
>> -
>> sub create_reboot_request {
>> my ($vmid) = @_;
>> open(my $fh, '>', "/run/qemu-server/$vmid.reboot")
>
> [0]:
> https://git.proxmox.com/?p=qemu-server.git;a=commitdiff;h=1f30ac3a9f18c215d3e3c657f9e81d9d3125f46c
prev parent reply other threads:[~2026-02-20 9:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 11:19 Manuel Federanko
2026-02-19 14:55 ` Fiona Ebner
2026-02-20 9:02 ` Manuel Federanko [this message]
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=25a2909a-f22b-47fb-97fd-c1eeeb688d83@proxmox.com \
--to=m.federanko@proxmox.com \
--cc=f.ebner@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