Anforderungen: Windows 10 Version 1903 Build 18362.1049+
Einfach prüfen mit:
winver
WSL2 und HyperVisor aktivieren
Anleitung zum Aktivieren der WSL2:
https://docs.microsoft.com/en-us/windows/wsl/install-win10
PowerShell als Administrator starten:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Restart-Computer
Download und Install: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
wsl --set-default-version 2
Bei Punkt 6 in der Anleitung kann aufgehört werden.
Distribution installieren
Installation der gewünschten Distribution (hier Ubuntu2004):
https://docs.microsoft.com/en-us/windows/wsl/install-manual
PowerShell als normaler Benutzer starten:
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu-2004.appx -UseBasicParsing
# die App per command hinzuzufügen funktioniert
# jedoch muss man sie danach immer noch manuell starten
# Add-AppPackage .\Ubuntu-2004.appx
# leichter man startet sie direkt:
.\Ubuntu-2004.appx
# Benutzer zbsp: admin
# optional falls keine distributionen gefunden werden:
net stop LxssManager
net start LxssManager
# auflisten verfügbarer distributionen
wsl --list --all -v
wslconfig /list /all
Mehr Infos zu user Account und Passwort vergessen: https://docs.microsoft.com/en-us/windows/wsl/user-support
besseres Terminal
Nun das Terminal installieren: https://docs.microsoft.com/en-us/windows/terminal/get-started
Microsoft Store: https://www.microsoft.com/de-de/p/windows-terminal/9n0dx20hk701
Zum extrahieren der Download Url: https://store.rg-adguard.net/
(selektierter Ring im Dropdown ist egal, Download Url gilt allerdings nur 20 Minuten)
Invoke-WebRequest -OutFile Terminal.appx -UseBasicParsing -Uri "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice/files/b98f7dc2-9f52-4579-a4e4-eb2c59f5332f?P1=1611074965&P2=402&P3=2&P4=VmpHBXMzxT4oD8uVd1Rfb48gVbO7K4e%2fDCUHHrthdFoXJa91G0w%2fFz9p6GPZJiyOZQO4%2blxHKa8zkzNKCSEkNA%3d%3d"
.\Terminal.appx
Danach nur noch die Einstellungen im Terminal ändern, sodass die Terminal.wsl als default aufgeht.
Problem: WSL hat keine Netzwerk Verbindung
Der standard DNS Eintrag in der WSL, der dummerweise nach jedem Neustart erneut generiert wird, ist nur selten sinnvoll - daher hier eine mögliche Alternative.
siehe: https://github.com/microsoft/WSL/issues/5336#issuecomment-657825486
und: https://github.com/microsoft/WSL/issues/5420#issuecomment-646479747
# neue nameserver einfügen - 8.8.8.8 oder eigene
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
# sicherstellen, dass diese Datei nicht mehr neu generiert wird
sudo chattr +i /etc/resolv.conf
sudo rm /etc/wsl.conf
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
Problem: Netzwerk Zugriff von und auf die WSL
Diesen Bereich bitte als spekulativ betrachten - nichts davon lässt sich irgendwie vernünftigt nachvollziehen oder erklären.
Mit der Installation der WSL2 wird ein zusätzlicher Netzwerk-Adapter hinzugefügt: vEthernet (WSL). Ähnlich wie bei einer virtuellen Maschine dient diese Schnittstelle zur Verbindung auf das Netzwerk der WSL. Dadurch hat der Host nun mehrere IP-Addressen:
- localhost / 127.0.0.1
- die bisherigen lokalen IPs - zbsp. 192.168.*
- die neue lokale IP der WSL - zbsp. 172.*
Zugriff von der WSL auf diese IPs sind nun unterschiedlich:
- der localhost in der WSL und auf dem Host ist unterschiedlich - Dienste die in der WSL laufen, können aber einfach vom Host aus über
localhost:port
erreicht werden. Dienste die am Host unter localhost laufen, kann die WSL allerdings nicht erreichen. Hier hilft einsocat
den man auf der WSL startet. Ein paar Beispiele:
https://unix.stackexchange.com/a/187038
https://unix.stackexchange.com/a/326446
um also einen Port aus der WSL auf den Host zu forwarden kann dies ausgeführt werden:socat tcp4-listen:12345,bind=localhost,reuseaddr,fork tcp4:$(hostname -I):12345
- Zugriff von der WSL auf die bisherigen lokalen IPs werden standardmäßig von der Windows Firewall geblockt - hier benötigt man eine zusätzliche Firewall Regel: https://stackoverflow.com/a/51998308
- Zugriff vom lokalen Netzwerk auf die WSL funktioniert auch nicht - hier muss erst ein Port forwarding eingerichtet werden. Hier ein PowerShell Skript für alle mit Admin-Rechten: https://dev.to/vishnumohanrk/wsl-port-forwarding-2e22
- Zugriff von der WSL auf die neue lokale Host IP ist möglich, allerdings ändert sich diese IP mit jedem Neustart .. die IP stünde in der
/etc/resolve.conf
allerdings haben wir diese zugunsten von allgemeinem Internet Zugriff überschrieben. Mit folgenden Befehlen lässt sich zumindest die IP der WSL einfach ermitteln:- in der WSL:
hostname -I
- in der PowerShell:
wsl hostname -I
- in der WSL: