• Expertises

    Door middel van welke expertises we jouw organisatie ondersteunen

  • Hoe we met succes voor een scala aan klanten van betekenis zijn geweest

  • Over Xforce, onze werkwijze en wat we voor je kunnen betekenen

  • Nieuws, events en artikelen van Xforce

  • Nieuwsgierig geworden? Kom werken bij Xforce

Nested virtualization met WSL 2 – hoe doe je dat?

Er komt een nieuwe versie van WSL 2 aan, die met een Lightweight Utility VM werkt. Daarmee is nested virtualization mogelijk. Maar wist je dat je ook al met nested virtualisatie kunt spelen met de bestaande versie van WSL 2? In deze blog lees je hoe je dit doet, als voorproefje op onze kennissessie over virtualisatie met WSL 2 op 29 april. 

8 april 2021   |   Blog   |   Door: Conclusion Xforce

Twee smaken: WSL 1 en WSL 2

WSL is superhandig, veelzijdig en volop in ontwikkeling. Er zijn twee smaken WSL. WSL 1 vertaalt Linux Kernel system calls naar WinNT kernel system calls (zeg maar WINE, maar dan andersom). WSL 2 werkt met een Lightweight Utility VM. Het feit dat WSL 2 gebruikmaakt van virtualisatie (op basis van HyperV) heeft zo z’n nadelen, maar zeker ook voordelen. Daar vertellen we je graag meer over in de aankomende Conclusion Xforce kennissessie over WSL op donderdag 29 april 2021. 

Virtuele machines draaien in een virtuele machine

De Lightweight Utility VM biedt veel mogelijkheden. De leukste hiervan is misschien wel nested virtualisatie, oftewel het draaien van virtuele machines in een virtuele machine (de Lightweight Utility VM in het geval van WSL 2). Dit is een van de nieuwe features die wordt geïntroduceerd in de aankomende update van WSL 2. Maar met wat kunst-en-vliegwerk kun je er dus ook al mee spelen op basis van de huidige versie van WSL 2.

In deze blog nemen we je hier stap voor stap in mee. We hebben het getest op hardware met een Intel-processor en de volgende uitgaven van Windows 10:

  • Windows Professional 10.0.19042 N/A Build 19042
  • Windows Enterprise 10.0.19042 N/A Build 19042
  • Windows Home 10.0.19042 Build 19042

De installatie van WSL 2 valt buiten de scope van deze blog. Op de site van Microsoft lees je hoe je dit doet: https://docs.microsoft.com/en-us/windows/wsl/install-win10.

Extra WSL distributie creëren

We beginnen met het creëren van een extra WSL distributie. We willen voor dit experiment namelijk niet je huidige WSL Ubuntu installatie aanpassen, maar je kunt deze er wel voor gebruiken als je wilt. Nog een keer dezelfde distributie halen uit de Microsoft Store gaat niet, daarom gebruiken we Powershell om een extra installatie van Ubuntu20.04 te downloaden.

  • Start powershell en maak in je homedirectory een wsl-distros directory:
    cd ~
    mkdir wsl-distros
    cd wsl-distros
  • Download nu Ubuntu met de Invoke-WebRequest cmdlet:
    Invoke-WebRequest -Uri
    https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64-wsl.rootfs.tar.gz -OutFile kvm.tar.gz -UseBasicParsing
    NB Dit duurt een tijdje, in de tussentijd kun je alvast verdergaan met het installeren van WinDbg Preview uit de Microsoft Store en het downloaden van de benodigde scripts (verderop in deze blog beschreven).
  • Importeer de Ubuntu WSL distributie onder de naam ‘kvm’ met wsl import:
    wsl --import kvm ./kvm kvm.tar.gz --version 2
    NB Let op dat je importeert als version 2.
  • Start nu de kvm wsl distributie
    wsl -d kvm
  • Update de distributie en installeer de volgende pakketten:
    apt update
    apt upgrade
    apt -y install build-essential libncurses-dev bison flex libssl-dev libelf-dev cpu-checker qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils libvirt-daemon-system-sysv virt-manager
Nested virtualization activeren

Als je nu het commando 'kvm-ok' uitvoert, zul je het volgende zien:

INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used

