TFTP ist das Trival File Transfer Protocol. Es wird bei Freifunk vor allem dazu verwendet, um dem Bootloader eines Routers Image-Dateien zu schicken, wenn man diese flashen möchte.
Im Internet gibt es bereits einige Tutorials um einen TFTP-Server einzurichten. Diese sind meistens eher etwas älter und gehen davon aus, dass man dauerhaft einen TFTP-Server braucht. Ich fand diese Tutorials eher anstrengend, da sie meistens eine Menge Gebastel an irgendwelchen systemd-units enthielten.
Aber fürs Eben-mal-schnell-einen-Router-flashen brauchen wir das alles ja eigentlich gar nicht. Deshalb hier eine kleine Anleitung, damit ich nicht mehr so viel Hustle beim Nachschauen habe:
TFTP-Server schnell aufsetzen
- Server und Client installieren (hier für Fedora)
$ sudo dnf install tftp tftp-server
- Server-Verzeichnis anlegen und Rechte setzen:
$ sudo mkdir -p /var/lib/tftpboot
$ sudo chown -R nobody:nobody /var/lib/tftpboot
- Server starten.
Ab Fedora 36 verhindert die Firewall den Zugriff auf den TFTP-Server standardmäßig. Ich schalte sie dann meistens kurz ab: sudo systemctl stop firewalld.service
Wir brauchen keinen Daemon, der immer horcht. Also starten wir den Server im Vordergrund
sudo in.tftpd -L -c -p -s /var/lib/tftpboot
- -L: listen, hört auf eingehende Verbindungen, aber im Vordergrund
- -c: create, erlaubt neue Dateien zu erstellen. So können wir das Image später hochladen
- -p: permissive, keine weiteren Nutzer-Checks
- -s: secure, wechselt beim Starten in das angegebene Verzeichnis
- Image hochladen
$ tftp localhost
tftp> put IMAGE-NAME
tftp> quit
- Flashen beginnen
Diese Schritte sollten genügen, dass das gewünschte Image im tftp-Server liegt und von einem Bootloader geladen werden kann. Man kann das nachprüfen, indem man ein Listing des Serververzecihnis macht: ls /var/lib/tftpboot/
.
Edit: Erzähl mir mehr
2023-09-02: Perry hatte mir neulich einen coolen Hinweis geschickt, wie man den tftp-server dazu bekommt, ein bisschen mehr darüber zu erzählen, was gerade passiert:
$ tftp localhost
tftp> trace
tftp> put IMAGE-NAME
tftp> trace
Das trace
schaltet die zusätzlichen Infos ein. Mit einem zweitentrace
schaltet man diese wieder aus. Vielen Dank an Perry für diesen Hinweis! :)