SDB:Besser arbeiten mit Mailboxen über NFS
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
Symptom
mutt erkennt neue Mails in Mailboxen auf NFS-Shares, die via "mailboxes" konfiguriert wurden nicht zuverlässig oder Mails gehen sporadisch verloren.
Ursache
NFS ist in vielen Bereichen einfach total "buggy" Attributcaching und Locking via NFS ist nicht richtig möglich.
Lösung
Die beste Lösung besteht darin, sein Mailboxformat von mbox auf maildir umzustellen. Hierbei wird jede Mail in einer separaten Datei gespeichert und sämtliche Mailattribute stehen im Dateinamen. Die Dateinamen sind einzigartig und somit ist ein Locking nicht mehr nötig. Nachteil dabei ist, dass das Einlesen großer Mailboxen etwas länger dauern kann; dafür geht das Schreiben von Mailboxen (dies geschieht fast bei jedem Mailfolder-Wechsel) umso schneller, da nur die geänderten Mails geschrieben werden müssen. Außerdem gehen keine Mails mehr durch Lockingprobleme verloren.
Vorgehen
"Maildir" wird sowohl von mutt als auch von procmail unterstützt. Es ist zumindest empfehlenswert, Mailboxen, in denen man häufig arbeitet und in die Mail eingeliefert wird auf maildir umzustellen. Dafür hängt man in seiner .procmailrc an jeden Mailbox-Namen einen Slash (/) an. Bevor man nun seine procmailrc sichert und Procmail bei der nächsten eingehenden Mail versucht ein Verzeichnis zu erstellen, was so heißt wie die alte Mailbox muss man seine alten Mailboxen umbenennen und direkt im Anschluss die neue procmailrc schreiben. Das Umbenennen kann man z.B. mit
mmv "*" "#1.oldmbox"
bewerkstelligen. Nachdem man dann die procmailrc geschrieben hat, kann man entweder seine alten Mailboxen nochmals durch procmail "jagen", wobei diese dann so sortiert werden, als kämen sie gerade neu an. Dies kann man mit
for i in `ls *.oldmbox`;do formail -s procmail < $i ;done
machen. Will man die Mailboxen von Hand (besser gesagt mit mutt) umkopieren (das würde ich eigentlich empfehlen), so sollte man vorher in seine .muttrc die Zeile
set mbox_type=maildir
eintragen, damit neue Mailboxen im maildir-Format erzeugt werden. Danach wechselt man in seine "alten" Mailboxen, "taggt" z.B. mit
T.[return]
alle Mails und kopiert diese dann z.B. mit
s+neuermailboxname[return]
in den neuen Mailboxfolder (mit dem alten Namen). Wenn die Umkopieraktion beendet ist können die .oldmbox-Dateien gelöscht werden.
Erweiterte Features
Es gibt eine Möglichkeit, gelöschte Mails aus maildir-Ordnern lokal auf der Platte zu speichern, anstatt sie im Datennirvana verschwinden zu lassen. Dies ist relativ einfach, weil man gelöschte Mails einfach als gelöscht markieren kann, anstatt sie wirklich zu eliminieren. In der muttrc muss man dafür die Zeile
set maildir_trash
eintragen. Nun macht man sich einfach ein kleines Shell-Skript in ~/bin/move-deleted-mails:
#!/bin/sh
# make sure to have this directories:
# /tmp/deleted-mails
# /tmp/deleted-mails/cur
# /tmp/deleted-mails/new
# /tmp/deleted-mails/tmp
# in mutt deleted mails will be moved to this directory. You may want to
# delete this from time to time or just keep it for nostalgic reasons ...
/usr/bin/find ~/Mail/*/{cur,new}/ -name "*,*T" |/usr/bin/xargs -r /bin/mv -b --target-directory /tmp/deleted-mails/cur
Wenn man auf seinem lokalen Rechner dann einen Cronjob à la
0 * * * * ~/bin/move-deleted-mails
aufsetzt, werden stündlich alle gelöschten Mails nach /tmp/deleted-mails verschoben, die IntEDV freut sich, weil das Homeverzeichnis etwas kleiner wird und man muss keine Angst haben eine evtl. wichtige Mail zu vernichten.
Keywords: nfs | mutt | mail | locking

