Tips and tricks

Różne sztuczki i kruczki, które wyszły przy przenoszeniu poczty pomiędzy serwerami

Backup sasldb2

Przy migracji serwera jest możliwe przeniesienie zawartości bazy /usr/local/etc/sasldb2:

# na bieżącym serwerze:
#
db_dump-5 -p /usr/local/etc/sasldb2 > /tmp/sasldb2.backup

# na nowym serwerze:
#
cat /tmp/sasldb2.backup | db_load-5 /usr/local/etc/sasldb2

Sprawdzenie rozbieżności pomiędzy bazą danych, a katalogami na dysku

# zgodnie z dokumentacją może być "ciężkie" dla dysku
#
/usr/local/cyrus/sbin/ctl_mboxlist -v

Naprawa brakujących katalogów, plików na dysku, które są w bazie

su - cyrus -c "/usr/local/cyrus/sbin/reconstruct -x user.tcmagda"
su - cyrus -c "/usr/local/cyrus/sbin/reconstruct -r user.tcmagda"

Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (tworzenie archiwum)

for m in `ldapsearch -xLLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}'`
do
       p=`echo $m | cut -c1`
       echo -n "Archiving $m ..."
       tar -cf /opt/backups/mx/_${m}.tar -C /var/spool/imap/$p/user/$m .
       echo "Done."
done

Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (rozpakowanie archiwum)

for m in `ldapsearch -xLLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}'`
do
       p=`echo $m | cut -c1`
       echo -n "Extracting $m ..."
       tar -xf /opt/backups/mx/_${m}.tar -C /var/spool/imap/$p/user/$m
       echo "Done."
done

Utworzenie skrzynek na podstawie poddrzewa OpenLDAP

Głównie dotyczy serwera typu archiwum skrzynek. Tylko oczywiście wcześniej musi działać serwer IMAP :-)

ldapsearch -xLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}' | xargs -n1 -t /usr/local/admin/vusers/mail_useradd --mbox

Sprawdzenie duplikatów dla bazy delivery

/usr/local/cyrus/sbin/ctl_deliver -d | grep __Message_ID__

Usunięcie duplikatów z bazy delivery (aby móc ponownie wykonać program delivery)

/usr/local/cyrus/sbin/cyr_expire -v -E __okres_czasu__ -p user.userid

gdzie okres_czasu jest domyślnie liczony w dniach. Szczegóły można znaleźć w manualu:

man -m /usr/local/cyrus/man cyr_expire

Wesłanie maili z pliku mbox do właściwej skrzynki

formail -ds sh -c 'cat > msg.$FILENO' < plik_mbox

for f in `ls msg.*`
do
      cat $f | egrep -v '^From ' | /usr/local/cyrus/sbin/deliver -a cyrus -m folder userid
done

Usunięcie maili z danej skrzynki spełniających kryteria

Jest dostępne narzędzie ipurge, które pozwala usuwać maila spełniające pewne kryteria (wiek maila w dniach, wielkość, itd.). Domyślnie narzędzie ipurge działa na folderach współdzielonych, niemniej jest możliwość usunięcia również maila u danego użytkownika. Manual nie dostarcza przykładów, zatem poniżej sposób na wyczyszczenie skrzynki archiwum dla maili starszych niż 2 lata:

su -m cyrus -c "/usr/local/cyrus/sbin/ipurge -f -d 750 __user.archeo.folder__"

Dodanie opcji "-n" do polecenia ipurge zapewni wykreowanie listy maili, które zostaną usunięte.

Po wykonanych porządkach dostaniemy podsumowanie takiego folderu po wykonanych porządkach:

Total messages                   2217
Total bytes                      2238085301
Deleted messages                 1300
Deleted bytes                    1217974136
Remaining messages               917
Remaining bytes                  1020111165

To jeszcze nie zwalnia miejsca. Trzeba jeszcze "wymusić" usunięcie maili poprzez cyr_expire

su -m cyrus -c "/usr/local/cyrus/sbin/cyr_expire -X 0 -v -u __archeo___"