Wie fühlen wir uns den heute?

Hab die letzten Tage mal ein Plugin für Nagios/Icinga geschrieben, das die Temperatur meines Pi prüft. Die Arithmetik der Dash-Shell hat wohl ein Problem mit Dezimalzahlen, daher musste das Ganze dann auch noch ausschließlich mit Integern funktionieren. Und weil ich schon dabei war, funktioniert das ganze auch mit Fahrenheit.

check_pi_temp:

#!/bin/sh
#
# Author: Rajko Zschiegner
# Date: 14/01/12
# Purpose: Check Raspberry Pi temperature
#

PROGNAME=basename $0
PROGPATH=echo $0 | sed -e 's,[\\/][^\\/ [^\\/]*$,,'
REVISION=echo '$Revision: 1.00 $' | sed -e 's/[^0-9.]//g'

. $PROGPATH/utils.sh

print_usage() {
    echo "Usage: ${PROGNAME} -w  -c  [-f]"
    echo "\t-f calculate temperatures in Fahrenheit"
    echo "\te.g. ${PROGNAME} -w 60 -c 70"
    echo "\t60°C is equiv. to 140°F, 70°C to 158°F"
}

# Make sure the correct number of command line
# arguments have been supplied

if [ $# -lt 4 ]; then
    print_usage
    exit $STATE_UNKNOWN
fi

FAHRENHEIT=0
UNIT="°C"
UNIT_EQ="°F"

while [ $# -gt 0 ]; do
    case $1 in
        ("-w") {
                shift
                if [ $1 -gt 0 ] 2>/dev/null; then
                    w_temp=$1
                else
                    print_usage
                    exit $STATE_UNKNOWN
                fi
                };;
        ("-c") {
                shift
                if [ $1 -gt 0 ] 2>/dev/null; then
                    c_temp=$1
                else
                    print_usage
                    exit $STATE_UNKNOWN
                fi
                };;
        ("-f") FAHRENHEIT=1;;
    esac
    shift
done

if [ $FAHRENHEIT -eq 1 ] ; then
    UNIT="°F"
    UNIT_EQ="°C"
fi

TEMPERATURE=cat /sys/class/thermal/thermal_zone0/temp

if [ $FAHRENHEIT -eq 0 ] ; then
    TEMP_DEGREE=echo $(((TEMPERATURE + 500) / 1000))
    TEMP_DEGREE_EQ=echo $(((TEMPERATURE * 18 + 5000) / 10000 + 32))
else
    TEMP_DEGREE=echo $(((TEMPERATURE * 18 + 5000) / 10000 + 32))
    TEMP_DEGREE_EQ=echo $(((TEMPERATURE + 500) / 1000))
fi

if [ $TEMP_DEGREE -gt $c_temp ] ; then
    echo "Temperature: critical ${TEMP_DEGREE}${UNIT} (or ${TEMP_DEGREE_EQ}${UNIT_EQ})"
    exit $STATE_CRITICAL
elif [ $TEMP_DEGREE -gt $w_temp ] ; then
    echo "Temperature: warning ${TEMP_DEGREE}${UNIT} (or ${TEMP_DEGREE_EQ}${UNIT_EQ})"
    exit $STATE_WARNING
else
    echo "Temperature: ok ${TEMP_DEGREE}${UNIT} (or ${TEMP_DEGREE_EQ}${UNIT_EQ})"
    exit $STATE_OK
fi

Und damit das ganze auch noch vernünftig mit nagiosgraph angezeigt wird, der passende Eintrag für die /etc/nagiosgraph/map:

# Service type: Raspi Temp
# output:Temperature: ok 47°C (or 117°F)
# or with -f output:Temperature: ok 117°F (or 47°C)
/output:Temperature\:.*?([.\d]+)°C \(or ([.\d]+)°F\)/
and push @s, ['raspitemp',
                ['Celsius', GAUGE, $1 ],
                ['Fahrenheit', GAUGE, $2 ] ];

/output:Temperature\:.*?([.\d]+)°F \(or ([.\d]+)°C\)/
and push @s, ['raspitemp',
                ['Celsius', GAUGE, $2 ],
                ['Fahrenheit', GAUGE, $1 ] ];

Sicher doch!

Nun läuft der Webserver nur noch über SSL. Owncloud läuft auch schon und ist befüllt, z.B. mit den Mercedes Benz Mixed Tapes.

Erstellen des Zertifikates:

cd /etc/apache2
sudo mkdir ssl.key
sudo mkdir ssl.crt
sudo mkdir ssl.csr
sudo openssl genrsa -out ssl.key/raspi.madavi.de.key 4096
sudo openssl req -new -sha256 -key ssl.key/raspi.madavi.de.key -out ssl.csr/raspi.madavi.de.csr

Der Zertifikats-Request kann dann bei einer CA verwendet werden, um ein Zertifikat zu bekommen (z.B. kostenlos bei StartSSL).

Dann muss das Ganze nur noch in der Apache-Konfig angepasst werden.

    SSLEngine on

    SSLProtocol All -SSLV2
    SSLHonorCipherOrder On
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AES:RC4:!ADH:!AECDH:!MD5:!DSS

    SSLCertificateFile      /etc/apache2/ssl.crt/raspi.madavi.de.crt
    SSLCertificateKeyFile   /etc/apache2/ssl.key/raspi.madavi.de.key
    SSLCertificateChainFile /etc/apache2/ssl.crt/sub.class1.server.ca.pem
    SSLCACertificatePath    /etc/apache2/ssl.crt/
    SSLCACertificateFile    /etc/apache2/ssl.crt/startssl_ca.pem

Das Ganze gibt dann Verbindungen mit Perfect Forward Secrecy für alle Browser außer den IE-Varianten.