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:

  1. localhost / 127.0.0.1
  2. die bisherigen lokalen IPs - zbsp. 192.168.*
  3. die neue lokale IP der WSL - zbsp. 172.*

Zugriff von der WSL auf diese IPs sind nun unterschiedlich:

  1. 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 ein socat 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
  2. 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
  3. 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
  4. 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:
    1. in der WSL: hostname -I
    2. in der PowerShell: wsl hostname -I