Samstag Jan. 26, 2013

Slide: Lasttest mit JMeter

Ein gute Einführung von Larry Davidson:

Load Testing With JMeter by LAwebdevmeetup

Donnerstag Jan. 24, 2013

Schöne Ausgabe der Git History auf der Kommandozeile

Wenn man sich folgende Aliase in die .git/config einträgt, kann man sich die Git-History auf der Kommandozeile recht schön anzeigen lassen:

[alias]
lg1 = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
lg2 = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(bold white)— %an%C(reset)' --abbrev-commit
lg = !"git lg1"

git lg
git lg2

Donnerstag Dez. 20, 2012

MySQL und DevOps

Slides und Webinar zum Thema "Manage MySQL like a Devops Sysadmin".

Mittwoch Okt. 31, 2012

Dokumentenscanner unter Linux - Fujitsu ScanSnap S1500

Im neuen Linux Magazin 12/12 beschreibt Perlmeister Schilli, wie er seine Bücher mit Hilfe von Perl und dem Dokumentenscanner Fujitsu ScanSnap S1500 einliest. Der scheint unter Linux gut zu funktonieren und wird von SANE unterstützt. Robin Clarke hat hier für ein Script geschrieben, das die die Scan's automatisch einliest und als PDF speichert, sobald man auf den GO Knopf des Scanners drückt.

Einfaches Solr Start/Stop-Skript

Hier ein kleines Start/Stop-Skript für Solr, wenn man den integrierten Jetty verwendet. Unter Ubuntu braucht man das "daemon" Paket, damit das Ganze funkt. Das Verzeichnis "/opt/solr" sollte dann dem User/Gruppe gehören, den man unter "--user" angibt. Ebenso sollte natürlich das Log-Verzeichnis existieren und dem User gehören, unter dem Solr dann läuft.


#!/bin/sh

start () {
    echo -n "Starting solr..."

    # start daemon
    daemon --chdir='/opt/solr/example' --pidfiles='/opt/solr' --user=user:group --command "java -jar start.jar" --respawn --output=/var/log/solr/solr.log --name=solr --verbose

    RETVAL=$?
    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}

stop () {
    # stop daemon
    echo -n "Stopping solr..."

    daemon --stop --pidfiles='/opt/solr' --name=solr --verbose
    RETVAL=$?

    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}


restart () {
    daemon --restart --pidfiles='/data/solr' --name=solr --verbose
}


status () {
    # report on the status of the daemon
    daemon --running --pidfiles='/opt/solr' --verbose --name=solr
    return $?
}


case "$1" in
    start)
        start
    ;;
    status)
        status
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    *)
        echo $"Usage: solr {start|status|stop|restart}"
        exit 3
    ;;
esac

exit $RETVAL


Montag Okt. 22, 2012

Langsame MySQL Queries ausfindig machen

Anstatt eines der MySQL Logs (slowquery.log im Speziellen) zu verwenden, um die langsamen Queries heraus zufinden, kann man das Ganze weit weniger invasiv (in Form von CPU und I/O) und genauer gestalten. Man benötigt dafür tcpdump und das Percona Toolkit

Als Erstes schneiden wir mit tcpdump mal den Netzverkehr mit, der auf dem Standard MySQL Port 3306 läuft (mal angenommen tcpdump läuft auf dem Rechner, auf dem die MySQL auch ist):

tcpdump -s 65535 -x -nn -q -tttt -i any -c 9999999 port 3306 | gzip -c > /tmp/tcpdump.txt.gz

Das kann man dann solange laufen lassen, wie man will. I.d.R. dürften aber 10 bis max. 30 Min. vollkommen ausreichen. Hängt natürlich auch etwas davon ab, wieviel auf der DB so an Queries/Sek. rein gehen. 

Dann können wir das Ganze auswerten:

gunzip -c /tmp/tcpdump.txt.gz | /pfad/zu/pt-query-digest --type tcpdump > /tmp/digest.txt

Zu pt-query-digest gibt es unzählige Optionen. Da muss man mal die Doku durchblättern. pg-query-digest kann nebei auch noch PostgreSQL und memcached Queries auswerten. Sehr praktische Sache... :-) 

Alternativ finde ich das kommerzielle GUI-Tool Jetprofiler recht schön. Nicht ganz günstig, aber die Daten werden schön aufbereitet (nicht nur Queries, sondern noch viel mehr) und man hat alles im Überblick.

Donnerstag Okt. 18, 2012

MySQL Index Design und Tipps / MySQL Upgrading

Auf der Percona Seite gibt es zwei sehr interesseante Slides / Webinars zum Thema MySQL (englisch):

Index-Design: Tools und Techniken
MySQL Indexing: Best Practices

