I prefer english.

Ein Mirror, der auf Mail basiert

Ich stand vor der Problematik, daß ich in der Uni einen HTML Bereich habe und zuhause auch. Das war eigentlich noch keine richtige Problematik, die kam erst, als ich anfing, sowohl zuhause als auch in der Uni die Dateien zu verändern und so langsam den Überblick verlor, was ich wo verändert habe. Es gab also zwei Versionen von Joey's Infopool, die beide auf dem Gleichen basierten. Da mußte also etwas geändert werden.

Nun habe ich zuhause keinen direkten Internet-Anschluß und kann deshalb auch nicht die herkömmliche Mirror-Software benutzen. Aber für mich stand fest, daß ich den Bereich zuhause bearbeiten werde und in der Uni lediglich eine Kopie davon liegt. Jetzt stand die Frage ins Haus, wie ich das realisieren könnte. Als einzige Möglichkeit blieb mir Mail übrig, da auch uucp nicht über mehrere Rechner klappt. Also muß ich zuhause die neuen Dateien zusammensuchen, einpacken, komprimieren, zum Mail-Paket machen und verschicken. In der Uni muß der Rechner das Paket lediglich erkennen und wieder auspacken.

Diese Mirror-Software arbeitet etwas anders als Herkömmliche. Das Programm muß nämlich auf dem Server installiert werden und nicht auf dem Clienten. Es werden alle Dateien eingepackt, die neuer als eine Referenzdatei sind. Zum Schluß wird die Referenzdatei getoucht. Das Paket besteht aus zwei Programmen. Je eins für den Server und eines für den Clienten.

mailmirror wird auf dem Server installiert und von cron aus aufgerufen. Das Programm benötigt 4 Parameter:
  1. eMail Adresse, zu der das Paket geschickt werden soll
  2. Verzeichnis, daß gespiegelt werden soll
  3. Dateiname, der in der Mail angegeben werden soll
  4. Referenzdatei
Ein solcher Aufruf könnte wie folgt aussehen:
4 5 * * *	mailmirror joey@Infodrom.North.DE ~/public_html public_html.tar.gz ~/public_html/.allow
processput wird auf dem Clienten installiert. Das Programm bekommt als stdin eine von mailmirror erstellte Mail und benötigt zwei Parameter:
  1. Subject der Art "PUT <Verzeichnis>. So wird es von mailmirror erzeugt
  2. Absender bzw. Reply-To Addresse, damit überprüft werden kann, ob der Sender überhaupt berechtigt ist, zu spiegeln
processput hat kleines Sicherheitssystem. Dazu muß für jedes gespiegelte Verzeichnis ein Eintrag in der Datei ~/putlist (kann eingestellt werden) gemacht werden. Die Felder werden durch ':' voneinander getrennt. Eine Zeile, die mit einem '#' anfängt, wird ignoriert. Nach dem letzten Feld (auch wenn es leerbleibt) muß noch ein Doppelpunkt stehen. Die Felder bedeuten:
  1. Originalverzeichnis, so wie's in der Mail steht
  2. Zielverzeichnis, wo es wieder ausgepackt werden soll
  3. Dateiname in der Mail
  4. eMail Adresse des Senders
  5. eMail Adresse, an den ein Report geschickt werden soll. Dieses letzte Feld darf als einziges leerbleiben.
Ein Eintrag könnte z.B. so aussehen:
/home/joey/public_html:/home/joey/public_html:public_html.tar.gz:joey:joey:
Um die Kontrolle an processput zu übergeben, benutze ich das Programm filter, daß beim ELM mitgeliefert wird. Es kann aber auch procmail oder ein eigenes benutzt werden.

Bei mir sieht dir Datei .forward so aus:

"|/usr/local/bin/filter"
und die Datei filter-rules im Verzeichnis ~/.elm hat folgenden Inhalt:
if ( subject matches /PUT/ ) then execute "~/processput %s %r"
if ( subject matches /./ ) then save /var/spool/mail/joey
Der letzte Eintrag ist nötig, da sonst alle anderen Mails nicht im Mail-Folder, sondern in ~/EMERGENCY_MAILBOX gespeichert würden.

Was noch fehlt ist die Behandlung ungültiger Mails. Im Augenblick werden diese pauschal weggeworfen. Das könnte sich in Zukunft vieleicht ändern.


Joey, 22 Sep 1994