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.
Signed-off-by: Manuel Federanko <[email protected]> --- src/PVE/API2/Qemu.pm | 5 ++++- src/PVE/CLI/qm.pm | 5 ++++- src/PVE/QemuServer.pm | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm index c2e185a6..8d1e3ec0 100644 --- a/src/PVE/API2/Qemu.pm +++ b/src/PVE/API2/Qemu.pm @@ -1471,7 +1471,10 @@ __PACKAGE__->register_method({ # auto generate uuid if user did not specify smbios1 option if (!$conf->{smbios1}) { - $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid(); + $conf->{smbios1} = + PVE::QemuServer::generate_smbios1_uuid() . "," + . PVE::QemuServer::generate_smbios1_serial() + . ",base64=1"; } if ( diff --git a/src/PVE/CLI/qm.pm b/src/PVE/CLI/qm.pm index bdae9641..44c74eed 100755 --- a/src/PVE/CLI/qm.pm +++ b/src/PVE/CLI/qm.pm @@ -912,7 +912,10 @@ __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(); + $conf->{smbios1} = + PVE::QemuServer::generate_smbios1_uuid() . "," + . PVE::QemuServer::generate_smbios1_serial() + . ",base64=1"; 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..a8cc7d85 100644 --- a/src/PVE/QemuServer.pm +++ b/src/PVE/QemuServer.pm @@ -8086,6 +8086,12 @@ sub generate_smbios1_uuid { return "uuid=" . generate_uuid(); } +sub generate_smbios1_serial { + my @population = ('0' .. '9', 'A' .. 'Z', 'a' .. 'z'); + my $serial = join('', map($population[rand(@population)], 1 .. 12)); + return "serial=" . encode_base64($serial, ""); +} + sub create_reboot_request { my ($vmid) = @_; open(my $fh, '>', "/run/qemu-server/$vmid.reboot") -- 2.47.3
