Subsystem for Linux 2 (WSL 2) in Windows 10 2004 und Server 2004 installieren

    Ubuntu on WindowsMitte 2019 kündigte Microsoft die Version 2 von Windows Subsystem for Linux (WSL 2) an. Sie nutzt im Hinter­grund eine leicht­gewichtige virtu­elle Maschine und umfasst einen voll­ständigen Linux-Kernel. Dies soll zu einer höheren Perfor­mance führen und die Kompa­tibilität mit Linux-Programmen ver­bessern.

    Bereits die erste Version von WSL eröffnete interessante Möglich­keiten wie das Ausführen unmodi­fizierter ELF64-Programme, die auch auf das Windows-Dateisystem zugreifen können. Gleichzeitig stellt es einen Großteil des Unix-Werkzeug­kastens zur Verfügung, ohne dass man dafür Portierungen wie Cygwin benötigt.

    Bei der Version 1 verwies Microsoft noch explizit darauf, dass WSL auf einer Erweiterung des Windows-Kernels beruhe und daher eine engere Inte­gration zwischen den beiden Systemen biete als wenn man Linux in einer VM unter Hyper-V ausführt. Mit WSL 2 versucht Microsoft nun, das Beste aus diesen beiden Ansätzen zu kombinieren.

    Linux-Kernel läuft in VM

    Der künftig mit Windows ausgelieferte Linux-Kernel läuft in einer schlanken virtuellen Maschine, die man nicht selbst anlegen muss und die auch keine Installation von Hyper-V erfordert. Dieses Konzept einer Utility-VM liegt bereits anderen Features wie der Windows Sandbox oder der Virtualization Based Security (beispielsweise Credential Guard) zugrunde.

    Anstatt wie vorher viele System-Calls von Linux-Programmen auf die Windows-API zu übersetzen, können sie nun die nativen Schnittstellen des Linux-Kernels nutzen. Dadurch lassen sich mehr Anwendungen unter WSL ausführen als zuvor, darunter auch Docker-Container.

    EXT4-Dateisystem in VHDX

    Ein weiterer Effekt dieses Architektur­wechsels besteht darin, dass Microsoft kein hybrides Dateisystem mehr benötigt, bei dem jenes für Linux unter %localappdata% eingehängt wird. Vielmehr nutzt WSL 2 innerhalb der VHDX ein natives EXT4. Den Speicherort dieses virtuellen Laufwerks ermittelt man beispielsweise bei Ubuntu mit

    "$env:LOCALAPPDATA\Packages\" + (Get-AppxPackage -Name Canonical*).PackageFamilyName

    Gerade die Dateizugriffe sollen sich Microsoft zufolge deswegen in WSL 2 deutlich beschleunigen, solange man sich mit den Linux-Programmen innerhalb des root-Dateisystems bewegt. Dieser Performance-Gewinn fällt weg, sobald man Dateioperationen auf Windows-Laufwerken ausführt, die unter /mnt eingehängt werden, also etwa /mnt/c für C:.

    Der Explorer lässt sich auch für das Linux-Dateisystem nutzen.

    Ein weiterer Fortschritt besteht darin, dass Windows-Programme nun auch auf das Linux-Dateisystem zugreifen können. So kann man etwa den Explorer nutzen, um Dateien zu kopieren oder zu löschen.

    Nachteile der neuen Architektur

    Der Einsatz von Virtualisierungs­technik bringt aber auch Nachteile mit sich. Sie äußern sich nicht, wie man vermuten könnte, durch eine geringe Integration der beiden Welten. Die Ausführung einer VM stellt aber höhere Anforderungen an die Hardware. Die meisten physischen Rechner mit modernen CPUs erfüllen diese leicht, Support für Intel VT oder AMV-V sind dort Standard.

    Anders sieht es aus, wenn man Windows 10 oder einen SAC-Server in einer VM ausführt. In diesem Fall benötigt man Nested Virtualization, damit WSL 2 eine VM in der VM nutzen kann.

    Besonders unter Windows 10 kommt hinzu, dass der vermehrte Einsatz von Utility-VMs andere Hypervisor wie VirtualBox oder VMware Workstation ausbremst (Letztere soll in der nächsten Version auch auf Hyper-V laufen, VirtualBox unterstützt seit der Version 6.0 ein Fallback auf Hyper-V, wenn auch auf Kosten der Performance).

    Wer damit ein Problem hat, kann auf absehbare Zeit weiterhin WSL 1 nutzen und es ist auch möglich, zwischen den beiden Versionen umzuschalten.

    Installation von WSL 2

    Das Subsystem für Linux 2 ist in den aktuellen Previews für Windows 10 20H1 und Server im Semi-annual Channel mit an Bord und soll im endgültigen Release als neues Feature dabei sein. Auf Windows Server 2019 wird WSL 2 nicht unterstützt.

    Die Installation hat sich gegenüber WSL 1 nicht grundsätzlich verändert. Man fügt WSL 2 wie gehabt als optionales Feature über die Systemsteuerung hinzu. Das aktiviert aber nicht die notwendige Virtualisierungs­funktion, das muss man über PowerShell tun:

    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

    Dieser Schritt ist aber nicht erforderlich, wenn auf dem Rechner bereits Hyper-V oder das Sandbox-Feature läuft.

    Subsystem für Linux über die Systemsteuerung als optionales Feature aktivieren.

    Der ganze Vorgang lässt sich auch vollständig über die Kommando­zeile erledigen. Dies ist unter Windows Server im SAC ohnehin erforderlich, da es dort nur die Core-Variante gibt.

    Im ersten Schritt aktiviert man dabei das eigentliche WSL-Feature über PowerShell. Dafür ruft man

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

    auf, beim Server funktioniert auch

    Install-WindowsFeature -Name Microsoft-Windows-Subsystem-Linux

    Danach schaltet man, wie oben gezeigt, die Virtualisierungs­funktionen frei:

    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

    Virtualisierungsfunktionen für WSL 2 über die Kommandozeile aktivieren

    WSL-Version festlegen

    Nach dem Neustart steht das Kommandozeilen-Tool wsl.exe zur Verfügung, mit dem man unter anderem zwischen WSL 1 und 2 umschalten kann. Vor der Installation der ersten Distribution empfiehlt es sich, WSL 2 durch den Aufruf von

    wsl.exe --set-default-version 2

    zu aktivieren. Es besteht aber auch die Möglichkeit, die WSL-Version für jede Linux-Distribution individuell zu wählen, und zwar nach dem Muster

    wsl.exe --set-version <Name-der-Distribution> 2

    Den genauen Namen der Distributionen ermittelt man mit

    wsl.exe -l -v

    Linux-Distribution hinzufügen

    Nun kann man sich daran machen, eine Linux-Distribution zu installieren. Dies lässt sich unter Windows 10 einfach über den Microsoft Store bewerkstelligen. Alternativ lädt man ein Paket über den Browser von der Adresse herunter, die auf dieser Seite von Microsoft Docs angegeben ist.

    Anschließend fügt man dieses bei Ubuntu über den Befehl

    Add-AppxPackage CanonicalGroupLimited.Ubuntu18.04onWindows_[…].Appx

    hinzu.

    Ubuntu 18.04 als Distribution für WSL mittels Add-AppxPackage installieren

    Mittels

    Get-AppxPackage Canonical*

    findet man heraus, wo das Paket installiert wurde und schaut, wie die ausführbare Datei heißt. Im Fall von Ubuntu 18.04 ist der Name ubuntu1804.exe. Beim ihrem ersten Aufruf installiert sich das Linux und es erwartet dann gleich die Eingabe eines Benutzers und eines Passworts.

    Distribution unter Server Core einrichten

    Unter Server Core funktioniert dieses Vorgehen nicht, weil dort ein Web-Browser fehlt und sich APPX nicht regulär installieren lassen. Daher bemüht man PowerShell für den Download mit dem Aufruf von Invoke-WebRequest und einer URL aus der oben genannten Quelle. Bei Ubuntu wäre das

    Invoke-WebRequest https://aka.ms/wsl-ubuntu-1804 -OutFile ubuntu-1804.zip `
    -UseBasicParsing

    Beim Download mit Invoke-WebRequest sollte man unter Server Core den Schalter UseBasicParsing verwenden.

    Bei APPX handelt es sich um ein ZIP-Archiv mit einer anderen Dateiendung. Der obige Beispiel-Download speichert das Paket gleich mit der Extension .zip, weil das Cmdlet Expand-Archive sonst seinen Dienst verweigern würde. Mit dessen Hilfe entpackt man die Distribution:

    Expand-Archive -Path .\ubuntu-1804.zip

    Der Inhalt des Archivs findet sich dann im Unterverzeichnis .\ubuntu-1804, wo man die .exe-Datei startet, um das Linux einzurichten.

    Ubuntu 18.04 auf WSL 2 in Windows Terminal

    Falls man auf dem Rechner Windows Terminal einsetzt, dann erhält es automatisch einen Eintrag für die eben installierte Distribution und man kann von dort direkt die bash starten.

    Keine Kommentare