Sehr interessant und einfach erklärt, wie man mit Indizes vernünftig in MySQL umgeht und verwaltet. Es werden z.B. div. Tools vorgestellt, mit denen man relativ einfach prüfen kann, ob ein Index überhaupt notwendig ist oder wie man raus findet, auf welche Spalten ein Index sinnvoll ist. Zu viele Indizes sind ja bekanntlich auch nix... ;-)

Dann noch ein weiteres Webinar mit Slides zum Thema MySQL Updates und welche Möglichkeiten es gibt, eine MySQL möglichst schnell und problemlos auf eine neue Minor- oder Major-Release zu heben.

Teil eines Videos verlustfrei kopieren bzw. herrausschneiden mit Linux und ffmpeg

ffmpeg -ss <start zeit in hh:mm:ss> -t <dauer in hh:mm:ss> -i originaldatei.mpeg -acodec copy -vcodec copy out.mpeg

Mittwoch Okt. 17, 2012

Apache Verzeichnis freigeben - außer einem...

Manche Dinge kosten einen wirklich die letzten Haare... ;-) Man hat ein DocRoot-Verzeichnis "/", welches man absperren will, aber einen Ordner "/public" will man für die ganze Welt erreichbar haben. Das kann man sehr schön wie folgt lösen:

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user
SetEnvIf Request_URI "(path/to/directory/)$" allow
SetEnvIf Request_URI "(path/to/file\.php)$" allow
Order allow,deny
Allow from env=allow
Satisfy any

Also ganz normal die üblichen Auth*-Direktiven rein und Require valid-user, dann setzt man mit SetEnvIf für jeden Pfad bzw. Datei eine allow-Variable und bei "Allow from env=allow" sagen wir dem Apache, das der Zugriff auf Resourcen gestattet ist, wenn sie mit der allow-Variable ausgestattet ist. Ansonsten kommt die Passwortabfrage. Praktische Sache :-)

Im Orginal kann man das hier nachlesen (mit noch etwas mehr Information): Stupid htaccess Trick: Enable File or Directory Access to Your Password-Protected Site

Mittwoch Sep. 19, 2012

PVR Support jetzt in XBMC integriert

Wer hätte das gedacht, das ich das noch erlebe :-) Endlich ist der PVR Support fest im XBMC integriert. Am 5.9.2012 hat Lars Opdenkamp den entsprechenden Commit durchgeführt:

 [pvr] added PVR support to XBMC (taken from https://github.com/opdenkamp/xbmc/commit/c576c080532a0e4c4ffc7babd57782f80a6951ba)

Ich schätze, Lars hat selbst nicht mehr daran geglaubt ;-) Damit dürfte wohl der nächste XBMC Release Frodo endlich auch den PVR Support haben. Um z.B. den VDR einzubinden, braucht man aktuell dann nur noch das xbmc-addon-xvdr von Alexander Pipelka.

Montag Sep. 10, 2012

Advanced Introduction to JavaScript Video

Sonntag Sep. 09, 2012

Thunderbird goes Twitter

Ich wusste gar nicht, das Thunderbird mit Version 15 jetzt auch Twitter kann :-) In meinem englischsprachingen Thunderbird findet man unter Tools/Chat-Status jetzt die Möglichkeit bei Twitter anzumelden. Recht praktisch...

Freitag Sep. 07, 2012

Java SDK mit wget herunterladen

Update 20140603: Wenn man den Download-Link für das Java SDK einfach so an wget übergibt, dann klappt das nicht mit dem Download. Aber wie folgt funktionierts:

Java 7: 

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz"

Java 8:

wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.tar.gz

Die Java-Version muss man natürlich entsprechend ändern, wenn es neuere Releases gibt.

Mittwoch Sep. 05, 2012

Stop Writing Puppet Modules That Suck

Ein netter Artikel von Github Sysadmin Tim Sharpe wie man vernünftige Puppet Module schreibt. Es ist i.d.T. so, daß die Module auf github.com oder wo auch immer Module angeboten werden, zum großen Teil wirklich übel sind und überhaupt nicht verwendet werden können, ohne sie massiv anzupassen. Er gibt hier gute Tipps, wie's besser geht.

Dienstag Sep. 04, 2012

mysqldump: Error 2013: Lost connection to MySQL server...

Falls einem mal der Fehler 2013 bei mysqldump

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `...` at row: ...

über den Weg läuft, dem dürfte das Erhöhen zweier net_*_timeout Parameter weiterhelfen. Zum Einen in der my.conf:

net_read_timeout = 120
net_write_timeout = 900

Und wenn man das gleich aktiv haben will noch ohne Neustart:

set global net_read_timeout = 120;
set global net_write_timeout = 900;

Die Werte sind in Sekunden. Ich hatte das Problem, beim Sichern auf einen langsamen NFS-Mount. Die Meldung selber deutet eigentlich auf ein ganz anderes Problem hin und ist ziemlich irreführend. Nun ja, wenn da auf jeden Fall mehrere Backups liefen, wurde das teilweise arg langsam. Die Parameter schufen Abhilfe.