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.