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:
- eMail Adresse, zu der das Paket geschickt werden soll
- Verzeichnis, daß gespiegelt werden soll
- Dateiname, der in der Mail angegeben werden soll
- 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:
- Subject der Art "PUT <Verzeichnis>. So wird es von
mailmirror erzeugt
- 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:
- Originalverzeichnis, so wie's in der Mail steht
- Zielverzeichnis, wo es wieder ausgepackt werden soll
- Dateiname in der Mail
- eMail Adresse des Senders
- 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