Windows Subsystem for Windows (WSL) installieren

Seit geraumer Zeit bietet Microsoft über das Dienst­programm wsl.exe eine verein­fachte Instal­lation von WSL an. Die meisten Anlei­tungen be­ziehen sich mittler­weile auf diese Methode. Ganz so simpel ist dies in der Praxis ganz und gar nicht, weil dieser Aufruf längst nicht überall funkt­ioniert und sich nur für WSL2 eignet.

Idealerweise sollte sich das Subsystem für Windows auf allen unterstützten Windows-Versionen mit dem gleichen Befehl installieren, aktualisieren oder entfernen lassen. Davon kann jedoch keine Rede sein. Das Problem sind aber nicht verschiedene Methoden, die alle zum gleichen Ziel führen, sondern die Inkonsistenzen zwischen den OS-Versionen und WSL-Implementierungen.


Für die Bereitstellung von WSL muss man daher folgende Varianten und Schritte in Betracht ziehen:

Simples Setup mit wsl.exe

Die einfache Installationsvariante besteht im Aufruf von

wsl --install

Dieses Kommando richtet WSL ein und installiert dazu gleich noch die Standarddistribution von Linux, das ist derzeit Ubuntu. Wünscht man eine andere Distro, dann kann man diese mit dem Schalter -d bzw. --distribution angeben.

Damit man weiß, wie diese genau heißt, ruft man wsl.exe so auf:

wsl --list --online

Verfügbare Linux-Distributionen anzeigen

Um Debian zu installieren, sieht der Aufruf folgendermaßen aus:

wsl.exe --install -d Debian

WSL auf Server Core einrichten

Die einfache Installation mittel wsl.exe funktioniert in der Regel in Windows 11 und Server 2022, allerdings nur beim Server mit Desktop. Auf Server Core bricht der Aufruf entweder kommentarlos ab oder hängt für eine längere Zeit und verabschiedet sich dann mit einem Fehler 0xc004000d, wenn die Virtualisierungs­erweiterungen (in einer VM) nicht verfügbar sind.

Eine weitere Einschränkung dieser Installationsvariante besteht darin, dass sie nur WSL2 unterstützt. Benötigt man WSL1, etwa weil man Windows in einer VM ausführt und eine Nested Virtualization nicht möglich ist, dann muss man jene WSL-Version installieren, die nach wie vor zum Lieferumfang von Windows gehört. Dieses optionale Feature enthält auch WSL2, das aber nicht mehr aktualisiert wird.

Installiert man das Subsystem über wsl.exe, dann erhält man nur die zweite Generation (WSL2).

Grundsätzlich eignet sich wsl.exe auch zur Installation des mit Windows ausgelieferten Subsystems, denn es bietet dafür einen eigenen Schalter:

wsl --install --inbox

Das Problem ist nur, dass wsl.exe in Windows Server 2022 Core den Schalter --inbox nicht unterstützt. Und in Windows Server 2019 ist das Utility generell erst nach der Installation des optionalen Features an Bord.

WSL als optionales Feature einrichten

Wenn sich das Subsystem für Linux auf einer Windows-Version nicht über wsl.exe installieren lässt, dann muss man den herkömmlichen Weg beschreiten. Dazu nutzt man auf einem Client die Funktion Windows Features aktivieren oder deaktivieren in der Systemsteuerung, auf dem Server übernimmt der Wizard für das Hinzufügen von Rollen und Features diese Aufgabe.

Alternativ führt man in PowerShell dieses Kommando aus:

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

Auf dem Server funktioniert alternativ auch

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

Auf Windows Server 2019 ist die Aufgabe damit vorerst erledigt, da man hier nur WSL1 bekommt. Wenn man WSL2 unter Server 2022 verwenden möchte, dann muss man zusätzlich die VM-Plattform aktivieren:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

Subsystem für Linux als Feature in Server Manager hinzufügen

Nach einem Neustart erhält man zwar WSL2, muss aber den Linux-Kernel noch separat durch

wsl.exe --update

hinzufügen. Das klappt jedoch unter Server Core nicht, so dass man hier auch bei Server 2022 auf WSL1 stehen bleibt.

Die Ausführung von wsl --update scheitert unter Server Core, so dass man keinen Linux-Kernel für WSL2 bekommt.

Previews installieren

Wie bei anderen Windows-Komponenten, die unabhängig vom Betriebs­system entwickelt werden, beispielsweise PowerShell oder Windows Terminal, kann man auch WSL in den aktuellen Vorschau­versionen ausprobieren.

Dazu bietet wsl.exe als Ergänzung zu --install den Schalter --pre-release:

wsl --install --pre-release

Unterstützt wird dieser aber zurzeit nur auf Insider-Previews von Windows 11. Auf anderen Versionen muss man die WSL-Installationsdatei von GitHub her­unter­laden und ausführen.

Wenn man eine Preview auf die neueste Version aktualisieren möchte, dann führt

wsl --upgrade

nicht zum Ziel. Vielmehr muss man erst die veraltete Preview entfernen und die neueste mit obigem Befehl installieren.

Installation mittels winget

