macOS on VirtualBox on WSLg
myspaghetti opened this issue · 8 comments
Here's a sort-of tutorial for compiling the vboxdrv
module for WSLg, adapted from the Darling guide and the Hanna J guide.
No support is offered for installing WSLg, compiling a kernel, or compiling and loading the vboxdrv
module.
This process can and will break, since WSLg is still in beta. Without further ado:
- Install Windows 11
- Install WSLg, update WSLg, launch WSLg
- On the WSLg command prompt, update the package repository:
sudo apt update
- Install the build dependencies:
sudo apt install build-essential flex bison libssl-dev libelf-dev git -y
- Clone the
5.10.y
kernel branch:git clone --depth 1 --single-branch --branch linux-msft-wsl-5.10.y 'https://github.com/microsoft/WSL2-Linux-Kernel.git' linux-msft-wsl-5.10.y
cd linux-msft-wsl-5.10.y
cp Microsoft/config-wsl .config
sudo make -j $(expr $(nproc) - 1)
sudo make modules_install
sudo apt install virtualbox-source
tar -xf /usr/src/virtualbox.tar.bz2
cd modules/virtualbox/vboxdrv
sudo make -C ~/linux-msft-wsl-5.10.y/ M=${PWD}
sudo insmod vboxdrv.ko
Hooray, now you can run the script, version 0.99.1.0
or higher, and install macOS on VirtualBox on WSLg, super-slowly.
sudo apt install bash coreutils gzip unzip wget xxd dmg2img virtualbox -y
mkdir ~/macOS
cd ~/macOS
wget https://raw.githubusercontent.com/myspaghetti/macos-guest-virtualbox/master/macos-guest-virtualbox.sh
bash -i macos-guest-virtualbox.sh
Follow the script and you're done. Please mind that in my limited experience, there appears to be some disk I/O issue which slows the VirtualBox VM considerably, so booting macOS takes about ten minutes and installation takes many hours. If you're already compiling kernels and kernel modules, you might as well skip VirtualBox altogether and head directly to OSX-KVM on WSL2/WSLg which is a lot faster.
I have got this error:
Can you help me?
I have got a windows pc, with bash, I think that it is wsl2, but if I uninstall I cannot install with this script macos.
I try to install it in a linux pc and I dont had any problem, everything goes perfect,.
Checking that VirtualBox starts the virtual machine without errors.
Checking that VirtualBox uses hardware-supported virtualization.
Virtualbox is not using hardware-supported virtualization features.
Check that software such as Hyper-V, Windows Sandbox, WSL2, memory integrity
protection, and other Windows features that lock virtualization are turned off.
Exiting.
WSL2 uses Hyper-V which blocks VirtualBox from accessing VT-x/AMD-V. macOS guests on VirtualBox require VT-x/AMD-V. The script only works on WSL2/WSLg if you enable nested virtualization and load the vboxdrv
kernel module. No support is offered for running the script on WSL2/WSLg.
I had disable Hyper-V and I installed the VM correctly. I think that you could put this script line in you specification, so it could help to others users.
Right now I believe Oracle will not support VirtualBox on WSL2/WSLg, and I assume the extremely limited performance is here to stay, so the script isn't officially supported on WSL2/WSLg. I do heartily recommend QEMU/KVM as the performance on WSL2/WSLg is very good.
@myspaghetti Are there any tutorials online to get a mac virtual machine similiar to the one this script creates but on WSL2/WSLg? Or are we on our own?
All the steps are here. When the WSLg kernel is updated you'll have to change the version number from 5.10.y to whichever you're running, but otherwise all the steps are stable. Regardless, VirtualBox is extremely slow on WSL2/WSLg so you'll save time going directly for OSX-KVM.
VirtualBox has steadily improved over time. Version 6.1.3
runs OK under Hyper-V. For example, I am running Ubuntu in VirtualBox under WSLg in Windows 11. Does this fact improve the prospects of this project?
Unfortunately nested VT-x/AMD-V
is still not supported - not sure if its just a matter of time or a technological limitation.
P.S. I looked at the OSX-KVM link and its a serious commitment to follow all those steps - we need a script for that!
@tcab mind the difference between VirtualBox on Windows using NEM, and VirtualBox on a WSLg host.
To clear things up:
- VirtualBox under a WSLg Linux host - VT-x/AMD-V available, macOS works (but very slowly)
- VirtualBox under a Windows host when WSLg is enabled - VT-x/AMD-V not available, VirtualBox uses NEM, macOS doesn't work