Hochschule Augsburg, Prof. Hubert Högl, Hubert.Hoegl@tha.de
2024-07-14
Nachtrag 17.07.2024: Vermutlich kamen unsere Probleme mit WSL2 beim Workshop von der fehlenden Aktivierung der Virtualisierung im BIOS. Dieser Artikel behandelt die BIOS Einstellung ausführlich: https://s1gr1d.medium.com/how-to-set-up-linux-on-windows-with-wsl-2-debe2a64d20d
Mit dem Windows Subsystem für Linux in der Version 2 kann man Linux innerhalb von Windows betreiben.
Bei dieser Anleitung habe ich mich an https://goneuland.de/windows-10-subsystem-fuer-linux-wsl-2-installieren gehalten.
WSL aktivieren
In Powershell (Administrator) eingeben
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Update auf WSL2
Windows muss mindestens Version 1903 sein (Windows Taste + R”,
winver
eingeben)
Powershell Eingabe:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
PC neu starten
WSL update herunterladen von https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi und installieren
Version abfragen
C:\Users\Nobody> wsl --version
WSL-Version: 2.2.4.0
Kernelversion: 5.15.153.1-2
WSLg-Version: 1.0.61
MSRDC-Version: 1.2.5326
Direct3D-Version: 1.611.1-81528511
DXCore-Version: 10.0.26091.1-240325-1447.ge-release
Windows-Version: 10.0.19045.4412
WSL2 als Standard festlegen
wsl --set-default-version 2
Welche Linux Distributionen gibt es?
wsl.exe --list --online
Debian installieren
wsl.exe --install -d Debian
Distro entfernen - auch alle Daten sind dann gelöscht!
wsl --unregister Debian
Kommandos
Version und Status ausgeben
wsl.exe -l -v
Welche Distributionen gibt es?
wsl.exe --list --online
Distribution installieren
wsl.exe --install -d Debian
Distribution für Benutzer ausführen
wsl.exe --distribution <Distribution Name> --user <User Name>
WSL Version ausgeben
wsl.exe --version
Shutdown
wsl.exe --shutdown Debian
Beenden und neu starten (das WSL wird neu gestartet, auf der Kommandozeile in WSL sieht man das aber nicht)
wsl.exe --terminate debian
Mountpunkte
USBIPD installieren unter Windows
Dieser Schritt ist nötig, da sich Windows alle angeschlossenen USB Geräte schnappt. Mit USBIPD gibt man bestimmte USB Geräte an die Linux Distribution weiter.
Auf der Homepage des Projekts unter
https://github.com/dorssel/usbipd-win
findet man einen msi Installer:
https://github.com/dorssel/usbipd-win/releases/
Mit
usbipd.exe list
bekommt man eine Liste der angeschlossenen USB Geräte:
C:\Users\Nobody> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-3 046d:c03e USB-Eingabegerät Not shared
1-4 10c4:ea60 CP2102 USB to UART Bridge Controller Not shared <=== Heltec LoRa V3
Freigeben des Geraetes unter Windows, so dass es mit WSL verbunden werden kann. Muss im CMD Fenster als Admin eingegeben werden (Rechtsklick bei der Auswahl der CMD Anwendung). Danach ist der state bei “usbipd list” shared.
C:\Users\Nobody> usbipd bind --busid 1-4
Danach “attached” man das gewünschte Gerät (kein Admin nötig):
C:\Users\Nobody> usbipd.exe attach --wsl --busid 1-4
Folgende zwei Zeilen wurden als Antwort auf das Kommando ausgegeben:
usbipd: info: Using WSL distribution 'Debian' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 192.168.32.1 to reach the host.
Mit usbipd.exe list
sieht man, dass das Gerät nun im
Zustand “attached” ist.
Wenn das Geraet in WSL2 nicht mehr gebraucht wird dann kann man es entweder abstecken oder in der CMD Box eingeben:
usbipd detach --busid <busid>
Im Debian (in WSL2) installiert man die Pakete “usbip” und
“usbutils”. In usbutils
ist das lsusb
Kommando. In usbip
steckt das Kommando usbipd
für Linux. Es gibt also ein usbipd
Programm für Windows und
eines für Linux.
sudo apt install usbip usbutils
Danach erkennt das lsusb
Kommando in Debian das USB
Gerät. Die Ausgabe sollte so ähnlich sein:
hhoegl@DESKTOP-6H2PGFN:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 10c4:ea60 Silicon Labs CP210x UART Bridge <===== Heltec Board
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Quelle: https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/
Damit man ohne sudo
auf die USB Geräte zugreifen kann,
muss man einen der folgenden Wege gehen:
Kommando in Linux eingeben
$ sudo usermod -a -G dialout $USER
Danach die Debian Box in WSL2 verlassen und neu starten!
Udev aktivieren und Regeln anlegen
Prinzipiell funktioniert das mit Udev unter dem virtuellen Debian genauso wie im richtigen Debian - somit eignet sich jedes Tutorial zu dieser Thematik. Allerdings muss man bei WSL2 zunächst noch den udev Service aktivieren.
Zum Aktivieren geht man so vor:
Den aktuellen Status findet man mit
sudo service udev status
heraus.
Falls /etc/wsl.conf
noch nicht existiert, legt man die
Datei an mit den folgenden drei Zeilen:
[boot]
command="service udev start"
systemd=true
Die dritte Zeile ist optional, wenn sie vorhanden ist wird der
systemd
aktiviert.
Um das Zusammenspiel mit Windows zu verbessern kann man auch die folgenden zwei Zeilen einfügen (Danke für den Tipp):
[interop]
appendWindowsPath=true
Nun beendet man Debian und startet es sofort neu mit dem Kommando
wsl.exe --terminate debian
Dieser Vorgang dauert einige Sekunden, danach sollte der Zugriff auf
die USB Geräte auch ohne sudo
möglich sein, sofern die USB
Regeln installiert sind.
Falls systemd
aktiviert wurde, kann man die laufenden
Dienste wie folgt ausgeben:
systemctl list-units --type=service
WSL Konfiguration
Es gibt zwei Konfigurationsdateien, die am Anfang noch nicht existieren:
C:\Users\<UserName>\.wslconfig
(in
Windows)
In diese Datei stehen globale WSL2 Einstellungen, z.B. wie viel
Speicher
und Prozessoren die Linux VMs bekommen sollen.
/etc/wsl.conf
(in Linux)
Hier sind die Einstellungen der jeweiligen Linux VM zu finden. Zum
Beispiel kann man Dienste beim Booten starten oder systemd
aktivieren.
Quelle: https://learn.microsoft.com/en-us/windows/wsl/wsl-config
Pakete in Linux installieren
Pakete, die sie unter Linux installieren sollten, falls sie noch
nicht vorhanden sind (sudo apt install ...
):
git
, openssh-client
, vim
,
picocom
, python3-pip
,
python3-venv
, cmake
Windows Terminal
Komfortables Terminal, bei dem man Powershell und Linux in verschiedenen Tabs öffnen kann. Man kann das Terminal auch teilen wie bei einem Terminal Multiplexer.
https://learn.microsoft.com/en-us/windows/terminal/install
APT Repository
Wer häufig Pakete installiert sollte den Server in
/etc/apt/sources.list
auf einen Server in der Region
ändern.
Literatur
Artikel in
Microsoft Online Dokumentation
Hayden Barnes, Pro Windows Subsystem for Linux (WSL). Powerful Tools and Practices for Cross-Platform Development and Collaboration, Apress 2021.
https://link-springer-com.ezproxy.hs-augsburg.de/book/10.1007/978-1-4842-6873-5
Prateek Singh, Linux Development on WSL, Apress 2020.
https://link-springer-com.ezproxy.hs-augsburg.de/chapter/10.1007/978-1-4842-6038-8_8
Awesome WSL - Windows Subsystem for Linux. An Awesome collection of Windows Subsystem for Linux (WSL) information, distributions, and tools.