matze's blog

Compress maildir with dovecot's zlib plugin

With dovecots zlib plugin, it's possible to have compressed mails in the users maildir.

I've written a script to compress all mails on my mailserver:

#!/bin/sh

compress_maildir () {
cd $1
DIRS=`find -maxdepth 2 -type d -name cur`
for dir in $DIRS; do
        echo $dir
        cd $dir
        FILES=`find -type f -name "*,S=*" -not -regex ".*:2,.*Z.*"`
        #compress all files
        for FILE in $FILES; do
                NEWFILE=../tmp/${FILE}
                #echo bzip $FILE $NEWFILE
                if ! bzip2 -9 $FILE -c > $NEWFILE; then
                        echo compressing failed
                        exit -1;
                fi
                #reset mtime
                if ! touch -r $FILE $NEWFILE; then
                        echo setting time failed
                        exit -1
                fi
        done
        echo Locking $dir/..
        if PID=`/usr/libexec/dovecot/maildirlock .. 120`; then
                #locking successfull, moving compressed files
                for FILE in $FILES; do
                        NEWFILE=../tmp/${FILE}
                        if [ -s $FILE ] && [ -s $NEWFILE ]; then
                                echo mv $FILE $NEWFILE
                                mv $FILE /tmp
                                mv $NEWFILE ${FILE}Z
                        else
                                echo mv failed
                                exit -1
                        fi
                done
                kill $PID
        else
                echo lock failed
                exit -1
        fi
        cd - >/dev/null
done
}

compress_maildir /home/user/.maildir/
chown -R username:users /home/user/.maildir/

If using this script, please do it after an backup/copy of the maildir, the script is far away from being perfect :-)

If the Script is rerun, it checks the files for a Z at the end of the filename, so the file isn't recompressed.

With compressed mails i saved ~25% of space.

ReactOS 0.3.11 veröffentlicht

Eine neue Version von ReactOS wurde veröffentlicht:

Neue Features gibt es kaum, aber der Memorymanager wurde neu geschrieben und bringt damit eine höhere Stabilität, außerdem wurde ein Easteregg eingebaut und es gibt nun Spider Solitaire :-)

Auf Golem.de gibt es ein paar Screenshots.

 

Linux 2.6.33 - Interessantes in Aussicht

Linux 2.6.33 scheint die beiden Probleme anzugehen, dass es keine offenen Grafiktreiber und kein HA/Cluster-Dateisysteme ohne zusätzliche Patches im Kernel gibt.

Es wird gleich zwei neue Möglichkeiten für ein verteiltes Dateisystem geben:

  • DRBD ist verteiltes Block-basiertes Gerät, im Prinzip ein RAID übers Netzwerk, benötigt auch für andere Cluster-Dateisysteme
  • Ceph ist ein Cluster-Dateisystem, wird als Kernel-Modul integriert, bisher war es nur als Fuse-Dateisystem verfügbar

Der "nouveau" Treiber wird integriert. Damit sind endlich für ATI und Nvidia Opensource-Treiber verfügbar in die auch über längere Zeit eine 3D-Beschleunigung integriert wird. Aktuell waren eigentlich nur die proprietären Treiber für den alltäglichen Gebrauch geeignet.

Der Kernel wird vermutlich im April 2010 veröffentlicht.

Default Password Konica Minolta 4650en

The default password for the Konica Minolta 4650en webinterface is: "administrator"

It's to hidden in the docs... ;-)

Eximstats script

I've written a little bash-script for eximstats. This script runs eximstats so, that it creates a daly/weekly/monthly and yearly report :-)

This script doesn't create an index.html or so, but within a .htaccess "Options +Indexes" this should be no problem :-)

#!/bin/sh

STATSPATH="/path/to/exim/status/output"
EXIMLOG="/var/log/exim/exim_*.log"

##end config
cd $STATSPATH

DAY=`date +"%u"`
WEEK=`date +"%W"`
MONTH=`date +"%m"`
YEAR=`date +"%Y"`

function report(){
    OUTPUT=$1
    MERGEPATTERN=$2
    mkdir -p $OUTPUT
    echo eximstats -html -charts -merge -chartdir $OUTPUT -chartrel $OUTPUT $MERGEPATTERN.html
    eximstats -html -charts -merge -chartdir $OUTPUT -chartrel $OUTPUT $MERGEPATTERN.html > $OUTPUT.html
}

