- Details
- Geschrieben von Thomas Kuschel
Schritte zum Installieren von WSL2 Linux Debian Edition auf einem Windows-Rechner (Windows 10)
Windows PowerShell als Administrator starten (Run as Administrator)
wsl --install Debian
Wenn dies mit einer Fehlermeldung "WslRegisterDistribution failed with error: 0x80370102" abbricht, dann fehlt noch der Eintrag unter "Windows Features" - dort "Virtual Machine Platform Windows" aktiv schalten.
Eventuell fehlt auch der Eintrag im BIOS, dass Virtualisierung nicht eingeschaltet (enabled) ist. Bei AMI Bios könnte das unter Avanced > SVM Mode > Enabled gesetzt werden.
Jetzt einen Benutzer-Namen eintragen nach der Installation sobald dies aufgefordert wird, z.B.
Enter new UNIX username: felix
New password: ****
Retype new password: ****
passwd: password updated successfully
Installation successful
Jetzt möchte man vielleicht einen ssh-Server laufen lassen, der vielleicht von Außen erreichbar ist...
Im Debian-Fenster einmal die momentane Version aktualisieren (updaten) mit:
sudo apt update
sudo apt upgrade
Jetzt kann man den SSH-Server installieren mit:
sudo apt install openssh-server
Wenn man die Standard-Optionen möchte kann man gleich den Service starten mit:
sudo service ssh restart
Damit der Service auf dem Windows-Rechner immer gestartet wird kann man 2 Varianten wählen. Entweder man bleibt bei der "old school", der init-Skript-Variante (A) oder man wählt die moderne systemd-Variante (B):
A) Init:
Hier sollte in der .bashrc des gesetzten Users folgende Zeile am Ende der Datei eingefügt werden:
cd
nano -c .bashrc
--
# start the ssh service
sudo /etc/init.d/ssh start
Dadurch, dass dieses Kommando sudo-Rechte braucht und deshalb um ein Passwort gefragt wird, sollte man ein File in
/etc/sudoers.d/
erzeugen, mit folgender Zeile:
ALL=NOPASSWD: /etc/init.d/ssh start
B) Systemd:
Nach der Anleitung auf https://learn.microsoft.com/en-us/windows/wsl/systemd können wir wie folgt vorgehen:
Im Verzeichnis /etc sollte die Datei wsl.conf angepasst werden, wenn diese noch nicht existiert dann:
sudo nano /etc/wsl.conf
--
[boot]
systemd=true
Nach einem Neustart mit z.B. "wsl.exe --shutdown" in der PowerShell werden alle WSL-Instanzen neu gestartet und man erhält die Linux-Distribution im systemd-Mode. Überprüfen kann man dies mit:
systemctl list-unit-files --type=service
Jetzt kann man den ssh-Service enablen/starten mit:
systemctl start ssh
systemctl enable ssh
Und man erspart sich die vielen obigen Einträge bei der Variante A) Init.
--
Generieren eines eignen Schlüsselpaares für ssh in WSL2, mit beispielsweise dem elyptischen (elliptic curve DSA) Ed25519 Schlussels:
ssh-keygen -t ed25519
Um in Windows beim Starten, bzw. nach dem Login automatisch die IP-Adresse zu eruieren und auch wsl2 automatisch gestartet werden - mit obigen Einstellungen müssen folgende Schritte gemacht werden:
Öffnen Sie den "Task Scheduler" mit Win + R, geben Sie taskschd.msc im Run-Dialogfeld ein und drücken Sie die Enter-Taste.
Im "Action"-Fenster auf der rechten Seite, klicken Sie auf "Create Task", oder zu Deutsch: "Aktionen"-Fenster mit "Aufgabe erstellen...".
Jetzt geben Sie der Aufgabe (task) einen Namen, beispielsweise "wsl2ip", und ändern Sie die Einstellungen auf
- * "Mit höchsten Privilegien ausführen" (Run with highest privileges).
- * "Ausgeblendet" (Hidden)
- -> Konfigurieren für: Windows 10 (Configure for: Windows 10)
Im Reiter "Trigger", (Triggers) müssen Sie folgende Einstellungen vornehmen:
- Aufgabe starten: (Begin the task:) Bei Anmeldung (At log on),
- Bestimmter Benutzer (Specific User): aktueller Benutzer der sich normalerweise anmeldet setzen
- Verzögern für: 30 Sekunden (Delay task for: 30 seconds) angeben,
- Aktiviert (Enabled)
Dann unter dem Reiter "Aktionen" (Actions): "Neu..." (New...) klicken:
- Unter Aktion: (Action:): "Programm starten" (Start a program) einstellen,
- Unter Protramm/Skript:
powershell.exe
- Unter "Argumente hinzufügen: (Add arguments):
-ExecutionPolicy Bypass c:\scripts\wsl2ip.ps1
- Alternativ, wenn Sie die Fensterausgabe unterdrücken wollen (blinkt nur kurz auf), dann folgende Argumente setzen:
-ExecutionPolicy Bypass -WindowStyle Hidden c:\scripts\wsl2ip.ps1
Wenn Sie jetzt "OK" drücken, dann sollte eine Zeile dort stehen:
Programm starten powershell.exe -ExecutionPolicy Bypass c:\scripts\wsl2ip.ps1
Oder in der englischen Veriante:
Start a program power powershell.exe -ExecutionPolicy Bypass c:\scripts\wsl2ip.ps1
Dann im Reiter "Bedingungen" (Conditions) sollte alles deaktiviert sein und unter "Einstellungen" (Settings) alles belassen wie es ist.
Als letzten Punkt muss natürlich jetzt diese Skriptdatei erstellt werden, wir bleiben dabei einfachheitshalber im gestarteten Linux-Debian und gehen mit folgenden Kommandos vor:
cd /mnt/c
mkdir scripts
cd scripts
nano -c wsl2ip.ps1
Nun erstellen wir im Editor den folgenden Inhalt:
# Script file for port forwarding Windows to WSL2
# IPv4 and IPv6 support:
$connaddrIPv4 = bash.exe -c "ip -4 address show dev eth0 | grep 'inet '"
$connaddrIPv6 = bash.exe -c "ip -6 address show dev eth0 | grep 'inet6 '"
$regIPv4 = '(?:((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))';
$regIPv_4 = '\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}';
$regIPv6 = '[0-9a-f:]{3,39}';
$found4 = $connaddrIPv4 -match $regIPv4;
echo "found4 = $found4 with connaddrIPv4 = $connaddrIPv4";
if ( $found4 ) {
$connaddrIPv4 = $matches[0];
} else {
echo "The IPv4 address of WSL2 was not found.";
}
$found6 = $connaddrIPv6 -match $regIPv6;
echo "found6 = $found6 with connaddrIPv6 = $connaddrIPv6";
if ( $found6 ) {
$connaddrIPv6 = $matches[0];
} else {
echo "The IPv6 address of WSL2 was not found.";
}
if ( !$found4 -and !$found6 ) {
echo "No IP address at all.";
exit;
}
echo "connaddrIPv4: $connaddrIPv4";
echo "connaddrIPv6: $connaddrIPv6";
#pause;
#[Ports]
#All the ports you want to forward separated by comma:
$ports=@(80,443,24368); #[Static IP]
#You can change the address to your ip configuration to listen to a specific address
# only connect from interal network:
$addrv4='0.0.0.0';
$addrv6='::';
$ports_a = $ports -join ",";
#Remove Firewall exception rules
iex "Remove-NetFireWallRule -DisplayName 'WSL2 firewall unlock' ";
#Adding exception rules for inbound and outbound rules
iex "New-NetFireWallRule -DisplayName 'WSL2 firewall unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL2 firewall unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addrv4";
iex "netsh interface portproxy delete v6tov6 listenport=$port listenaddress=$addrv6";
if ( $found4 ) {
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addrv4 connectport=$port connectaddress=$connaddrIPv4";
}
if ( $found6 ) {
iex "netsh interface portproxy add v6tov6 listenport=$port listenaddress=$addrv6 connectport=$port connectaddress=$connaddrIPv6";
}
}
Start-Process -FilePath "wsl.exe" -WindowStyle Hidden
pause
Eventuell kann man die letzte Zeile herausnehmen, falls man keine Ausgabe mehr möchte.
Ein ganz wichtiger Punkt ist natürlich die Einstellung des SSH-Ports, der weitergeleitet werden soll, dazu kann man den Standard-Port von 22 auf einen beliebigen Port > 1000 abändern. In unserem Beispiel ist dies der Port No. 24368, deshalb ändern Sie auch die obige Zeile bei ports von 24368 auf ihre persönliche Einstellung (Standardport ist der Port 22 für ssh). Diese Portnummer muss natürlich auch eingestellt werden, mit dem Befehl "sudo nano -c /etc/ssh/sshd_config":
/etc/ssh/sshd_config
--
#Port 22
Port 24368
Eventuell sollten Sie dort auch weitere Einstellungen zum open-ssh Server tätigen.
- Details
- Geschrieben von Thomas Kuschel
Hier sind meine Notizen die bei der Installation eines Linux-Systems auf einem EeePC 1018P von Asus entstanden sind.
Ziel war:
Verschlüsselung der neuen SSD-Platte (habe eine Samsung SSD 850 PRO mit 256 GB eingebaut), damit niemand bei Verlust oder Diebstahl des Notebooks an meine Daten kann.
BTRFS - Filesystem, mit dem riesen Vorteil, automatische Snapshots zu machen, Dateien beim Kopieren zu deduplizieren und vieles vieles mehr.
Notwendig dafür ist ein schlankes Linux mit aktuellem Linux-Kernel, damit das BTRFS auch auf dem aktuellen Stand ist. Bei Linux Mint Debian Edition (hatte ich vorher installiert) oder Ubuntu sind die BTRFS-Werkzeuge nicht aktuell und ich hatte den Kernel und BTRFS-Tools deshalb immer separat kompiliert und installiert. Die Wahl fiel auf Arch Linux.
Etwas Handarbeit ist deshalb beim Installieren dieser Distribution schon von Nöten, grundlegende Linux-Kenntnisse sind auch wichtig und man lernt Feinheiten von Linux so richtig gut kennen.
Arch Linux Installation
Aktuelle CD als ISO herunterladen unter: http://archlinux.org/download/
Zum Installieren auf dem Netbook wird ein USB-Stick verwendet (ein 1GB-Stick ist völlig ausreichend). Einfach den USB-Stick in eine USB-Buchse des Linux-Rechners einstecken und den Stick mit der heruntergeladeten ISO-Datei folgendermaßen herstellen:
Zum Feststellen des Gerätenamens: $> lsblk
Hier bei uns stellen wir fest, dass der Gerätenamen (Device) /dev/sdb
lautet.
Die ISO kann jetzt einfach mit dd auf den Stick geschrieben werden (unetbootin o.ä. funktionieren nicht!):
$> dd if=archlinux*.iso of=/dev/sdb
Jetzt vom USB-Stick booten, beim Asus EeePC 1018P kann einfach während des Bootvorgangs die ESC-Taste gedrückt werden (ohne einen Ausflug ins BIOS zu machen) und das Medium (USB-Stick) ausgewählt werden. Das Arch-Linux-Startmenü erscheint. - Da das Netbook einen 64-bit-Atomprozessor besitzt kann die 64-bit-Version gewählt werden "x86_64". Der EeePC 1018P hat eine CPU N550 (1.5G) mit 2 Kernen. Wenn man sich unsicher ist, dann kann im Archlinux-Menu bei Hardware Information (HDT) nachgesehen werden ob unter > Processor > x86_64 der jeweilige Prozessor 64-bit verarbeiten kann. Wenn, ja dann kann mit Boot Arch Linux (x86_64) ein 64-bit-System installiert werden, ansonsten Boot Linux (i686) nur ein 32-bit-System. [2014-09-23: Arch Linux 3.16.1-1-ARCH (tty1) bootet.]
Erste Einstellungen (Tastatur etc.)
Um die deutsche Tastatur einzustellen (übliche Tastatur in Deutschland, Österreich) - Achtung, zur Eingabe von y die z-Taste bzw. für – das ß drücken::
root@archiso ~ # loadkeys de-latin1
Wichtig ist jetzt eine Internetverbindung damit wir richtig arbeiten können (hier WLAN-Anbindung):
root@archiso ~ # iw dev | grep -i interface
Notieren des WLAN-Adapters:
wlp2s0
(Seit der Version v197 von systemd bzw.udev wird das Interface nicht mehr als wlan0, eth0, usw. benannt) - Interface wird jetzt eingeschaltet mit:
root@archiso ~ # ip link set wlp2s0 up
Jetzt kann das Wifi-Netz gescannt werden, welche Netzwerke sind vorhanden:
root@archiso ~ # iw dev wlp2s0 scan | grep SSID
Wähle ein Netzwerk aus und mit Hilfe des WPA2-Schlüssels kann der wpa_supplicant gestartet werden. Zwischen '<' und '(' kein Leerzeichen eingeben:
root@archiso ~ # wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase "WifiNet" "mypassword4WifiNet")
Jetzt kann der DHCP-Dämon gestartet werde - Voraussetzung: Im Netz existiert ein DHCP-Server (meist das Wifi-Modem).
root@archiso ~ # dhcpcd wlp2s0
Jetzt müsste eine erste Internet-Verbindung funktionieren:
root@archiso ~ # ping -c 3 8.8.8.8
Ein weiterer Test folgt mit Namensauflösung (DNS funktioniert):
root@archiso ~ # ping -c 3 www.f0x.at
Partitionieren und Crypt einrichten
Die vorhandene Festplatte muss in zwei Partitionen eingeteilt werden, da zum die Boot-Partition nicht verschlüsselt sein darf. Wir haben hier eine 250 GB SSD-Platte und teilen diese in 2 Partitionen ein
- Partition /dev/sda1 mit 250 MB (ID 83 Linux) für die /boot - Partition
- Partition /dev/sda2 mit den restlichen Sektoren, etwa 238,2 GB
Hierbei ist zu beachten, dass zum Partitionieren der Platte ein relativ junges Partitionierungswerkzeug verwendet wird, damit die erste Partition auf Sektor 2048 startet. Wir erreichen dadurch eine höhere Schreibperformance, da aktuelle SSDs interne Seitengrößen von 4096 oder 8192 Bytes haben. Siehe auch http://www.thomas-krenn.com/en/wiki/Partition_Alignment .
Erstellt mit:
root@archiso ~ # cfdisk /dev/sda
/dev/sda1 2048 514047 51200 250M 83 Linux /dev/sda2 514048 500118191 499604144 238.2G 83 Linux
Die Boot-Partition darf nicht verschlüsselt werden, wir formatieren diese:
root@archiso ~ # mke2fs -L BOOT /dev/sda1
Crypt - Partition
Verwendung findet AES-XTS-plain64 mit SHA 512 Bit auf der zweiten Partition:
root@archiso ~ # cryptsetup -c aes-xts-plain64 -y --hash sha512 -s 512 -i 5000 luksFormat /dev/sda2
Eingabe einer Passphrase - ein wirklich gutes Passwort!
Dann wird das Crypt-Gerät das erste Mal aufgeschlossen mit:
root@archiso ~ # cryptsetup open /dev/sda2 crypt
Jetzt gibt es ein Gerät (device) mit dem Namen /dev/mapper/crypt das als root-Device verwendet werden kann.
BTRFS erstellen
Die gesamte verschlüsselte Partition bekommt jetzt das BTRFS-Filesystem aufgesetzt:
root@archiso ~ # mkfs.btrfs -L CRYPT /dev/mapper/crypt
Mit dem Werkzeug btrfs filesystem show
kann man sich das erstellte Filesystem ansehen.
Das Laufwerk wird jetzt ins System eingebunden, d.h. wir erstellen das künftige root-Wurzelverzeichnis mit:
root@archiso ~ # mount -o noatime /dev/mapper/crypt /mnt
Nun werden mehrere BTRFS-Subvolumes und Verzeichnisse erstellt
root@archiso ~ # cd /mnt
root@archiso /mnt # mkdir __snapshot
root@archiso /mnt # btrfs subvolume create __active && cd __active
root@archiso /mnt/__active # btrfs subvolume create home
root@archiso /mnt/__active # cd /
root@archiso / # umount /mnt
root@archiso / # mount -o noatime,compress=lzo,ssd,space_cache,subvol=__active /dev/mapper/crypt /mnt
root@archiso / # mkdir -p /mnt/boot
root@archiso / # mount /dev/sda1 /mnt/boot
Installieren des Basis-Systems sowie wichtigen Programmen
Mit dem Arch-Paket-Manager pacman und dem anschließenden chroot geht das recht einfach:
root@archiso / # pacstrap /mnt base base-devel btrfs-progs grub zsh iw b43-fwcutter wpa_supplicant wireless_tools wpa_actiond
Alternative, wenn kein Wireless benötigt wird:
root@archiso / # pacstrap /mnt base base-devel btrfs-progs grub zsh
Die Datei fstab wird auf dem System eingerichtet:
root@archiso ~ # genfstab -L -p /mnt >> /mnt/etc/fstab
Kontrolle, ob alles richtig eingerichtet ist:
root@archiso ~ # cat /mnt/etc/fstab
Ab mit CHROOT in das neue BTRFS-System unter Verwendung der zsh-Shell:
root@archiso ~ # arch-chroot /mnt /bin/zsh
Editiere locale.gen und kommentiere die Zeile aus: en_DK.UTF-8 UTF-8
archiso# nano /etc/locale.gen
Nach dem Auskommentieren (entfernen des #-Zeichens bei der obigen Zeile) wird mit folgendem Befehl das System lokalisiert. Entsprechende Sprachdateien werden erstellt.
archiso# locale-gen
Da ich persönlich die amerikanischen Einstellungen für die Kommandozeile bevorzuge, stelle ich dies mit:
archiso# echo LANG=en_DK.UTF-8 > /etc/locale.conf
archiso # export LANG=en_DK.UTF-8
Für Fremdsprachmuffel einfach die obigen beiden Befehle durch folgendes ersetzen (kann auch nachträglich gemacht werden), dann sind beispielsweise Datumsangaben u.v.m. in der Konsole für eine deutsche Ausgabe eingestellt (dabei muss in der locale.gen vorher auch de_DE.UTF8 UTF8 auskommentiert worden sein):
archiso# echo LANG=de_DE.UTF-8 > /etc/locale.conf
archiso # export LANG=de_DE.UTF-8
Das Tastatur-Layout wird auf eine gewöhnliche deutsche Tastatur eingestellt, die Konsolenschrift auf lat9w-12
:
archiso# echo KEYMAP=de-latin1 > /etc/vconsole.conf
archiso# echo FONT=lat9w-12 >> /etc/vconsole.conf
Die lokale Uhrzeit wird mit den folgender Verlinkung parametriert (Vienna):
archiso# ln -s /usr/share/zoneinfo/Europe/Vienna /etc/localtime
Die Hardware-Uhr des Rechners läuft im Linux üblicherweise auf UTC (GMT):
archiso# hwclock --systohc --utc
Setzen des Hostnamen (Rechnername):
archiso# echo meinRechnerName > /etc/hostname
Benutzereinstellungen
Setzen des Root-Passwortes, das Passwort in heute üblicher Art generieren und merken.
archiso# passwd
Enter new UNIX password: p-OSf4345+1
Retype new UNIX password: p-OSf4345+1
BTRFS-Feineinstellungen
Das "Copy-on-Write" (Kopieren beim Schreiben) wird aus Performance-Gründen für das Log-Verzeichnis ausgeschaltet: /var/log/journal/
Informationen dazu auf der Seite https://wiki.archlinux.org/index.php/Systemd#Timers
archiso# chattr +C /var/log/journal
Überprüfung mit:
archiso# lsattr /var/log
Werden virtuelle Maschinen (virtualbox) oder eine Datenbank installiert, so sollten die entsprechenden Verzeichnisse der virtuellen Festplatten bzw. die Datenbank-Resource auch mit dem obigen Attribute "Copy-on-Write" versehen werden.
Automatische Snapshots -- Zeit-Schnappschüsse mit BTRFS
... in Bearbeitung ...
SSH - Zugriff
... in Bearbeitung ...
vorher noch Benutzer anlegen mit useradd anlegen!
pacman -S openssh
Intel Microcode aktualisieren
install the package intel-ucode
% pacman -S intel-ucode
% grub-mkconfig
-o /boot/grub/grub.cfg
Installing iucode-tool from AUR (archlinux repository)
Download (as normal user) the iucode-tool to a separate directory
tar -xvf iucode-tool.tar.gz
cd iucode-tool
makepkg
pacman -U iucode-tool-1.1.1-1-x86_64.pkg.tar.xz
{attachment}