Packer fails to build Virtualbox VM using WSL2 and Hyper-V (Host: Windows 10 2004, WSL: Ubunto 20.04)
e.g.
virtualbox-iso output will be in this color.
==> virtualbox-iso: Retrieving Guest additions
virtualbox-iso: Using file in-place: file://./C:%5CProgram%20Files%5COracle%5CVirtualBox/VBoxGuestAdditions.iso
==> virtualbox-iso: Retrieving ISO
virtualbox-iso: Found already downloaded, initial checksum matched, no download needed: http://cdimage.ubuntu.com/ubuntu-legacy-server/releases/20.04/release/ubuntu-20.04-legacy-server-amd64.iso
==> virtualbox-iso: Deleting previous output directory...
==> virtualbox-iso: Starting HTTP server on port 8125
==> virtualbox-iso: Creating virtual machine...
==> virtualbox-iso: Creating hard drive...
==> virtualbox-iso: Creating forwarded port mapping for communicator (SSH, WinRM, etc) (host port 3540)
==> virtualbox-iso: Starting the virtual machine...
==> virtualbox-iso: Error starting VM: VBoxManage error: VBoxManage.exe: error: VMMR0_DO_NEM_INIT_VM failed: VERR_NEM_MISSING_KERNEL_API_2 (VERR_NEM_MISSING_KERNEL_API_2).
==> virtualbox-iso: VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)
==> virtualbox-iso: VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
==> virtualbox-iso: Deregistering and deleting VM...
==> virtualbox-iso: Deleting output directory...
Build 'virtualbox-iso' errored: Error starting VM: VBoxManage error: VBoxManage.exe: error: VMMR0_DO_NEM_INIT_VM failed: VERR_NEM_MISSING_KERNEL_API_2 (VERR_NEM_MISSING_KERNEL_API_2).
VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
==> Some builds didn't complete successfully and had errors:
--> virtualbox-iso: Error starting VM: VBoxManage error: VBoxManage.exe: error: VMMR0_DO_NEM_INIT_VM failed: VERR_NEM_MISSING_KERNEL_API_2 (VERR_NEM_MISSING_KERNEL_API_2).
VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
The reason it fails is because HyperV is enabled and thus VT-x is not available.
If I build this manually, I can create the Virtualbox VM (not using Hyper-V), then using ‘vboxmanage modifyvm’ I can change the ‘paravirtprovider’ to ‘hyperv’. However, using Packer this does not seem possible as the build fails because Packer tries to create a virtualbox-iso using the default (i.e. virtualbox, not hyperv), which of course will fail (as noted above).
There is the option to set ‘vboxmanage’ or ‘vboxmanage_post’ e.g. ‘“vboxmanage_post”: [ [“modifyvm”, “{{ user template
}}”, “–paravirtprovider”, “hyperv”] ]’, but this fails as above, i.e. cannot create the initial VM.
Any ideas for a workaround?
Below is the cmd
e.g.
packer build -force -only=virtualbox-iso ubuntu-2004-server-amd64.json
And below is the Packer script e.g. ‘ubuntu-2004-server-amd64.json’ (based on Bento scripts).
e.g.
{
"builders": [
{
"boot_command": [
"<esc><wait>",
"<esc><wait>",
"<enter><wait>",
"/install/vmlinuz<wait>",
" auto<wait>",
" console-setup/ask_detect=false<wait>",
" console-setup/layoutcode=us<wait>",
" console-setup/modelcode=pc105<wait>",
" debconf/frontend=noninteractive<wait>",
" debian-installer=en_US.UTF-8<wait>",
" fb=false<wait>",
" initrd=/install/initrd.gz<wait>",
" kbd-chooser/method=us<wait>",
" keyboard-configuration/layout=USA<wait>",
" keyboard-configuration/variant=USA<wait>",
" locale=en_US.UTF-8<wait>",
" netcfg/get_domain=vm<wait>",
" netcfg/get_hostname=vagrant<wait>",
" grub-installer/bootdev=/dev/sda<wait>",
" noapic<wait>",
" preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `preseed_path`}}<wait>",
" -- <wait>",
"<enter><wait>"
],
"boot_wait": "10s",
"cpus": "{{ user `cpus` }}",
"disk_size": "{{user `disk_size`}}",
"guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
"guest_additions_url": "{{ user `guest_additions_url` }}",
"guest_os_type": "Ubuntu_64",
"hard_drive_interface": "sata",
"headless": "{{ user `headless` }}",
"http_directory": "{{user `http_directory`}}",
"iso_checksum_type":"sha256",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
"memory": "{{ user `memory` }}",
"output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-virtualbox",
"shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now",
"ssh_password": "vagrant",
"ssh_port": 22,
"ssh_timeout": "10000s",
"ssh_username": "vagrant",
"type": "virtualbox-iso",
"virtualbox_version_file": ".vbox_version",
"vm_name": "{{ user `template` }}",
"vboxmanage": [ ["modifyvm", "{{ user `template` }}", "--paravirtprovider", "hyperv"] ]
},
{
"boot_command": [
"<esc><wait10><esc><esc><enter><wait>",
"set gfxpayload=1024x768<enter>",
"linux /install/vmlinuz ",
"preseed/url=http://{{.HTTPIP}}:{{.HTTPPort}}/preseed-hyperv.cfg ",
"debian-installer=en_US.UTF-8 auto locale=en_US.UTF-8 kbd-chooser/method=us ",
"hostname={{.Name}} ",
"fb=false debconf/frontend=noninteractive ",
"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA console-setup/ask_detect=false <enter>",
"initrd /install/initrd.gz<enter>",
"boot<enter>"
],
"boot_wait": "10s",
"communicator": "ssh",
"disk_size": "{{user `disk_size`}}",
"enable_secure_boot": false,
"generation": "{{user `hyperv_generation`}}",
"http_directory": "{{user `http_directory`}}",
"iso_checksum_type":"sha256",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
"output_directory": "{{ user `build_directory` }}/packer-{{user `template`}}-hyperv",
"shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now",
"ssh_password": "vagrant",
"ssh_port": 22,
"ssh_timeout": "10000s",
"ssh_username": "vagrant",
"switch_name": "{{user `hyperv_switch`}}",
"type": "hyperv-iso",
"vm_name": "{{ user `template` }}"
}
],
"post-processors": [
{
"output": "{{ user `build_directory` }}/{{user `box_basename`}}.{{.Provider}}.box",
"type": "vagrant"
}
],
"variables": {
"box_basename": "ubuntu-20.04",
"build_directory": "../../builds",
"build_timestamp": "{{isotime \"20060102150405\"}}",
"cpus": "1",
"disk_size": "65536",
"git_revision": "__unknown_git_revision__",
"guest_additions_url": "",
"headless": "",
"http_directory": "{{template_dir}}/http",
"http_proxy": "{{env `http_proxy`}}",
"https_proxy": "{{env `https_proxy`}}",
"hyperv_generation": "2",
"hyperv_switch": "{{env `hyperv_switch`}}",
"iso_checksum": "36f15879bd9dfd061cd588620a164a82972663fdd148cce1f70d57d314c21b73",
"iso_name": "ubuntu-20.04-legacy-server-amd64.iso",
"memory": "1024",
"mirror": "http://cdimage.ubuntu.com",
"mirror_directory": "ubuntu-legacy-server/releases/20.04/release",
"name": "ubuntu-20.04",
"no_proxy": "{{env `no_proxy`}}",
"preseed_path": "preseed.cfg",
"template": "ubuntu-20.04-amd64",
"version": "TIMESTAMP"
}
}