#create daily report
mkdir -p day$DAY
eximstats -html -charts -chartdir day$DAY -chartrel day$DAY $EXIMLOG >day$DAY.html
#update weekly report
report week$MONTH-$WEEK day?
#update monthly report
report month$MONTH week??-??
#uptdate yearly report
report year$YEAR month??

The script is called from logrotate.

/etc/logrotate.d/exim:

/var/log/exim/exim*.log {
        daily
        missingok
        rotate 28
        compress
        delaycompress
        notifempty
        create 640 mail mail
        sharedscripts
        prerotate
                /path/to/eximstats.sh
        postrotate
                /etc/init.d/exim restart > /dev/null
        endscript
}

 

mod_rewrite-hell (-:

Da ich den Blog von /home nach / verschoben und lesbare URLs aktiviert habe musste ich für die alten Links der Form /home/?q=node/1 auf das neue Schema /node/1 einen Redirect einrichten.

Das geht in Apache mit dem Modul mod_rewrite:

.htaccess:
RewriteCond %{REQUEST_URI} ^/home RewriteCond %{QUERY_STRING} [0-9]+
RewriteRule ^(.*)$ /node/%0? [R=301,L]

Apache überprüft zuerst, ob die RewriteRule anwendbar ist, dann werden die RewriteCond überprüft: Die erste RewriteCond testet, ob in REQUEST_URI die ersten zeichen (da ein ^ am Anfang steht) mit /home beginnen.

Die zweite Regel such einfach nach einer Zahl. Und mit der RewriteRule wird dann die URL überschrieben, links steht was überschrieben werden soll ^(.*)$ heißt im Prinzip die komplette URL. Daneben steht mit was überschrieben wird /node/ ist klar, %0 bedeutet der Wert den die Regex eine Zeile vorher ermittelt hat und das Fragezeichen bedeutet, dass keine Parameter mehr angehängt werden sollen.

In den Eckigen klammern stehen noch Parameter zum Redirect, 301 ist der HTTP-Code, L bedeutet, dass keine weiteren RewriteRules mehr abgearbeitet werden. Dann hat noch das Wiki gefehlt, das ist auch in Drupal umgezogen. Die Umleitung für die alten Links war dort aber relativ einfach:

.htaccess:
RewriteRule ^wiki/index.php(.*)$ wiki/$1 [L,R=301]

 

Schnell mal Linux installieren oder testen?

Um mal schnell eine fast beliebige Distribution zu installieren, ohne sich zuerst das komplette, meist ~700MB große Image aus dem Laden zu müssen, kann man GPXE verwenden.

Mit dem Bootloader ist es möglich direkt aus dem Internet eine z.B. Ubuntu-Live-CD zu booten. Vorausgesetzt wird natürlich eine bestehende Internetverbindung, über WLAN wird die Software vermutlich auch nicht ohne weiteres funktionieren. Aber um mal kurz ein Ubuntu in eine Virtuellen Maschine zu installieren... dafür ist die Software ideal geeignet!

In einem kurzen Test habe ich eine Ubuntu-LiveCD gestartet, dabei wurden "nur" ~120MB übertragen bis das System gestartet war. Bei DSL, bei dem Virtualbox leider im Test abgestürzt ist, wäre die übertragene Datenmenge natürlich viel geringer, da das Image nur ~50MB gross ist.

daemon-tools for linux?

A long time ago i searched a tool to mount cd-images like .MDS .ISO .CUE with linux. There was none... only things like mount -o loop were avaiable.

Today i've found cdemu: it does all i want, it only installs a very small kernel module to emulate a Virtual (SCSI) Host Bus Adapter, the rest is done in userspace.

There is also the small GUI gCDEmu to "mount" an image. It is a gnome-panel applet. Thumbs up! :-)

libvirt and virtualbox-ose not working?

I tried to use libvirt and virtualbox-ose, but i only get this error:

$ virsh Fehler: no hypervisor driver available Fehler: Verbindung zum Hypervisor scheiterte

After an "strace -e open virsh" i found, that it can't found VBoxXPCOMC.so. Virtualbox-ose installs into /usr/lib64/virtualbox-ose/ but libvirt searchs in /usr/lib64/virtualbox ...

The solution was to set the env-variable VBOX_APP_HOME before starting virsh:

VBOX_APP_HOME=/usr/lib64/virtualbox-ose virsh

And now it works! :-)

Pages

Subscribe to RSS - matze's blog