Troubleshooting
Die typischen Stolpersteine aus dem Kurs, nach Thema sortiert. Bevor du hier suchst: Fehlermeldung ganz lesen, sie nennt meist Datei, Zeile und Ursache. Und wenn du eine VM-Katastrophe gebaut hast, ist der Snapshot (letzter Abschnitt) oft der schnellste Weg.
Virtuelle Maschine
Abschnitt betitelt „Virtuelle Maschine“Die VM ist träge oder ruckelt
Abschnitt betitelt „Die VM ist träge oder ruckelt“Zu wenig oder zu viel Ressourcen. Richtwerte: 2 CPU-Kerne, 4 GB RAM, 128 MB Video-RAM, 3D-Beschleunigung ein. Gib der VM nie mehr als die Hälfte der Kerne und des RAM deines Rechners, sonst bremsen sich Host und Gast gegenseitig. Ubuntu Desktop braucht spürbar mehr als Ubuntu Server; für alles ab Modul 7 reicht Server ohne GUI, und über SSH ist es ohnehin angenehmer. In VirtualBox hilft der Netzwerkadapter-Typ «Paravirtualized Network (virtio-net)» und der Chipsatz ICH9. Auf Apple Silicon unbedingt ein ARM64-Image verwenden, x86-Emulation ist sehr langsam.
Die Tastatur in der VM hat ein falsches Layout
Abschnitt betitelt „Die Tastatur in der VM hat ein falsches Layout“Du tippst z und es erscheint y, oder die Umlaute liegen falsch. Das Layout prüfen und auf Schweizerdeutsch stellen:
localectl statussudo localectl set-keymap chsudo localectl set-x11-keymap chAlternativ interaktiv: sudo dpkg-reconfigure keyboard-configuration (Tastatur: Generic 105-key, Layout: Switzerland, Variante: German (Switzerland)). Für die Textkonsole danach sudo setupcon. In der GUI gilt zusätzlich die Einstellung unter Settings, Keyboard, Input Sources. Nur für die aktuelle Sitzung: loadkeys ch (Konsole) oder setxkbmap ch (X11).
Pipe, Backslash, Tilde oder geschweifte Klammern lassen sich nicht tippen
Abschnitt betitelt „Pipe, Backslash, Tilde oder geschweifte Klammern lassen sich nicht tippen“Auf der Schweizer Tastatur liegen diese Zeichen auf AltGr: | auf AltGr+7, \ auf AltGr+§ (links neben 1), ~ auf AltGr+^, {` und `} auf AltGr+ä und AltGr+$, [ und ] auf AltGr+ü und AltGr+!. Auf dem Mac ist es Option+7 für |, Option+Shift+7 für \, Option+N für ~.
Wenn AltGr in der VM nicht ankommt, fängt die Virtualisierungssoftware die Taste ab. Meist hilft es, die Host-Taste anders zu belegen (VirtualBox: File, Preferences, Input) oder das Layout im Gast stimmt nicht (siehe oben). Notlösung: die Befehle über SSH vom Host-Terminal aus eingeben, dann gilt die Tastatur des Hosts.
Bildschirm zu klein, Auflösung lässt sich nicht ändern, kein Vollbild
Abschnitt betitelt „Bildschirm zu klein, Auflösung lässt sich nicht ändern, kein Vollbild“Die Gast-Werkzeuge fehlen. Sie liefern den Grafiktreiber, dynamische Auflösung, Zwischenablage und Shared Folders:
| Virtualisierung | Paket im Gast |
|---|---|
| VirtualBox | sudo apt install virtualbox-guest-utils virtualbox-guest-x11 oder Devices, Insert Guest Additions CD |
| VMware (Workstation, Fusion) | sudo apt install open-vm-tools open-vm-tools-desktop |
| UTM, virt-manager, Proxmox (SPICE) | sudo apt install spice-vdagent qemu-guest-agent |
| Hyper-V | Im Ubuntu-Image enthalten (hv_*-Module) |
Danach sudo reboot. Unscharfe oder winzige Darstellung auf hochauflösenden Bildschirmen: in Ubuntu Settings, Displays, Scale auf 200 % oder in der Virtualisierungssoftware die Skalierung einstellen (VirtualBox: View, Virtual Screen, Scale to 200 %).
Shared Folder zwischen Host und VM
Abschnitt betitelt „Shared Folder zwischen Host und VM“Für kleine Dateien ist scp oder ein Git-Repository oft einfacher. Wenn es ein Shared Folder sein soll: VirtualBox: Devices, Shared Folders, Ordner hinzufügen mit «Auto-mount» und «Make Permanent». Der Ordner erscheint unter /media/sf_NAME, lesbar nur für die Gruppe vboxsf:
sudo usermod -aG vboxsf "$USER"# Abmelden und neu anmelden, dann:ls /media/sf_NAMEVMware: Ordner im Player freigeben, im Gast vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other. UTM: Verzeichnis in den VM-Einstellungen freigeben, im Gast nach Anleitung von UTM als VirtioFS oder SPICE WebDAV einhängen.
Die VM hat kein Netz
Abschnitt betitelt „Die VM hat kein Netz“Schrittweise eingrenzen, von innen nach aussen:
ip a # Hat das Interface eine IP-Adresse (inet 10.x oder 192.168.x)?ip r # Gibt es eine default-Route?ping -c 3 1.1.1.1 # Geht IP nach aussen?ping -c 3 ubuntu.com # Geht auch DNS?resolvectl status # Welcher DNS-Server ist eingetragen?- Keine IP-Adresse: In der Virtualisierungssoftware prüfen, ob der Netzwerkadapter verbunden ist («Cable connected»).
sudo dhclientodersudo netplan applyversucht es neu. ping 1.1.1.1geht,ping ubuntu.comnicht: DNS-Problem. In VirtualBox mit NAT hilft auf dem HostVBoxManage modifyvm "VMNAME" --nat-dns-host-resolver1 on. Sonst in/etc/netplan/*.yamleinen Nameserver eintragen (nameservers: {addresses: [1.1.1.1, 9.9.9.9]}) undsudo netplan apply.- Gar nichts geht: Host hat Netz? VPN auf dem Host aktiv? Manche VPN-Clients blockieren VM-Verkehr.
NAT oder Bridge? NAT (Standard) gibt der VM eine private Adresse, sie kommt nach aussen, ist aber von aussen nicht erreichbar. Für SSH vom Host in die VM brauchst du entweder Port-Forwarding (VirtualBox: Network, Advanced, Port Forwarding, Host 2222 auf Gast 22, dann ssh -p 2222 user@localhost) oder den Modus «Bridged»: Die VM hängt dann wie ein eigener Rechner im LAN und bekommt eine Adresse vom Router. Bridged funktioniert im Firmen- oder Schul-WLAN oft nicht, NAT praktisch immer.
ssh: connect to host ... port 22: Connection refused
Abschnitt betitelt „ssh: connect to host ... port 22: Connection refused“Der Rechner ist erreichbar, aber niemand hört auf Port 22. Auf dem Zielsystem (über die Konsole): sudo apt install openssh-server und systemctl status ssh. Bei NAT fehlt eventuell das Port-Forwarding (siehe oben). Ein anderer Port? ss -tlnp | grep ssh zeigt ihn.
Connection timed out oder No route to host
Abschnitt betitelt „Connection timed out oder No route to host“Falsche IP-Adresse, falsches Netz oder eine Firewall. Auf dem Zielsystem ip -4 a prüfen, vom Client ping versuchen. Firewall auf dem Ziel: sudo ufw status, falls aktiv sudo ufw allow ssh.
Permission denied (publickey)
Abschnitt betitelt „Permission denied (publickey)“Der Server akzeptiert kein Passwort und deinen Schlüssel kennt er nicht (oder du verwendest den falschen). Prüfen:
ssh -v user@host 2>&1 | grep -i -E "offering|identity|authentications"ls -l ~/.ssh/ # Privater Schlüssel muss 600 haben, ~/.ssh 700ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host # Schlüssel hinterlegen, solange Passwort noch gehtAuf dem Server muss der öffentliche Schlüssel in ~/.ssh/authorized_keys stehen (Rechte 600, Verzeichnis 700, das Home-Verzeichnis darf nicht für die Gruppe schreibbar sein). Bei GitLab: Schlüssel unter Preferences, SSH Keys eintragen und mit ssh -T git@gitlab.example.ch testen. Falsch ist auch oft der Benutzername: git@, nicht dein Login.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Abschnitt betitelt „WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!“Der Host-Key des Servers passt nicht mehr zu dem, den dein Client gespeichert hat. Harmlos, wenn du die VM neu installiert oder einen Snapshot zurückgespielt hast und die IP gleich blieb. Ernst, wenn du das nicht erklären kannst. Den alten Eintrag entfernen und neu verbinden:
ssh-keygen -R 10.0.0.42ssh user@10.0.0.42Pakete (apt)
Abschnitt betitelt „Pakete (apt)“Could not get lock /var/lib/dpkg/lock-frontend
Abschnitt betitelt „Could not get lock /var/lib/dpkg/lock-frontend“Ein anderer apt- oder dpkg-Prozess läuft. Nach dem Booten ist das fast immer unattended-upgrades, das im Hintergrund Sicherheitsupdates einspielt. Nachsehen und warten:
ps aux | grep -E "apt|dpkg" | grep -v grepsystemctl status unattended-upgradesNach wenigen Minuten ist der Lock frei. Den Prozess nicht mit kill -9 abschiessen und die Lock-Datei nicht löschen, das kann die Paketdatenbank beschädigen. Wenn ein apt-Lauf wirklich abgebrochen wurde: sudo dpkg --configure -a, dann sudo apt install -f.
E: Unable to locate package ...
Abschnitt betitelt „E: Unable to locate package ...“Drei Ursachen in dieser Reihenfolge prüfen: Paketlisten noch nie geladen (sudo apt update), Paketname falsch (apt search name, Paketnamen sind klein geschrieben, oft mit Bindestrich: openssh-server, nicht ssh-server), oder das Paket liegt in einem anderen Repository (universe aktivieren: sudo add-apt-repository universe). Auf Fedora heisst dasselbe Paket oft anders (vim-enhanced statt vim).
apt update meldet Release file ... is not valid yet oder GPG-Fehler
Abschnitt betitelt „apt update meldet Release file ... is not valid yet oder GPG-Fehler“Die Uhr der VM geht falsch, typisch nach einem Snapshot. timedatectl prüfen, sudo timedatectl set-ntp true und ein paar Sekunden warten.
Sprache und Zeichen
Abschnitt betitelt „Sprache und Zeichen“Umlaute werden als ? oder ä angezeigt, Programme warnen Setting locale failed
Abschnitt betitelt „Umlaute werden als ? oder ä angezeigt, Programme warnen Setting locale failed“Die Locale ist nicht erzeugt oder nicht gesetzt. Prüfen und beheben:
locale # LANG und LC_* sollten etwas mit UTF-8 zeigensudo locale-gen de_CH.UTF-8sudo update-locale LANG=de_CH.UTF-8 # oder en_US.UTF-8, wenn du englische Meldungen willstDanach neu anmelden. Über SSH kommt die Locale oft vom Client mit (SendEnv LANG LC_*); wenn der Server sie nicht kennt, erscheint die Warnung. Entweder die Locale auf dem Server erzeugen oder im Client ~/.ssh/config die Zeile SendEnv weglassen. Für englische Fehlermeldungen (besser zum Googeln) einmalig: LANG=C befehl.
Fehlermeldungen sind auf Deutsch, ich finde dazu nichts im Netz
Abschnitt betitelt „Fehlermeldungen sind auf Deutsch, ich finde dazu nichts im Netz“LANG=C.UTF-8 befehl zeigt die englische Meldung. Dauerhaft: sudo update-locale LANG=en_US.UTF-8, dann sind Meldungen englisch, Datum und Zahlen bleiben über LC_TIME und LC_NUMERIC anpassbar.
Terminal
Abschnitt betitelt „Terminal“Das Terminal reagiert nicht mehr, nichts erscheint beim Tippen
Abschnitt betitelt „Das Terminal reagiert nicht mehr, nichts erscheint beim Tippen“Wahrscheinlich hast du Ctrl+S gedrückt (Flusskontrolle, friert die Ausgabe ein). Ctrl+Q löst es wieder. Wenn das nichts bringt: Ctrl+C bricht den laufenden Befehl ab, q verlässt less oder man, Esc und :q! verlassen vim. Falls ein Programm auf Eingabe wartet (Prompt fehlt), hilft Ctrl+D (Ende der Eingabe). Wer Ctrl+S dauerhaft loswerden will: stty -ixon in ~/.bashrc.
Nach cat einer Binärdatei zeigt das Terminal nur noch Zeichensalat
Abschnitt betitelt „Nach cat einer Binärdatei zeigt das Terminal nur noch Zeichensalat“Die Binärdaten enthielten Steuersequenzen, die den Zeichensatz des Terminals umgestellt haben. Blind eingeben:
resetWenn selbst das nicht hilft: Terminal schliessen und neu öffnen. Vorbeugen: file datei vor dem cat, oder less verwenden, das Binärdateien erkennt und nachfragt.
Das Passwort erscheint nicht beim Tippen
Abschnitt betitelt „Das Passwort erscheint nicht beim Tippen“Das ist richtig so. Bei sudo, ssh und passwd wird nichts angezeigt, auch keine Sternchen. Tippen und Enter.
sudo: unable to resolve host xyz
Abschnitt betitelt „sudo: unable to resolve host xyz“Der Hostname in /etc/hostname steht nicht in /etc/hosts. Eine Zeile 127.0.1.1 xyz in /etc/hosts ergänzen (sudo nano /etc/hosts, das geht trotz der Warnung).
vim: E212: Can't open file for writing
Abschnitt betitelt „vim: E212: Can't open file for writing“Du hast keine Schreibrechte auf die Datei oder das Verzeichnis, meist weil sudo fehlt. Entweder vim verlassen (:q!) und mit sudoedit /etc/datei neu öffnen, oder im laufenden vim als root speichern:
:w !sudo tee %Bestätige mit Enter und danach mit L (load), damit vim die Datei neu einliest. % steht für den aktuellen Dateinamen. Zweite mögliche Ursache: das Verzeichnis existiert nicht (E212 erscheint auch bei vim /tmp/fehlt/datei.txt).
vim: Pfeiltasten schreiben Buchstaben, keine Farben, vimtutor fehlt
Abschnitt betitelt „vim: Pfeiltasten schreiben Buchstaben, keine Farben, vimtutor fehlt“Nur vim-tiny ist installiert (Standard auf Ubuntu Server). sudo apt install vim.
nano: ^X heisst was?
Abschnitt betitelt „nano: ^X heisst was?“^ steht für Ctrl: Ctrl+X beendet, Ctrl+O speichert, Ctrl+W sucht, Ctrl+K schneidet die Zeile aus, Ctrl+U fügt sie ein. M- steht für Alt.
Skripte
Abschnitt betitelt „Skripte“bash: ./skript.sh: Permission denied
Abschnitt betitelt „bash: ./skript.sh: Permission denied“Das Ausführen-Recht fehlt: chmod +x skript.sh. Wenn die Datei auf einem Dateisystem liegt, das keine Rechte kennt (Shared Folder, USB-Stick mit FAT), geht bash skript.sh als Umweg.
skript.sh: command not found
Abschnitt betitelt „skript.sh: command not found“Das aktuelle Verzeichnis ist nicht im PATH, und das ist gut so. Starte mit Pfad: ./skript.sh. Oder lege das Skript nach ~/bin beziehungsweise ~/.local/bin (beide sind auf Ubuntu im PATH, sobald sie existieren, nach erneutem Login).
bad interpreter: No such file or directory oder /bin/bash^M
Abschnitt betitelt „bad interpreter: No such file or directory oder /bin/bash^M“Die Datei hat Windows-Zeilenenden (CRLF). Der Shebang endet dann mit einem unsichtbaren \r, und die Shell sucht nach /bin/bash\r. Prüfen und reparieren:
file skript.sh # "with CRLF line terminators" verrät essudo apt install dos2unixdos2unix skript.shOhne Zusatzpaket: sed -i 's/\r$//' skript.sh oder in vim :set ff=unix und :w. Vorbeugen: In VS Code unten rechts «CRLF» auf «LF» stellen und in Git git config --global core.autocrlf input setzen. Auch syntax error near unexpected token '$'\r'' ist dasselbe Problem.
Das Skript läuft, aber die Variable ist leer oder unbound variable
Abschnitt betitelt „Das Skript läuft, aber die Variable ist leer oder unbound variable“Mit set -u ist eine nicht gesetzte Variable ein Fehler. Meist ein Tippfehler im Namen oder $1 wurde beim Aufruf nicht übergeben. Standardwert angeben: "${1:-}" oder "${name:-Standard}". Zum Debuggen bash -x skript.sh starten, dann siehst du jede Zeile mit den eingesetzten Werten.
[: too many arguments oder unary operator expected
Abschnitt betitelt „[: too many arguments oder unary operator expected“Eine ungequotete Variable in [ ] war leer oder enthielt Leerzeichen. In Bash-Skripten [[ "$var" == "x" ]] mit Anführungszeichen verwenden. ShellCheck hätte das gemeldet (SC2086).
Zurücksetzen
Abschnitt betitelt „Zurücksetzen“Ich habe die VM kaputt gemacht
Abschnitt betitelt „Ich habe die VM kaputt gemacht“Snapshot zurückspielen. VirtualBox: VM auswählen, Snapshots, gewünschten Snapshot wählen, Restore. VMware: VM, Snapshot, Revert. UTM: in den VM-Einstellungen unter Drive; hier ist es einfacher, vorher eine Kopie der VM zu machen (Rechtsklick, Clone). Proxmox: VM, Snapshots, Rollback. Alle Änderungen seit dem Snapshot sind danach weg, auch deine Lösungen, sofern sie nicht committet und gepusht sind. Darum: vor jedem Modul Snapshot, nach jeder Aufgabe git push.
Ich habe mich ausgesperrt (sudo geht nicht mehr, Passwort vergessen)
Abschnitt betitelt „Ich habe mich ausgesperrt (sudo geht nicht mehr, Passwort vergessen)“In der lokalen VM: Beim Booten Shift (BIOS) oder Esc (UEFI) gedrückt halten, im GRUB-Menü «Advanced options», dann «recovery mode», «root» wählen. Im Root-Prompt mount -o remount,rw / und passwd benutzer. Auf der Proxmox-VM ist der Snapshot der schnellere Weg.