Dat probleem gaan we nu fixen door het geschikt maken van de Lightweight Utility VM voor nested virtualisatie. Voor een ‘normale’ Hyper-V VM zet je dit aan met de ‘Set-VMProcessor’ Powershell CMDlet, maar de Lightweight Utility VM wordt op een andere manier gemanaged (met HCS en daarom vind je deze bijvoorbeeld ook niet terug in de Hyper-V Manager). Bovendien wordt de Lightweight Utility VM elke keer opnieuw aangemaakt bij het starten van de eerste WSL instantie. Dit betekent dus dat we nested virtualisatie op een andere manier moeten activeren.

Dit doen we met behulp van WinDbg Preview en een aantal scripts. Je vindt deze op de Conclusion Xforce Github-pagina: https://gitlab.com/conclusionxforce/automation/public/wsl2-nested-virtualization.

Deze scripts zijn afgeleid van het origineel, dit is te vinden op: https://gist.github.com/steffengy/62a0b5baa124830a4b0fe4334ccc2606.

  • Ga naar de Microsoft Store, zoek naar ‘WinDbg Preview’ en installeer deze.
    Stop vervolgens de Lightweight Utility VM, maar LET OP(!) dit impliceert ook dat al je reeds draaiende WSL distributies de nek worden omgedraaid. Sluit deze dus eerst netjes af!
  • Start Powershell en typ in:
    wsl --shutdown
  • Haal het run-luvm.bat en script.js van de Conclusion Xforce git repository en zet deze ergens op je systeem. Het maakt niet zoveel uit waar je dat doet, als je ze maar weer kunt terugvinden en ze bij elkaar in dezelfde map hebt staan.
  • Start nu Powershell weer, maar dit keer met ‘Run as Administrator’. Want we gaan de LxssManager Windows Services herstarten in het run-luvm.bat script en dat is een beschermd proces.
  • Start het run-luvm.bat script in Powershell:
     ./run-luvm.bat
    Wacht tot de Windows debugger volledig door dit script is gestart.
    NB Soms krijg je, met name bij de eerste keer, de foutmelding ‘The RPC server is unavailable’ te zien in het WinDBG Preview scherm. Dit komt omdat dan de WinDBG niet snel genoeg is geïnitialiseerd. Let dus goed op deze melding, want die betekent dat het niet werkt. De oplossing is echter simpel: probeer het nog een keer.
  • Nu kun je de eerder gecreëerde ‘kvm’ (of elke andere) WSL distributie weer starten: wsl -d kvm
    NB Dit hoeft niet in hetzelfde Powershell venster met Administrator-rechten (liever niet zelfs).
  • Wanneer je nu ‘kvm-ok’ opstart, zie je:
    INFO: /dev/kvm exists
    KVM acceleration can be used
Bijna klaar voor virtualisatie

Virtualisatie is nu mogelijk, maar je moet nog een paar kleine dingen doen voordat je KVM kunt starten. 

  • Qemu logt standaard naar systemd-logd, maar een WSL distributie maakt geen gebruik van systemd. Voeg daarom het volgende toe aan /etc/libvirt/qemu.conf:
    stdio_handler = "file"
  • Zet wat rechten goed op /dev/kvm
    chown root:kvm /dev/kvm
    chmod 660 /dev/kvm
  • Nu kun je libvirtd starten:
    service libvirtd start

Wanneer je op Windows een X server hebt geïnstalleerd (ook dit valt buiten de scope van deze blog), kun je virt-manager starten en een VM creëren. Anders kun je helemaal los gaan met virsh en virt-install.

Nested virtualisatie straks out-of-the-box

WSL 2 en zijn Lightweight Utility VM, die in de volgende release nested virtualisatie out-of-the-box zal ondersteunen, biedt je eindeloze mogelijkheden – zeker als je vervolgens KVM installeert. Wat dacht je bijvoorbeeld van MacOS draaien op Windows10 met WSL 2? Deze link vonden we, maar hebben we zelf niet getest: https://dev.to/nicole/running-macos-on-windows-10-with-wsl2-kvm-and-qemu-21e1.

Krijg jij het voor elkaar?
Business Done Differently Powered by Conclusion
© Conclusion 2021   |  De kleine lettertjes  |  Privacy
  • Expertises
© Conclusion 2021   |  De kleine lettertjes  |  Privacy