From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id DF4F81FF13E for ; Fri, 20 Feb 2026 10:01:24 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 07A1626A8; Fri, 20 Feb 2026 10:02:25 +0100 (CET) Message-ID: <25a2909a-f22b-47fb-97fd-c1eeeb688d83@proxmox.com> Date: Fri, 20 Feb 2026 10:02:19 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH qemu-server v2] fix #5578: smbios: set serial number To: Fiona Ebner , pve-devel@lists.proxmox.com References: <20260219111945.61300-1-m.federanko@proxmox.com> <7e936548-ee2e-4452-83f1-8c95ed1678d7@proxmox.com> Content-Language: en-US From: Manuel Federanko In-Reply-To: <7e936548-ee2e-4452-83f1-8c95ed1678d7@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1771578129559 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.747 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: SCPBFOMCYIEQGGGPI5WPBN2U5JX235EY X-Message-ID-Hash: SCPBFOMCYIEQGGGPI5WPBN2U5JX235EY X-MailFrom: m.federanko@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: 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 >> --- >> 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