WSL steht auch als Paket für winget zur Verfügung. Allerdings erhält man auch damit keine einheitliche Installations­option, weil der Paket-Manager auf Windows Server nicht unterstützt wird und erst selbst eingerichtet werden müsste.

Theoretisch kann man WSL mit winget jedoch auf Windows 10 / 11 installieren:

winget install "Windows Subsystem for Linux"

Praktisch blieb die Installation bei meinem Test jedoch hängen und wurde nie erfolgreich abgeschlossen.

WSL-Version festlegen

Vor der Installation der ersten Distribution empfiehlt es sich zu prüfen, welche WSL-Version installiert ist:

wsl.exe --status

Standardmäßig aktiviert Microsoft mittlerweile WSL2. Dies kann man auch explizit durch diesen Aufruf sicherstellen:

wsl.exe --set-default-version 2

Es besteht aber zudem 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

Linux-Distribution hinzufügen

Nun kann man sich daran machen, Linux-Distributionen zu installieren. Dies erfolgt pro User, so dass jedes Konto seine eigene Kopie der Distros erhält. Wenn man das Subsystem über wsl.exe hinzugefügt hat, dann ist entweder das standardmäßige Ubuntu oder die bei der Installation angegebene Distro bereits vorhanden (es sei denn, man hat den Schalter --no-distribution angegeben).

Weitere Distros fügt man über

wsl.exe --install -d <Distro>

hinzu. Hat man das optionale Feature aus dem Lieferumfang des Betriebs­systems eingerichtet, dann kann es bei diesem Kommando einen Fehler 0x8000ffff setzen.

Alternativ lädt man auf Client-Systemen diese auch vom Microsoft Store herunter.

Aktuelle Distro von Github laden

Die oben beschriebene Methode holt sich die Distributionen vom Microsoft Store. Möchte man das aktuellste Release einer Distro von Github herunterladen, dann würde der Aufruf so aussehen:

wsl.exe --install -d Debian --web-download

Dies hat jedoch den unschönen Nebeneffekt, dass sich die Distro mit wsl -t oder wsl --unregister nicht mehr beenden oder entfernen lässt.

Obwohl wsl -l die mit dem Schalter web-download installierte Distro anzeigt, lässt sie sich nicht mit diesem Tool entfernen.

In diesem Fall muss man die Distro über die App Einstellungen oder mittels PowerShell entfernen:

Get-AppxPackage -Name *kali* | Remove-AppxPackage

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.

Die Links dafür sind:

Für Ubuntu setzt man diesen Befehl ab:

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

Beim Download unter Server Core mit Invoke-WebRequest sollte man 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 Linux einzurichten.

Distro und WSL löschen

Möchte man eine Distro aus WSL entfernen, dann beendet man diese mit

wsl.exe -t <Name-der-Distro>

und löscht sie mit diesem Befehl

wsl.exe --unregister <Name-der-Distro>

Wenn man eine Distribution nicht über wsl.exe installiert hat, dann kann man sie mit diesem Utility auch nicht entfernen. In diesem Fall nutzt man, wie oben gezeigt, die App Einstellungen oder PowerShell.

WSL in Windows Terminal einbinden

Wenn man Windows Terminal auf einem Rechner installiert, auf dem WSL bereits vorhanden ist, dann legt es automatisch Profile für die hinzugefügten Distros an. Daher kann man aus dem Menü mit den installierten Shells sofort ein neues Fenster für die bash öffnen.

Automatisch erstelltes Profil für Ubuntu 18.04 in Windows Terminal

Nachdem das Terminal in Windows 10 und 11 mittlerweile vorinstalliert ist und neu hinzugefügte Shells nicht automatisch registriert, muss man Profile für die verschiedenen Linux-Distros selbst einrichten.

Dazu öffnet man die Einstellungen des Terminals und führt den Befehl Neues Profil hinzufügen aus. Im nächsten Fenster klickt man auf Duplikat und kopiert das Profil für PowerShell. Anschließend bearbeitet man das neue Profil, ändert dort den Namen und passt die Befehlszeile an. Dabei ersetzt man

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe

durch

%SystemRoot%\System32\wsl.exe -d <Name der Distro>

PowerShell-Profil in Windows Terminal kopieren und für Ubuntu anpassen

Zusammenfassung

Microsoft versucht zwar, die Installation des relativ komplexen Subsystems für Linux mittels wsl.exe zu vereinfachen. In der Praxis funktioniert dies einigermaßen unter Windows 11, solange man dort kein WSL1 benötigt. Sonst hat man es jedoch mit zwei WSL-Varianten zu tun, jener aus dem Store und der im OS enthaltenen.

Erschwerend kommt hinzu, dass wsl.exe je nach Windows-Version verschiedene Parameter unterstützt. Häufig fehlt sogar --version, von den verschiedenen Schaltern für --install ganz zu schweigen. Und für die Installation des optionalen Features braucht man ohnehin andere Mittel.

Weitgehend unübersichtlich ist die Lage auf dem Server. Im Unterschied zu Server 2019 unterstützt Microsoft zwar WSL2 auf Server 2022. In der Praxis lässt sich dieses in der Core-Variante aber nicht einrichten.

Source link

Loading...