QEMU exception CPU trapped when launching the auto-unattended install for debug purposes #18

Open
opened 2024-09-03 22:07:13 +08:00 by AkechiShiro · 2 comments

Hey, @Astro

So with the latest image from Win11 official website, Win11-23H2 I've run into this issue :
image

The config for the auto-unattended install is the following :

(Couldn't figure out how to add syntax highlighting with the details syntax)

autounattended.nix
{ pkgs
, fullName ? "John Doe"
, organization ? "KVM Authority"
, administratorPassword ? "123456"
, uiLanguage ? "en-US"
, inputLocale ? "en-US"
, userLocale ? "en-US"
, systemLocale ? "en-US"
, users ? {}
, productKey ? null
, defaultUser ? "wfvm"
, setupCommands ? []
, timeZone ? "UTC"
, services ? {}
, impureShellCommands ? []
, driveLetter ? "D:"
, efi ? true
, imageSelection ? "Windows 11 Pro N"
, enableTpm
, ...
}:

let
  lib = pkgs.lib;
  serviceCommands = lib.mapAttrsToList (
    serviceName: attrs: "powershell Set-Service -Name ${serviceName} " + (
      lib.concatStringsSep " " (
        (
          lib.mapAttrsToList (
            n: v: if builtins.typeOf v != "bool" then "-${n} ${v}" else "-${n}"
          )
        ) (
          # Always run without interaction
          { Force = true; } // attrs
        )
      )
    )
  ) services;

  sshSetupCommands =
    # let
    #   makeDirs = lib.mapAttrsToList (n: v: ''mkdir C:\Users\${n}\.ssh'') users;
    #   writeKeys = lib.flatten (lib.mapAttrsToList (n: v: builtins.map (key: let
    #     commands = [
    #       ''powershell.exe Set-Content -Path C:\Users\${n}\.ssh\authorized_keys -Value '${key}' ''
    #     ];
    #   in lib.concatStringsSep "\n" commands) (v.sshKeys or [])) users);
    #   mkDirsDesc = builtins.map (c: {Path = c; Description = "Make SSH key dir";})  makeDirs;
    #   writeKeysDesc = builtins.map (c: {Path = c; Description = "Add SSH key";})  writeKeys;
    # in
    # mkDirsDesc ++ writeKeysDesc ++
  [
    {
      Path = ''powershell.exe ${driveLetter}\install-ssh.ps1'';
      Description = "Install OpenSSH service.";
    }
  ];

  assertCommand = c: builtins.typeOf c == "string" || builtins.typeOf c == "set" && builtins.hasAttr "Path" c && builtins.hasAttr "Description" c;

  commands = builtins.map (x: assert assertCommand x; if builtins.typeOf x == "string" then { Path = x; Description = x; } else x) (
    [ {
      Path = "powershell.exe Set-ExecutionPolicy -Force Unrestricted";
      Description = "Allow unsigned powershell scripts.";
    } {
      Path = ''powershell.exe ${driveLetter}\win-bundle-installer.exe'';
      Description = "Install any declared packages.";
    } {
      Path = "net accounts /maxpwage:unlimited";
      Description = "Disable forced password expiry.";
    } ]
    ++ setupCommands
    ++ [
      {
        Path = ''powershell.exe ${driveLetter}\setup.ps1'';
        Description = "Setup SSH and keys";
      }
    ]
    ++ serviceCommands
    ++ impureShellCommands
  );

  mkCommand = attrs: ''
    <RunSynchronousCommand wcm:action="add">
      ${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: "<${n}>${v}</${n}>") attrs)}
    </RunSynchronousCommand>
  '';
  mkCommands = commands: (
    builtins.foldl' (
      acc: v: rec {
        i = acc.i + 1;
        values = acc.values ++ [ (mkCommand (v // { Order = builtins.toString i; })) ];
      }
    ) {
      i = 0;
      values = [];
    } commands
  ).values;

  mkUser =
    { name
    , password
    , description ? ""
    , displayName ? ""
    , groups ? []
    # , sshKeys ? []  # Handled in scripts
    }: ''
      <LocalAccount wcm:action="add">
        <Password>
          <Value>${password}</Value>
          <PlainText>true</PlainText>
        </Password>
        <Description>${description}</Description>
        <DisplayName>${displayName}</DisplayName>
        <Group>${builtins.concatStringsSep ";" (lib.unique ([ "Users" ] ++ groups))}</Group>
        <Name>${name}</Name>
      </LocalAccount>
    '';

  # Windows expects a flat list of users while we want to manage them as a set
  flatUsers = builtins.attrValues (builtins.mapAttrs (name: s: s // { inherit name; }) users);

  diskId =
    if efi then 2 else 1;

  autounattendXML = pkgs.writeText "autounattend.xml" ''
    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
      <settings pass="windowsPE">
        <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <DriverPaths>
            <PathAndCredentials wcm:action="add" wcm:keyValue="1">
              <Path>D:\</Path>
            </PathAndCredentials>
            <PathAndCredentials wcm:action="add" wcm:keyValue="2">
              <Path>E:\</Path>
            </PathAndCredentials>
            <PathAndCredentials wcm:action="add" wcm:keyValue="3">
              <Path>C:\virtio\amd64\w10</Path>
            </PathAndCredentials>
            <PathAndCredentials wcm:action="add" wcm:keyValue="4">
              <Path>C:\virtio\NetKVM\w10\amd64</Path>
            </PathAndCredentials>
            <PathAndCredentials wcm:action="add" wcm:keyValue="5">
              <Path>C:\virtio\qxldod\w10\amd64</Path>
            </PathAndCredentials>
          </DriverPaths>
        </component>
        <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          ${lib.optionalString (!enableTpm) ''
            <RunSynchronous>
              <RunSynchronousCommand wcm:action="add">
                <Order>1</Order>
                <Path>reg add HKLM\System\Setup\LabConfig /v BypassTPMCheck /t reg_dword /d 0x00000001 /f</Path>
              </RunSynchronousCommand>
            </RunSynchronous>
          ''}

          <DiskConfiguration>
            <Disk wcm:action="add">
              <CreatePartitions>
                <CreatePartition wcm:action="add">
                  <Order>1</Order>
                  <Type>${if efi then "EFI" else "Primary"}</Type>
                  <Size>300</Size>
                </CreatePartition>
                <CreatePartition wcm:action="add">
                  <Order>2</Order>
                  <Type>${if efi then "MSR" else "Primary"}</Type>
                  <Size>16</Size>
                </CreatePartition>
                <CreatePartition wcm:action="add">
                  <Order>3</Order>
                  <Type>Primary</Type>
                  <Extend>true</Extend>
                </CreatePartition>
              </CreatePartitions>
              <ModifyPartitions>
                <ModifyPartition wcm:action="add">
                  <Order>1</Order>
                  <Format>${if efi then "FAT32" else "NTFS"}</Format>
                  <Label>System</Label>
                  <PartitionID>1</PartitionID>
                </ModifyPartition>
                <ModifyPartition wcm:action="add">
                  <Order>2</Order>
                  <PartitionID>2</PartitionID>
                </ModifyPartition>
                <ModifyPartition wcm:action="add">
                  <Order>3</Order>
                  <Format>NTFS</Format>
                  <Label>Windows</Label>
                  <Letter>C</Letter>
                  <PartitionID>3</PartitionID>
                </ModifyPartition>
              </ModifyPartitions>
              <DiskID>${toString diskId}</DiskID>
              <WillWipeDisk>true</WillWipeDisk>
            </Disk>
          </DiskConfiguration>

          <ImageInstall>
            <OSImage>
              <InstallTo>
                <DiskID>${toString diskId}</DiskID>
                <PartitionID>3</PartitionID>
              </InstallTo>
              <InstallFrom>
                <Path>\install.swm</Path>
                <MetaData wcm:action="add">
                  <Key>/IMAGE/NAME</Key>
                  <Value>${imageSelection}</Value>
                </MetaData>
              </InstallFrom>
            </OSImage>
          </ImageInstall>

          <UserData>
            <ProductKey>
              ${if productKey != null then "<Key>${productKey}</Key>" else "<Key/>"}
              <WillShowUI>OnError</WillShowUI>
            </ProductKey>
            <AcceptEula>true</AcceptEula>
            <FullName>${fullName}</FullName>
            <Organization>${organization}</Organization>
          </UserData>

        </component>
        <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <SetupUILanguage>
            <UILanguage>${uiLanguage}</UILanguage>
          </SetupUILanguage>
          <InputLocale>${inputLocale}</InputLocale>
          <SystemLocale>${systemLocale}</SystemLocale>
          <UILanguage>${uiLanguage}</UILanguage>
          <UILanguageFallback>en-US</UILanguageFallback>
          <UserLocale>${userLocale}</UserLocale>
        </component>
      </settings>

      <settings pass="oobeSystem">
        <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <InputLocale>${inputLocale}</InputLocale>
          <SystemLocale>${systemLocale}</SystemLocale>
          <UILanguage>${uiLanguage}</UILanguage>
          <UILanguageFallback>en-US</UILanguageFallback>
          <UserLocale>${userLocale}</UserLocale>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <OOBE>
            <HideEULAPage>true</HideEULAPage>
            <HideLocalAccountScreen>true</HideLocalAccountScreen>
            <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
            <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
            <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
            <ProtectYourPC>1</ProtectYourPC>
          </OOBE>
          <TimeZone>${timeZone}</TimeZone>

          <UserAccounts>
            ${if administratorPassword != null then ''
    <AdministratorPassword>
      <Value>${administratorPassword}</Value>
      <PlainText>true</PlainText>
    </AdministratorPassword>
  '' else ""}
            <LocalAccounts>
              ${builtins.concatStringsSep "\n" (builtins.map mkUser flatUsers)}
            </LocalAccounts>
          </UserAccounts>

          ${if defaultUser == null then "" else ''
    <AutoLogon>
      <Password>
        <Value>${(builtins.getAttr defaultUser users).password}</Value>
        <PlainText>true</PlainText>
      </Password>
      <Enabled>true</Enabled>
      <Username>${defaultUser}</Username>
    </AutoLogon>
  ''}

        </component>
        <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <Reseal>
            <ForceShutdownNow>true</ForceShutdownNow>
            <Mode>OOBE</Mode>
          </Reseal>
        </component>
      </settings>

      <settings pass="specialize">
          <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
              <RunSynchronous>
                ${lib.concatStringsSep "\n" (mkCommands commands)}
              </RunSynchronous>
          </component>
          <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
              <CEIPEnabled>0</CEIPEnabled>
          </component>
      </settings>

      <!-- Disable Windows UAC -->
      <settings pass="offlineServicing">
        <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <EnableLUA>false</EnableLUA>
        </component>
      </settings>

       <cpi:offlineImage cpi:source="wim:c:/wim/windows-11/install.wim#${imageSelection}" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
    </unattend>
  '';

in {
  # Lint and format as a sanity check
  autounattendXML = pkgs.runCommand "autounattend.xml" {} ''
    ${pkgs.libxml2}/bin/xmllint --format ${autounattendXML} > $out
  '';

  # autounattend.xml is _super_ picky about quotes and other things
  setupScript = pkgs.writeText "setup.ps1" (
    ''
      # Setup SSH and keys
    '' +
    lib.concatStrings (
      builtins.map (c: ''
        # ${c.Description}
        ${c.Path}
      '') sshSetupCommands
    )
  );
}

I did this change also to the image selection :

-  imageSelection = "Windows 11 Pro N";
+  imageSelection = "Windows 11 Pro";

And used 200GB as default for the qcow disk instead of 70GB, removed anaconda2 and changed impureMode to true.

Hope this may help to solve the issue, might be just my config changes that are breaking something I did not think of.

Not sure if I can reproduce it with an older Win11-22H2 image.

Hey, @Astro So with the latest image from Win11 official website, `Win11-23H2` I've run into this issue : ![image](/attachments/5c08f512-7987-420b-8af5-ee188f006aca) The config for the auto-unattended install is the following : (Couldn't figure out how to add syntax highlighting with the details syntax) <details> <summary>autounattended.nix</summary> ~~~nix { pkgs , fullName ? "John Doe" , organization ? "KVM Authority" , administratorPassword ? "123456" , uiLanguage ? "en-US" , inputLocale ? "en-US" , userLocale ? "en-US" , systemLocale ? "en-US" , users ? {} , productKey ? null , defaultUser ? "wfvm" , setupCommands ? [] , timeZone ? "UTC" , services ? {} , impureShellCommands ? [] , driveLetter ? "D:" , efi ? true , imageSelection ? "Windows 11 Pro N" , enableTpm , ... }: let lib = pkgs.lib; serviceCommands = lib.mapAttrsToList ( serviceName: attrs: "powershell Set-Service -Name ${serviceName} " + ( lib.concatStringsSep " " ( ( lib.mapAttrsToList ( n: v: if builtins.typeOf v != "bool" then "-${n} ${v}" else "-${n}" ) ) ( # Always run without interaction { Force = true; } // attrs ) ) ) ) services; sshSetupCommands = # let # makeDirs = lib.mapAttrsToList (n: v: ''mkdir C:\Users\${n}\.ssh'') users; # writeKeys = lib.flatten (lib.mapAttrsToList (n: v: builtins.map (key: let # commands = [ # ''powershell.exe Set-Content -Path C:\Users\${n}\.ssh\authorized_keys -Value '${key}' '' # ]; # in lib.concatStringsSep "\n" commands) (v.sshKeys or [])) users); # mkDirsDesc = builtins.map (c: {Path = c; Description = "Make SSH key dir";}) makeDirs; # writeKeysDesc = builtins.map (c: {Path = c; Description = "Add SSH key";}) writeKeys; # in # mkDirsDesc ++ writeKeysDesc ++ [ { Path = ''powershell.exe ${driveLetter}\install-ssh.ps1''; Description = "Install OpenSSH service."; } ]; assertCommand = c: builtins.typeOf c == "string" || builtins.typeOf c == "set" && builtins.hasAttr "Path" c && builtins.hasAttr "Description" c; commands = builtins.map (x: assert assertCommand x; if builtins.typeOf x == "string" then { Path = x; Description = x; } else x) ( [ { Path = "powershell.exe Set-ExecutionPolicy -Force Unrestricted"; Description = "Allow unsigned powershell scripts."; } { Path = ''powershell.exe ${driveLetter}\win-bundle-installer.exe''; Description = "Install any declared packages."; } { Path = "net accounts /maxpwage:unlimited"; Description = "Disable forced password expiry."; } ] ++ setupCommands ++ [ { Path = ''powershell.exe ${driveLetter}\setup.ps1''; Description = "Setup SSH and keys"; } ] ++ serviceCommands ++ impureShellCommands ); mkCommand = attrs: '' <RunSynchronousCommand wcm:action="add"> ${lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: v: "<${n}>${v}</${n}>") attrs)} </RunSynchronousCommand> ''; mkCommands = commands: ( builtins.foldl' ( acc: v: rec { i = acc.i + 1; values = acc.values ++ [ (mkCommand (v // { Order = builtins.toString i; })) ]; } ) { i = 0; values = []; } commands ).values; mkUser = { name , password , description ? "" , displayName ? "" , groups ? [] # , sshKeys ? [] # Handled in scripts }: '' <LocalAccount wcm:action="add"> <Password> <Value>${password}</Value> <PlainText>true</PlainText> </Password> <Description>${description}</Description> <DisplayName>${displayName}</DisplayName> <Group>${builtins.concatStringsSep ";" (lib.unique ([ "Users" ] ++ groups))}</Group> <Name>${name}</Name> </LocalAccount> ''; # Windows expects a flat list of users while we want to manage them as a set flatUsers = builtins.attrValues (builtins.mapAttrs (name: s: s // { inherit name; }) users); diskId = if efi then 2 else 1; autounattendXML = pkgs.writeText "autounattend.xml" '' <?xml version="1.0" encoding="utf-8"?> <unattend xmlns="urn:schemas-microsoft-com:unattend"> <settings pass="windowsPE"> <component name="Microsoft-Windows-PnpCustomizationsWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <DriverPaths> <PathAndCredentials wcm:action="add" wcm:keyValue="1"> <Path>D:\</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="2"> <Path>E:\</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="3"> <Path>C:\virtio\amd64\w10</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="4"> <Path>C:\virtio\NetKVM\w10\amd64</Path> </PathAndCredentials> <PathAndCredentials wcm:action="add" wcm:keyValue="5"> <Path>C:\virtio\qxldod\w10\amd64</Path> </PathAndCredentials> </DriverPaths> </component> <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ${lib.optionalString (!enableTpm) '' <RunSynchronous> <RunSynchronousCommand wcm:action="add"> <Order>1</Order> <Path>reg add HKLM\System\Setup\LabConfig /v BypassTPMCheck /t reg_dword /d 0x00000001 /f</Path> </RunSynchronousCommand> </RunSynchronous> ''} <DiskConfiguration> <Disk wcm:action="add"> <CreatePartitions> <CreatePartition wcm:action="add"> <Order>1</Order> <Type>${if efi then "EFI" else "Primary"}</Type> <Size>300</Size> </CreatePartition> <CreatePartition wcm:action="add"> <Order>2</Order> <Type>${if efi then "MSR" else "Primary"}</Type> <Size>16</Size> </CreatePartition> <CreatePartition wcm:action="add"> <Order>3</Order> <Type>Primary</Type> <Extend>true</Extend> </CreatePartition> </CreatePartitions> <ModifyPartitions> <ModifyPartition wcm:action="add"> <Order>1</Order> <Format>${if efi then "FAT32" else "NTFS"}</Format> <Label>System</Label> <PartitionID>1</PartitionID> </ModifyPartition> <ModifyPartition wcm:action="add"> <Order>2</Order> <PartitionID>2</PartitionID> </ModifyPartition> <ModifyPartition wcm:action="add"> <Order>3</Order> <Format>NTFS</Format> <Label>Windows</Label> <Letter>C</Letter> <PartitionID>3</PartitionID> </ModifyPartition> </ModifyPartitions> <DiskID>${toString diskId}</DiskID> <WillWipeDisk>true</WillWipeDisk> </Disk> </DiskConfiguration> <ImageInstall> <OSImage> <InstallTo> <DiskID>${toString diskId}</DiskID> <PartitionID>3</PartitionID> </InstallTo> <InstallFrom> <Path>\install.swm</Path> <MetaData wcm:action="add"> <Key>/IMAGE/NAME</Key> <Value>${imageSelection}</Value> </MetaData> </InstallFrom> </OSImage> </ImageInstall> <UserData> <ProductKey> ${if productKey != null then "<Key>${productKey}</Key>" else "<Key/>"} <WillShowUI>OnError</WillShowUI> </ProductKey> <AcceptEula>true</AcceptEula> <FullName>${fullName}</FullName> <Organization>${organization}</Organization> </UserData> </component> <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SetupUILanguage> <UILanguage>${uiLanguage}</UILanguage> </SetupUILanguage> <InputLocale>${inputLocale}</InputLocale> <SystemLocale>${systemLocale}</SystemLocale> <UILanguage>${uiLanguage}</UILanguage> <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>${userLocale}</UserLocale> </component> </settings> <settings pass="oobeSystem"> <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <InputLocale>${inputLocale}</InputLocale> <SystemLocale>${systemLocale}</SystemLocale> <UILanguage>${uiLanguage}</UILanguage> <UILanguageFallback>en-US</UILanguageFallback> <UserLocale>${userLocale}</UserLocale> </component> <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OOBE> <HideEULAPage>true</HideEULAPage> <HideLocalAccountScreen>true</HideLocalAccountScreen> <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> <HideOnlineAccountScreens>true</HideOnlineAccountScreens> <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> <ProtectYourPC>1</ProtectYourPC> </OOBE> <TimeZone>${timeZone}</TimeZone> <UserAccounts> ${if administratorPassword != null then '' <AdministratorPassword> <Value>${administratorPassword}</Value> <PlainText>true</PlainText> </AdministratorPassword> '' else ""} <LocalAccounts> ${builtins.concatStringsSep "\n" (builtins.map mkUser flatUsers)} </LocalAccounts> </UserAccounts> ${if defaultUser == null then "" else '' <AutoLogon> <Password> <Value>${(builtins.getAttr defaultUser users).password}</Value> <PlainText>true</PlainText> </Password> <Enabled>true</Enabled> <Username>${defaultUser}</Username> </AutoLogon> ''} </component> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Reseal> <ForceShutdownNow>true</ForceShutdownNow> <Mode>OOBE</Mode> </Reseal> </component> </settings> <settings pass="specialize"> <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RunSynchronous> ${lib.concatStringsSep "\n" (mkCommands commands)} </RunSynchronous> </component> <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <CEIPEnabled>0</CEIPEnabled> </component> </settings> <!-- Disable Windows UAC --> <settings pass="offlineServicing"> <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <EnableLUA>false</EnableLUA> </component> </settings> <cpi:offlineImage cpi:source="wim:c:/wim/windows-11/install.wim#${imageSelection}" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> </unattend> ''; in { # Lint and format as a sanity check autounattendXML = pkgs.runCommand "autounattend.xml" {} '' ${pkgs.libxml2}/bin/xmllint --format ${autounattendXML} > $out ''; # autounattend.xml is _super_ picky about quotes and other things setupScript = pkgs.writeText "setup.ps1" ( '' # Setup SSH and keys '' + lib.concatStrings ( builtins.map (c: '' # ${c.Description} ${c.Path} '') sshSetupCommands ) ); } ~~~ </details> I did this change also to the image selection : ```nix - imageSelection = "Windows 11 Pro N"; + imageSelection = "Windows 11 Pro"; ``` And used 200GB as default for the qcow disk instead of 70GB, removed `anaconda2` and changed `impureMode` to `true`. Hope this may help to solve the issue, might be just my config changes that are breaking something I did not think of. Not sure if I can reproduce it with an older `Win11-22H2` image.
510 KiB
Author

I think maybe the image selection doesn't work due to the fact that the french changes the image name, will try the EN_US image and report my findings here.

I think maybe the image selection doesn't work due to the fact that the french changes the image name, will try the EN_US image and report my findings here.
Author

Hi again @Astro, @sb10q

Swapping the bios from the one that is set to another ovmf in the Nix store allow qemu to boot : /nix/store/vh0ywnw4jzlr4vjzjwhzah299l71x8fm-OVMF-202402-fd/FV/OVMF.fd => /nix/store/8jm9m0jn3ijhhbkkjf1vacmcdcifckyn-qemu-ovmf/FV/OVMF.fd

/nix/store/8jm9m0jn3ijhhbkkjf1vacmcdcifckyn-qemu-ovmf/FV/OVMF.fd : qemu boots into BIOS, I haven't tried the full qemu command but I bet it would work.

/nix/store/vh0ywnw4jzlr4vjzjwhzah299l71x8fm-OVMF-202402-fd/FV/OVMF.fd: file exists but qemu does not boot and says can't find image information.

EDIT: Install does work with the OVMF from the nix store, not sure what is exactly different, I have put the same options than the one in my store.

Hi again @Astro, @sb10q Swapping the bios from the one that is set to another ovmf in the Nix store allow `qemu` to boot : `/nix/store/vh0ywnw4jzlr4vjzjwhzah299l71x8fm-OVMF-202402-fd/FV/OVMF.fd` => `/nix/store/8jm9m0jn3ijhhbkkjf1vacmcdcifckyn-qemu-ovmf/FV/OVMF.fd` `/nix/store/8jm9m0jn3ijhhbkkjf1vacmcdcifckyn-qemu-ovmf/FV/OVMF.fd` : qemu boots into BIOS, I haven't tried the full qemu command but I bet it would work. `/nix/store/vh0ywnw4jzlr4vjzjwhzah299l71x8fm-OVMF-202402-fd/FV/OVMF.fd`: file exists but `qemu` does not boot and says can't find image information. EDIT: Install does work with the OVMF from the nix store, not sure what is exactly different, I have put the same options than the one in my store.
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: M-Labs/wfvm#18
No description provided.