-
Windows Subsystem für LinuxMit dem Windows Subsystem for Linux (WSL) hat man (fast) alle Vorteile eines Linux Systems in einer Windows-Umgebung.
-
Lando und DockerMit Lando lassen sich Docker Container über simple Konfigurationsdateien starten.
-
Windows TerminalAlle Windows Terminal Applikationen (CMD, PowerShell, WSL) werden in einer Applikation vereint.
Das Wichtigste in Kürze
Inhalt
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:
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:
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise -Alpine WSL
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.
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.
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:
Ä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.
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.
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.
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.
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"
}
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.