Windows Subsystem for Linux

von Andi Moser

    Das Wichtigste in Kürze

  • Windows Subsystem für Linux
    Mit dem Windows Subsystem for Linux (WSL) hat man (fast) alle Vorteile eines Linux Systems in einer Windows-Umgebung.
  • Lando und Docker
    Mit Lando lassen sich Docker Container über simple Konfigurationsdateien starten.
  • Windows Terminal
    Alle Windows Terminal Applikationen (CMD, PowerShell, WSL) werden in einer Applikation vereint.

Windows Subsystem for Linux

Lange Zeit galt Windows nicht als erste Wahl für die Webentwicklung. Beinahe alle modernen Webserver laufen in einer Linux-Umgebung, weshalb viele Entwickler gleich selbst auf Linux oder dem Unix-basierten Mac entwickeln. Doch diese Situation hat sich in naher Vergangenheit geändert, als Microsoft mit WSL einen «Gamechanger» veröffentlicht hat. WSL (Windows Subsystem for Linux) ermöglicht es eine virtuelle Linux Maschine direkt unter Windows und ohne grosse Leistungseinbussen zu betreiben. Mit wenigen zusätzlichen Tools kann man nun (beinahe) perfekt im gewohnten Windows-Umfeld entwickeln, während der Code nativ in einer Linux-Umgebung ausgeführt wird.

Dieser Beitrag beschreibt das Setup, um WLS unter Windows zu installieren und zu konfigurieren.

Dazu erstmals eine Übersicht der benötigten Komponenten:

  • WSL 2: Kernstück, welches erlaubt die virtuelle Linux Maschine zu starten
  • Docker for Windows: Unterstützung für Projekte, welche in einer Docker-Umgebung laufen
  • Lando: Einfaches Konfigurieren von Docker Containern
  • Windows Terminal: Um alle Terimalfenster in einer Applikation zu vereinen

Wieso WSL?

Bei der OFFLINE GmbH wird seit jeher auf Windows und Linux entwickelt. In einer gemischten Umgebung ist es schnell passiert, dass betriebssystemabhängige Probleme auftreten. Die Container Lösung «Docker» ermöglicht es, allen Entwicklern in exakt derselben Umgebung zu arbeiten, unabhängig vom verwendeten Betriebssystem.

Mit Lando wurde auch eine Möglichkeit gefunden, Docker Container einfach und schnell zu konfigurieren. Der Verwaltungsaufwand zu anderen Methoden wie z. B. «Docker Compose» ist dabei deutlich geringer. Ein paar Zeilen reichen aus, um einen LAMP-Stack zu starten.

Doch leider ist der native Docker-Support unter Windows mangelhaft. So kommt auch Lando unter Windows an seine Grenzen. Sporadische Fehlverhalten und extreme Performance-Einbussen machen das Arbeiten zur Qual. Zudem arbeitet man mit Lando + Docker für Windows immer noch mit einer Windows-Basis ‒ eine kompelett einheitliche Entwicklungsumgebung ist also auch mit diesem Setup noch nicht erreicht.

Genau hier kommt das Windows Subsystem for Linux ins Spiel. WSL ist zwar nicht ein voll ausgefleisches Linux und gewisse Linux-Pakete sind nicht 100% kompatibel, es reicht jedoch aus, um mit Lando Docker Container zu starten und eine Vielfalt and Linux-Tools unter Windows zu verwenden.

Installation WSL

Systemvoraussetzungen

WSL 2 ist für alle Windows 10 Versionen ab der Versionsnummer 1903 verfügbar. Auf ARM Systemen wird die Version 2004 vorausgesetzt.

WSL aktivieren

Öffne die Windows PowerShell als Administrator:

Powershell als Adimistrator öffnen

Aktiviere das WSL Feature mit folgendem Befehl:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Aktiviere die Plattform für virtuelle Maschinen mit folgendem Befehl:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Nach einem Neustart deiner Maschine bist du bereit, eine WSL Distribution zu installieren.

Auf WSL2 wechseln

WSL ist nun aktiviert und deine Maschine ist bereit, eine Linux Distribution laufen zu lassen. Diese wird jedoch noch mit dem alten WSL 1 System betrieben.

Wieso WSL2?

WSL2 bietet einige Vorteile gegenüber der Vorgängerversion. So ist z. B. das Filesystem komplett virtuell und es werden nicht mehr alle I/O Operationen auf das Windows Filesystem umgeleitet. Dies bedeutet eine massive Performancesteigerung.

Um auf WSL 2 zu wechseln sind noch folgende zwei Schritte nötig:

  • Lade das Kernel Update herunter und installiere es
  • Führe in einer PowerShell mit Administrator Rechten folgender Befehl aus um auf WSL2 zu wechseln:
wsl --set-default-version 2

Download Distribution

Öffne nun den Microsoft Store (ja, man kann im Microsoft Store Linux herunterladen!) und suche nach deiner gewünschten Distribution.

Zurzeit stehen folgende Distributionen zur Verfügung:

Ich empfehle Ubuntu 20.04 LTS, da diese Distribution bis ins Jahr 2025 offiziellen Support erhält.

Wenn die Distribution installiert ist, findet man diese ganz normal im Startmenu.

Ubuntu im Startmenu

Wird das Ubuntu System nun zum ersten Mal gestartet, installiert es zuerst noch eine Weile, bevor zum Schluss noch ein Benutzername und ein Passwort für das Linux System gesetzt werden muss.

Ubuntu Passwort setzen

Performance Tuning

Dateisysteme

Um die ganze Performance von WSL2 zu erhalten gibt es einen wichtigen Punkt zu beachten:

Alle Dateien sollten im virtuellen Filesystem liegen. WSL mounted alle Windows Laufwerke automatisch unter /mnt. Dies ist nützlich wenn man schnell eine Datei z.B. aus dem Downloads Ordner kopieren möchte, sollte einem aber nicht dazu verleiten den ganzen Code auf dem Windows Filesystem zu speichern da dies zu erheblichen Leistungseinbussen führt. Wie IDEs am besten auf Dateien innerhalb von WSL zugreift wird im nächsten Abschnitt beschrieben.

Ressourceneinschränkungen

WSL verwendet standardmässig bis zu 50% des Host-Memory bis zu maximal 8GB. Auf älteren Systemen oder wenn WSL nur spärlich eingesetzt wird kann dies für das Host System sehr belastend sein.

Die Einstellungen lassen sich jedoch sehr einfach in einer Konfigurationsdatei C:\Users\USERNAME\.wslconfig anpassen. Alle Einstellungen inklusive Standardwerte sind hier aufgelistet.

Für mich hat sich gezeigt dass die Standardeinstellungen meistens genügen, allerdings habe ich den maximalen Speicher auf 8GB begrenzt:

[wsl2]
memory=8GB

IDEs und WSL

Die einfachste und schnellste Möglichkeit das Projekt innerhalb von WSL zu öffnen ist über einen Netzwerkshare. WSL stellt eine Freigabe für alle installierten Distributionen unter \\wsl$\ zur Verfügung. Diese kann so auch zu einem Netzwerklaufwerk gemappt werden sodass der Zugriff nochmals etwas vereinfacht wird:

Netzwerklaufwerk einrichten

Änderungen an Dateien werden auf beiden Seiten sehr schnell übernommen. PHPStorm hat manchmal eine gewisse Zeit um neue Dateien anzuzeigen. Für Visual Studio Code gibt es eine Extension welche den Zugriff noch einfacher macht.

Installation Docker

Warum Docker für Windows?

Die Docker Engine lässt sich leider nicht direkt in der WSL Umgebung installieren. Docker für Windows bietet jedoch experimentellen Support an, Container direkt im WSL zu starten.

Nach der Installation von Docker für Windows, muss in den Einstellungen noch aktiviert werden, dass Docker das WSL System verwendet.

Docker Eisntellungen
Hinweis: Erkennt Docker WSL bei der Installation, ist dies standardmässig bereits aktiviert.

Installation Lando

De Installation von lando in dieser Umgebung ist leider nicht so einfach. Lando benötigt das Packet docker-ce, welches bei einer normalen Installation von Docker auf Linux installiert wird. Da Docker jedoch im Windows System läuft wird diese Abhängigkeit nicht erfüllt.

Als Erstes muss das aktuellste Lando Installationspacket (.deb Datei) heruntergeladen werden, am besten per wget. Danach muss dieses Paket mit dem Befehl sudo dpkg -i --ignore-depends=docker-ce lando-stable.deb installiert werden.

Lando in Ubuntu installieren

Abhängigkeit von docker-ce entfernen

Da apt nun bei jeder Installation von weiteren Paketen die fehlende Abhängigkeit bemerkt, muss docker-ce noch als Abhängigkeit entfernt werden.

In der Datei /var/lib/dpkg/status muss bei dem Eintrag für Lando die Abhängigkeit entfernt werden.

Abhängigkeit entfernen

Anschliessend muss noch der Befehl sudo apt install -f ausgeführt werden, damit die interne Abhängigkeitsdatenbank neu erstellt wird.

Installation Windows Terminal

Windows Terminal vereint alle CLI Applikationen (WSL, Powershell, cmd.exe) in ein handliches Tools. Es bietet im Vergleich zum Standard CLI Fenster von WSL mehr Funktionen wie z.B. mehrere Tabs oder horizontal/vertikales Aufteilen). Mit dem Shortcut [Ctrl] + [Shift] + [P] öffnet sich ein Action Menu mit welchem alle Funktionen einfach und schnell ausgeführt werden können.

Es lässt sich über den Microsoft Store installieren.

WSL in Windows Terminal einfügen

Damit im Terminal eine WSL Shell geöffnet werden kann, muss diese erst konfiguriert werden.

Dazu generiert man im Linux System zuerst mit uuidgen eine eindeutige ID für diese Umgebung.

UUID generieren

Dann kann man im Windows Terminal mit dem Shortcut Ctrl + , (Komma) die Terminal Einstellungen öffnen. Diese werden noch nicht in einer graphischen Oberfläche angezeigt, es öffnet sich lediglich eine JSON-Datei im Texteditor.

Um das Settings-File in einem anderen Texteditor zu öffnen, muss man es zuerst via Explorer suchen. Der Pfad hierzu ist nicht eindeutig, bei meiner Installation liegt das File im Ordner

C:\Users\andig\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState

In der JSON Datei fügt man nun unter Profiles -> List folgenden Code hinzu:

{
    "guid": "{UUID hier einfügen}",
    "hidden": false,
    "name": "Ubuntu-20.04",
    "source": "Windows.Terminal.Wsl"
}
UUID generieren

Zuoberst in der JSON-Datei kann man noch die standard UUID angeben. Ich habe dort ebenfalls mein WSL System hinterlegt, da ich das Terminal hauptsächlich für mein Ubuntu System benötige.

Mehr aus dieser Kategorie
Entwicklung
Hier findest du Blogartikel technischer Natur.
Weitere Beiträge anzeigen »

Los geht's!

Kontaktiere uns noch heute

Für Offerten, technische Anfragen oder einfach nur um Hallo zu sagen.