You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Packer+Azure DevOps制作黄金镜像时WSL2安装报错排查求助

排查Packer Azure ARM预配WSL时的"登录会话不存在"错误

问题场景

使用Packer结合Azure DevOps构建Windows黄金镜像时,配置了以下PowerShell预配器:

provisioner "powershell" {
elevated_user = "SYSTEM"
elevated_password = ""
inline = ["wsl --install"]
}

执行后出现报错,尽管日志显示WSL组件已安装,但预配步骤失败,虚拟机被删除,错误日志如下:

azure-arm.windowsvm: A specified logon session does not exist. It may already have been terminated.
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: Virtual Machine Platform has been installed.
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: Installing: Windows Subsystem for Linux
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: Windows Subsystem for Linux has been installed.
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: Installing: Windows Subsystem for Linux
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
    azure-arm.windowsvm: 
==> azure-arm.windowsvm: Provisioning step had errors: Running the cleanup provisioner, if present...
==> azure-arm.windowsvm: 
==> azure-arm.windowsvm: Deleting individual resources ...

排查方案

1. 规避SYSTEM账户的会话限制

wsl --install一键命令依赖交互式会话上下文,而SYSTEM账户无交互式登录会话,易触发会话终止错误。可以:

  • 改用虚拟机本地管理员账户执行预配,移除elevated_user和elevated_password配置,或指定具备交互式权限的本地账户。
  • 若必须使用SYSTEM账户,拆分安装步骤,手动启用组件替代一键命令:
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    wsl --set-default-version 2
    

2. 处理安装后的系统重启需求

WSL组件安装完成后需重启系统,未处理重启会导致后续步骤异常。可添加Packer重启预配器:

provisioner "powershell" {
  inline = [
    "dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart",
    "dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart"
  ]
}

provisioner "windows-restart" {
  restart_command = "shutdown /r /t 10 /f /c \"Packer restart for WSL components\""
  restart_check_command = "powershell -command \"Get-Service -Name WinRM | Select-Object -ExpandProperty Status\""
  max_retries = 5
  timeout = "10m"
}

provisioner "powershell" {
  inline = ["wsl --set-default-version 2"]
}

3. 捕获详细执行日志

修改预配器添加日志记录,保留WSL安装的完整过程:

provisioner "powershell" {
  elevated_user = "SYSTEM"
  elevated_password = ""
  inline = [
    "Start-Transcript -Path 'C:\\packer-wsl-install.log' -Append",
    "wsl --install --verbose",
    "Stop-Transcript"
  ]
}

同时修改Azure ARM builder配置keep_os_disk=true,让Packer失败后保留虚拟机,登录后查看C:\packer-wsl-install.log定位具体失败环节。

4. 检查Azure VM基础配置

  • 确认Packer使用的服务主体拥有虚拟机创建、扩展管理、磁盘操作的完整权限。
  • 验证虚拟机规格满足WSL2要求:需支持硬件虚拟化,推荐使用至少2vCPU的VM实例。

内容的提问来源于stack exchange,提问作者Roni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:50:11