TFTP “file exists” Problem umschiffen

Anonymous_Network

TFTP ist relativ dämlich – was ihn für diverse Anwendungsfälle attraktiv macht. Ohne viel hin&her mit Benutzerkonten oder ähnlichem kann man Dateien zur Verfügung stellen oder auch ablegen. Aus dem Grund wird TFTP gerne von Hardwareherstellern für Updates oder Bootkonfigurationen eingesetzt.

Diverse Geräte lassen sich auch über diesen Mechanismus sichern. So die von uns für die Telefonanlage eingesetzten Patton Geräte als auch die Aastra DECT Basisstationen.

“file exists”

Ein Problem bei TFTP – wenigstens bei einem der sich an die RFC hält – ist, dass es quasi kein überschreiben gibt. Liegt eine Datei auf dem Server, so kann sie nicht überschrieben werden. Entweder muss also das schreibende oder sichernde Gerät den Namen für die Datei ändern oder das ganze schlägt fehl. Was nun, wenn ich den Dateinamen nicht beeinflussen kann und dazu auch den Sicherungszeitpunkt nicht beeinflussen kann?

Genau das Problem hatte ich. Die Aastra DECT Sender sichern ihre Datenbank (Konfigurationsdatenbank) per TFTP. Die Datei hat im Namen zwar das Datum, jedoch keine Uhrzeit o.ä. . Die Datenbank wird gesichert sobald Änderungen an dem System vorgenommen werden – also keine feste Zeit. Am Ende bedeutet das, dass die Änderung von früh morgens gesichert wird und die Änderung eine Stunde später schlägt fehl da die Sicherungsdatei den gleichen Namen hat.

Elegant drumherum

Spontan hatte ich nur eine Idee, die ich aber auch nicht wirklich schlecht finde. Mit “incron” (von Sascha vor längerer Zeit beschrieben) – dem Filesystem Event Cron. incron kann so eingerichtet werden, dass er eine Aktion ausführt, sobald etwas in einem Pfad geschieht. Also sowas wie Datei erstellt, Datei gelöscht, Datei umbenannt …

Im Fall TFTP sieht die Konfiguration aus wie folgt (/etc/incron.d/rfpbackup):

 /srv/tftp/rfpBackup IN_CLOSE_WRITE /bin/mv $@/$# $@/sav-$#
 

Als erstes das Verzeichnis welches beobachtet werden soll, dann das Event (IN_CLOSE_WRITE -> nach dem schreiben) und am Ende der Befehl. Das einzige was ich hier mache ist die Datei umbenennen in sav-<Originaldatei>. Damit habe ich immer die letzte Sicherung und kann neue Sicherungen empfangen. Da innerhalb des Dateinamens das Datum enthalten ist, habe ich somit immer eine Sicherung pro Tag.

4 Responses to TFTP “file exists” Problem umschiffen

  1. Sascha

    Ha! Finde es schön, dass du incron wieder entdeckt hast. In der DFS wirds auch unterdessen an vielen Ecken und auch an einer sehr zentralen Stelle verwendet…

  2. Gelungene Lösung und Danke für den Hinweis auf incron. Allerdings kann ich in den betreffenden RFCs keinen Hinweis darauf finden, dass ein Überschreiben von Files verboten sei. Mein tfptd, der sich lt. Doku an RFC 1123, 1350 und 2347 – 2349 hält, kann sehr wohl Dateien überschreiben, sofern sie denn public writable sind. Hier sichern die Geräte ihre Konfiguration irgendwann und die Konfigurationsdateien werden anschließend auf dem TFTP-Server ganz normal per Cronjob gesichert.

    • Ronny

      Ich habe nach dem Problem gesucht und eine Beschreibung gefunden in der das RFC beschrieben wurde. Der in.tfpd unter Debian verhält sich auch so und ich habe keine Konfigurationsmöglichkeit gefunden.

      Am Ende fand ich Lösung recht smart, da sich daraus auch weiteres Potenzial ergibt (automatische Versionen von den Konfigs …).

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>