Zum Inhalt springen

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.

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.

Du tippst z und es erscheint y, oder die Umlaute liegen falsch. Das Layout prüfen und auf Schweizerdeutsch stellen:

Terminal-Fenster
localectl status
sudo localectl set-keymap ch
sudo localectl set-x11-keymap ch

Alternativ 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 %).

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:

Terminal-Fenster
sudo usermod -aG vboxsf "$USER"
# Abmelden und neu anmelden, dann:
ls /media/sf_NAME

VMware: 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.

Schrittweise eingrenzen, von innen nach aussen:

Terminal-Fenster
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 dhclient oder sudo netplan apply versucht es neu.
  • ping 1.1.1.1 geht, ping ubuntu.com nicht: DNS-Problem. In VirtualBox mit NAT hilft auf dem Host VBoxManage modifyvm "VMNAME" --nat-dns-host-resolver1 on. Sonst in /etc/netplan/*.yaml einen Nameserver eintragen (nameservers: {addresses: [1.1.1.1, 9.9.9.9]}) und sudo 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.

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.

Der Server akzeptiert kein Passwort und deinen Schlüssel kennt er nicht (oder du verwendest den falschen). Prüfen:

Terminal-Fenster
ssh -v user@host 2>&1 | grep -i -E "offering|identity|authentications"
ls -l ~/.ssh/ # Privater Schlüssel muss 600 haben, ~/.ssh 700
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host # Schlüssel hinterlegen, solange Passwort noch geht

Auf 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.

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:

Terminal-Fenster
ssh-keygen -R 10.0.0.42
ssh user@10.0.0.42

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:

Terminal-Fenster
ps aux | grep -E "apt|dpkg" | grep -v grep
systemctl status unattended-upgrades

Nach 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.

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.

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:

Terminal-Fenster
locale # LANG und LC_* sollten etwas mit UTF-8 zeigen
sudo locale-gen de_CH.UTF-8
sudo update-locale LANG=de_CH.UTF-8 # oder en_US.UTF-8, wenn du englische Meldungen willst

Danach 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.

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:

Terminal-Fenster
reset

Wenn 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 ist richtig so. Bei sudo, ssh und passwd wird nichts angezeigt, auch keine Sternchen. Tippen und Enter.

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).

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.

^ 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.

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.

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:

Terminal-Fenster
file skript.sh # "with CRLF line terminators" verrät es
sudo apt install dos2unix
dos2unix skript.sh

Ohne 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).

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.