Erste Basteleien mit dem Oyo

Bereits seit Weihnachten besitze ich nun einen Oyo. Dabei handelt es sich um einen E-Book-Reader, der in Deutschland von Medion produziert und von Thalia vertrieben wird und international gibt es dieselbe Plattform von Qisda auch unter anderen Namen. Das Gerät ist ARMv5-basiert und es läuft bereits ein Linux-System darauf. Die mitgelieferte Oberfläche zum Betrachten von Büchern, Browser, Audio-Player usw. ist mit Qt/Embedded implementiert.

Es sollte daher ja möglich sein, auch andere Verwendungsmöglichkeiten für den Oyo zu erschließen (z.B. als Organizer mit Kalenderfunktion, als Fernbedienung mit einem mpd-Client, usw.).

Continue reading

bash: for-loop with glob patterns

It is common to use a for-loop with glob patterns:

for i in *.txt; do
    mv $i $i.old
done

But if the glob pattern does not match anything it will be preserved unchanged in the command. This results in command execution of mv *.txt *.txt.old which fails because no file named *.txt (literally!) exists.

As this is not the desired behavior, here is a way how to do this as expected without forking using the nullglob bash shell option.

oldnullglob=$(shopt -p nullglob)
shopt -s nullglob

for i in *.txt; do
    mv $i $i.old
done

eval "$oldnullglob" 2>/dev/null
unset oldnullglob

This will silently prevent the execution of the mv command. If you use failglob instead of nullglob bash will interrupt the evaluation of any command if the glob pattern did not match anything.

Disclaimer: Be careful with this option, as this will not be the expected behavior in all cases. Most (in)famously it breaks bash-completion if you set it in your interactive bash session. I suggest to use it temporary only.

Checking expiry dates of SSL certificates

Once again I missed the expiry date of one of the SSL certificates on my server. Therefore I am now using a cronjob to warn me early enough that a certificate is about to expire.

This is the script /usr/local/bin/ssl-cert-check which checks the expiry date of the certificate files passed as arguments:

#!/bin/bash
 
DAYS=30
 
for file in "$@"; do
    openssl x509 -checkend $(( 86400 * $DAYS )) -in "$file" > /dev/null
    if [ $? != 0 ]; then
        echo "==> Certificate $file is about to expire soon:"
        openssl x509 -enddate -in "$file" -noout
    fi
done

And the corresponding cronjob entry checking SSL certificates once a day:

MAILTO=root
6       6    * * *  nobody  /usr/local/bin/ssl-cert-check /etc/apache2/ssl/*.crt /etc/ssl/certs/dovecot.pem