Windows Subsystem für Linux
- Einführung
- WSL 1 und 2
- WSL kompatible Distributionen
- WSL Installation
- Windows Feature aktivieren
- WSL Linux Distributionen als Store App nutzen
- WSL.EXE einsetzen
- Manuelle Installation (Windows Server)
- WSL einsetzen
- Linux Prozesse starten
- WSL Konfiguration
- Datei Austausch
- Weiterführende Links
Einführung
Das Windows Subsystem for Linux
(kurz WSL) ist eine Schnittstelle ab Microsoft Windows 10
und Server 2016, mit der
native Linux Programme innerhalb
von Windows ausgeführt werden können.
WSL 1 und 2
Version 1 von WSL wurde als Beta Version in Windows 10 1607 (August 2016)
eingeführt. WSL 1 erzeugt für jeden Linux-Prozess einen angepassten NT
Prozess und fängt Kernel-Aufrufe ab um sie in Windows-NT äquivalente
Aufrufe zu übersetzen.
Version 2 von WSL wurde 2018 angekündigt und fand final 2020 Einzug in alle
Windows Produkte. WSL 2 arbeitet mit Hyper-V
Techniken und nutzt einen eigenen angepassten Linux-Kernel in einer virtuellen
Maschine um Linux Anwendungen nativ auszuführen.
WSL 1 richtete sind in erste Linie an Entwickler, um die Übersetzung von
Linux Programmen auf Windows Systemen zu ermöglichen. Seine Vorteile liegen
in der direkten Ausführung von Prozessen innerhalb der Windows Umgebung
und der direkten Nutzung des Dateisystems.
Die Performance des Dateisystems ist hingegen auch der größte Nachteil von
WSL 1, da Dateizugriffe um ein vielfaches langsamer arbeiten, als auf einem
nativen oder virtualisiertem Linux System.
Außerdem sind spezielle Dienste wie Docker
mit diesem Ansatz nicht möglich, da entsprechende Kernel-Aufrufe nicht
implementiert sind.
Durch die Nutzung der Virtualisierungstechnik Hyper-V sind Dateisystemzugriffe
in WSL 2 fast annähernd so schnell wie auf einem nativen Linux-System geworden
und diverse Schnittstellenprobleme der Vorgängerversion sind gelöst.
Das Dateisystem ist nun jedoch nicht mehr direkt zugänglich, deshalb müssen
der Windows-Host und der Linux-Bereich über Netzwerkschnittstellen
kommunizieren.
(z.B.: \\wsl$\Ubuntu-18.04\usr\bin
verweist auf /usr/bin
in der Ubuntu Distribution.)
WSL kompatible Distributionen
Während ursprünglich nur Ubuntu als
primäre Distribution angeboten wurden, stehen heute mehrere Linux
Distributionen für WSL bereit.
Linux Distributionen sind in WSL von einander getrennt, jede läuft mit einem
eigenen virtuellen Dateisystem.
WSL kann als “optionales Windows-Feature” aktiviert werden und im Anschluss
kann der Benutzer über den Windows Store oder manuell eine Linux Distribution
auf sein System übertragen.
WSL Installation
WSL ist auf einem nackten Windows 10/11 oder Server 2016/2019/2022 nicht
aktiviert.
Um WSL nutzen zu können, muss man:
- Das WSL Windows Feature im System aktivieren
- Eine Linux Distribution herunterladen
- Die Linux Distribution im System installieren
Während in Windows 10/11 Linux Distributionen im
Windows Store per Klick
ausgewählt und installiert werden können, fehlt diese Option in den Windows
Server Varianten.
Auf älteren Server-Editionen muss man die Distribution als App-Paket
manuell herunterladen und das Setup per Hand ausführen.
Neuere Server (z.B. 2022) tragen die neueste Version von WSL.EXE
in sich,
mit welchem diese Schritte automatisiert durchgeführt werden können.
Windows Feature aktivieren
Das “optionale Windows Feature” kann entweder über die Windows UI,
mit dism.exe
oder mit der Powershell
installiert werden.
- Mit
dism
:
Einfach cmd.exe
als Administrator starten und
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all
eintippen.
- Mit Powershell:
In der Powershell mit Administrator-Rechten, führt man
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
aus.
- Windows 10/11 Systemsteuerung:
Man öffnet die Systemsteuerung
, wählt dann Programme und Features
und
klickt links auf Windows Features aktivieren oder deaktivieren
.
Im nachfolgend Dialog muss Windows Subsystem für Linux
ausgewählt und mit
OK installiert werden.
- Windows Server Manager:
Am Windows Server nutzt man den Server Manager
und wählt im Menü Manage
und darunter Add Roles and Features
, klickt im Wizard weiter, bis man zu
den Features
kommt und wählt dann Windows Subsystem for Linux
aus.
Danach muss in jedem Fall Windows neu gestartet werden, womit die Installation
abgeschlossen wird. Ab dem nächsten Login ist WSL in Windows integriert
und kann mit Linux Distributionen benutzt werden.
WSL Linux Distributionen als Store App nutzen
In Windows 10/11 findet man Linux Distributionen ganz einfach in der
Windows Store App.
Man sucht einfach nach “Ubuntu”,
“Debian”,
“SUSE”,
“Alpine” oder
“Kali Linux”
und lässt den Windows Store die Distribution herunterladen und installieren.
Im Startmenü wird automatisch ein Eintrag angelegt, und wenn dieser das erste
Mal ausgeführt wird, wird die Distribution eingerichtet und der Benutzer
muss noch einen Linux Benutzeraccount benennen und ein Passwort eintragen.
Künftige Starts nutzen dann diesen Account, um die Linux-Shell zu starten.
WSL.EXE einsetzen
Mit den späteren Versionen von Windows 10 (21H1+), Windows 11 und Server 2022
ist mit wsl.exe
ein Tool vorhanden, das Distributionen aus dem Internet
anzeigen, herunterladen und installieren kann.
Hinweis: wsl.exe
war schon in früheren Windows 10 und Server 2019
Varianten enthalten, hatte jedoch in limitierteres Funktionsset. Daher werden
die nachfolgenden Kommandos nicht alle auf diesen älteren Systemen laufen.
wsl --list --online
Zeigt eine Liste von offiziellen WSL-Images an, die über wsl.exe
benutzt
werden können.
z.B.: Ubuntu-18.04
oder openSUSE-42
wsl --install -d DISTRONAME
Installiert eine Distribution mit Namen DISTRONAME
. Aktuelle
Installationsbeispiele sind:
1 wsl --install -d Debian
2 wsl --install -d Ubuntu-16.04
3 wsl --install -d Ubuntu-18.04
4 wsl --install -d Ubuntu-20.04
5 wsl --install -d kali-linux
6 wsl --install -d openSUSE-42
7 wsl --install -d SLES-12
Manuelle Installation (Windows Server, älteres Windows 10)
Unter Windows Server 2019 fehlen die neuen Features von wsl.exe
und es ist
auch keine Store App vorhanden. Um WSL Distributionen nutzen zu können, muss
man die App-Pakete manuell herunterladen, entpacken und ihr Setup ausführen.
Die heruntergeladene .appx
Datei ist intern als ZIP
Datei aufgebaut und beinhalt die notwendigen Dateien und ein Setup Programm (.exe
).
Man kann also die .appx
Datei in eine .zip
Datei umbenennen und mit Tools
wie 7-zip entpacken und am Ende die
darin liegende EXE Datei ausführen, die die Distribution installiert.
Das ganze geht aber auch über die Windows Konsole cmd.exe
:
1 curl -L -o opensuseleap15-2.appx https://aka.ms/wsl-opensuseleap15-2
2 mkdir d:\wsl\opensuse-15
3 tar -xf opensuseleap15-2.appx -C d:\wsl\opensuse-15
4 dir d:\wsl\opensuse-15\*.exe
5 cd d:\wsl\opensuse-15
6 openSUSE-Leap-15.2.exe
Die .exe
heißt in jeder Distribution etwas anders, im Falle von OpenSUSE 15
wäre es: openSUSE-Leap-15.2.exe
, bei Ubuntu 20.04 wäre es ubuntu2004.exe
.
Alternativ kann man die gleichen Schritte auch in der Powershell durchführen:
1 Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 `
2 -OutFile Ubuntu-20.04.appx -UseBasicParsing
3 Rename-Item .\Ubuntu-20.04.appx .\Ubuntu-20.04.zip
4 mkdir d:\wsl\ubuntu-20.04
5 Expand-Archive .\Ubuntu-20.04.zip d:\wsl\ubuntu-20.04
6 dir d:\wsl\ubuntu-20.04\*.exe
7 cd d:\wsl\ubuntu-20.04
8 ubuntu2004.exe
Mit der manuellen Installation kann man den Installationsort selbst bestimmen,
während eine Installation über den Windows Store immer in einem Unterordner
von C:\Users\%USERNAME%\AppData\Local\Packages
landet.
WSL einsetzen
- Eine Windows-Store Installation legt Startmenü Einträge an, über welche
man eine Distributions-Shell problemlos starten kann.
- Bei einer manuellen Installation kann man die
EXE
Datei der Distribution
direkt nutzen, um eine Shell der Linux Distribution zu starten.
- Und wer eine moderen Installation besitzt, kann per
wsl.exe
die
Ausführung anstoßen und auch verscripten.
Linux Prozesse starten
Startet man eine WSL Distribution ohne weitere Parameter, so startet man die
Linux-Shell (für gewöhnlich /bin/bash
) des dort eingerichteten Benutzers.
Und von dort aus kann man manuell jedes andere Linux Tool starten, das man
braucht.
Manchmal will man aber einfach nur einen Prozess oder einen Dienst starten.
Besonders wenn man einen Ablauf automatisieren möchte oder Windows Scripts
nutzt, die ein einzelnes Linux-Kommando ausführen sollen, braucht man eine
Möglichkeit, Prozesse ohne die interaktive Shell zu starten.
Prozess mit wsl.exe ausführen.
Hinter dem Kommando wsl.exe -d DISTRONAME
kann man das gewünschte Programm
und seine Parameter angeben, z.B.: wsl.exe -d Ubuntu-18.04 ip addr
Will man übliche Shell-Befehle verknüpft nutzen, hilft es, dass Kommando mit
/bin/bash -c
abzusetzen.
Ich nutze diese Methode um meine Jekyll-Instanz für den Blog hochzufahren:
wsl.exe -d Ubuntu-18.04 /bin/bash -c "cd /mnt/d/devel/projects/opengate/blog && bundle exec jekyll serve --host 0.0.0.0"
Prozess mit manuell installierter Distribution starten
Das in der .appx
Datei mitgelieferte Programm, das man zum Einrichten der
Distribution benutzt, kann auch zum Starten einzelner Prozesse genutzt werden.
DISTRO.exe /help
gibt meist eine Übersicht über die unterstützten Kommandos
zurück.
Meine eingesetzten Distros erlauben die Ausführung nach dem Schema
DISTRO.exe run "linux_command parameter"
wie z.B.:
openSUSE-Leap-15.2.exe run "ip addr"
oder
ubuntu1804.exe run "cat /etc/os-release"
WSL Konfiguration
Mit wsl.exe
lassen sich auf neueren Installationen jede Menge weitere
Einstellungen und Aufgaben erledigen.
Parallel dazu existiert das ältere Programm wslconfig.exe
wsl --set-default DISTRONAME
oder wslconfig /setdefault DISTRONAME
macht DISTRONAME
zur Standard-Distribution. Ruft man wsl.exe
ohne
weitere Parameter auf, wird die so gesetzte Default-Distribution gestartet.
wsl --export DISTRONAME archive.tar
exportiert das gesamte Linux-Dateisystem einer Distribution in ein
.tar
Archiv, das man auf einem anderen System wieder importen kann.
wsl --import DISTRONAME d:\path\to\distro\folder archive.tar
importiert eine als .tar
exportierte Linux Distribution.
wsl --set-version DISTRONAME 1
Lässt DISTRONAME
mit WSL v1 laufen, womit Linux Prozesse auf dem
Windows Host emuliert werden.
wsl --set-version DISTRONAME 2
Lässt DISTRONAME
mit WSL v2 laufen, womit die gesamte Linux Umgebung in
einer virtualisierten Umgebung läuft.
wsl --set-default-version 1
oder wsl --set-default-version 2
Legt den Standard fest, mit welcher WSL Version neu installierte Linux
Distributionen gestartet werden sollen.
wsl --unregister DISTRONAME
oder wslconfig /unregister DISTRONAME
Löscht DISTRONAME
und sein gesamtes Dateisystem.
Datei Austausch
In WSL v1 liegt das Linux-Dateisystem lediglich in Unterordnern des Windows
Hosts.
Kennt man den Windows-Ordner der Distribution, befindet sich darunter ein
LocalState\rootfs
Unterverzeichnis, in dem die gesamte Linux Verzeichnisstruktur
abgebildet ist.
Beispiele dafür liegen unter:
C:\Users\%USERNAME%\AppData\Local\Packages\
wie z.B.:
CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs
CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs
CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs
TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState\rootfs
46932SUSE.openSUSELeap42.2_022rs5jcyhyac\LocalState\rootfs
36828agowa338.AlpineWSL_my43bytk1c4nr\LocalState\rootfs
Unter WSL v2 liegen die Dateien in virtuellen Datenträger-Dateien (.vhdx
).
Man kann jedoch über eine spezielle Netzwerk-Dateifreigabe auf die
Distribution zugreifen:
\\wsl$
fungiert als Host für die laufenden Distributionen, wobei jede
einzelne Distribution und ihre Dateien wie eine Dateifreigabe adressierbar
ist, z.B.: \\wsl$\Ubuntu-18.04\var\log
oder \\wsl$\Alpine\etc\os-release
.
Innerhalb einer Distribution stehen die Windows Laufwerke als Mount-Point in
/mnt
zur Verfügung.
/mnt/c/Windows/System32/
verweist dann auf C:\Windows\System32
und
/mnt/d/path/to/files
ist mit D:\path\to\files
gleichzusetzen.
Weiterführende Links
Fortsetzung folgt…