Geocaching mit Garmin eTrex H und Linux

Mein Bruder hat mich besucht und bei mehreren Spaziergängen fürs Geocaching begeistern können. Zum Abschied hat er mir sein Garmin eTrex H geschenkt. Dazu auch ein in Deutschland unverschämt teures USB-to-Serial-Adapterkabel zum Anschluss des GPS-Empfänger an den PC. Doch wie greift man mit Linux auf den eTrex H zu? Das soll nun geklärt werden.

Wird der GPS-Empfänger mit dem Adapterkabel am PC angeschlossen, werden die folgenden Kernelmeldungen ausgegeben.

[ 221.546821] usb 4-1: new full speed USB device using uhci_hcd and address 2
[ 221.701877] usb 4-1: configuration #1 chosen from 1 choice
[ 222.199965] usbcore: registered new interface driver usbserial
[ 222.201199] /build/buildd/linux-2.6.24/drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
[ 222.203032] usbcore: registered new interface driver usbserial_generic
[ 222.203042] /build/buildd/linux-2.6.24/drivers/usb/serial/usb-serial.c: USB Serial Driver core
[ 222.213108] /build/buildd/linux-2.6.24/drivers/usb/serial/usb-serial.c: USB Serial support registered for pl2303
[ 222.214970] pl2303 4-1:1.0: pl2303 converter detected
[ 222.216137] usb 4-1: pl2303 converter now attached to ttyUSB0
[ 222.217288] usbcore: registered new interface driver pl2303
[ 222.217299] /build/buildd/linux-2.6.24/drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver

Es werden die Kernelmodule usb-serial und pl2303 nachgeladen. Erfolgt dies nicht automatisch kann mit modprobe pl2303 manuell nachgeholfen werden. Sollten diese Module nicht zur Verfügung stehen (und nicht fest einkompiliert sein), müssen distributionsabhängig entweder die Module nachinstalliert oder der Kernel mit den aktivierten Modulen neu kompiliert werden. Das Garmin-Gerät sollte nun über /dev/ttyUSB0 erreichbar sein.

Um Waypoints, Routen und Tracks übertragen zu können, gibt es für Linux GPSBabel. Die Software kann die vielen gebräuchlichen Formate umwandeln und dabei vom PC auf den GPS-Empfänger (oder umgekehrt) übertragen.

Die Koordinaten eines Geocaches von Geocaching.com als Waypoint an den Garmin eTrex H zu senden ist einfach. Es wird das “LOC Waypoint File” (geocaching.loc) heruntergeladen und mit dem folgenden Kommando übertragen:

$ gpsbabel -i geo -f geocaching.loc -o garmin -F /dev/ttyUSB0

Placemarks aus GoogleEarth lassen sich ebenfalls umwandeln. Sollen Plätze aus GoogleEarth auf den Garmin übernommen werden, sind diese zuerst in der Keyhole Markup Language (Datei mit Endung KML) zu speichern. Liegen die Daten als KMZ-Datei vor, können diese mit unzip entpackt werden. Zum Vorschein kommt eine KML-Datei.

$ unzip GoogleEarth.kmz
Archive: GoogleEarth.kmz
inflating: doc.kml
$ gpsbabel -i kml -f doc.kml -o garmin -F /dev/ttyUSB0

Sollen alle im Garmin gespeicherten Waypoints (Parameter -w; default), Routen (-r) und Tracks (-t) in GoogleEarth übernommen werden, müssen sie ins KML-Format umgewandelt werden. Das geht ganz einfach mit dem folgenden Kommando:

$ gpsbabel -w -r -t -i garmin -f /dev/ttyUSB0 -o kml -F garmin.kml

Danach kann man die Daten in GoogleEarth laden und visualisieren lassen.
Eine ausführliche Anleitung, wie man die Daten des Garmin mit Perl auswertet, ist im Perl-Snapshot des Linux Magazins zu finden.

Updates im Griff mit cron-apt

Mit cron-apt lassen sich Systeme, die die Paketverwaltung von Debian nutzen, leicht automatisch aktuell halten. In der Standardkonfiguration aktualisiert cron-apt die in der Datei /etc/apt/sources.list eingetragenen Repositories und verschickt bei verfügbaren Updates eine E-Mail an den Administrator. Aufgerufen wird es dabei — wie der Name vermuten lässt — als Cron-Job. Die Benachrichtigung sieht wie im folgenden Beispiel aus:

CRON-APT RUN [/etc/cron-apt/config]: Tue May 13 14:00:01 CEST 2008
CRON-APT SLEEP: 2558, Tue May 13 14:42:40 CEST 2008
CRON-APT ACTION: 3-download
CRON-APT LINE: /usr/bin/aptitude dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
Reading package lists...
Building dependency tree...
Reading extended state information...
Initializing package states...
Building tag database...
The following packages will be upgraded:
libssl0.9.8 openssl
2 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 3718kB of archives. After unpacking 0B will be used.
Writing extended state information...
Get:1 http://security.debian.org etch/updates/main libssl0.9.8 0.9.8c-4etch3 [2717kB]
Get:2 http://security.debian.org etch/updates/main openssl 0.9.8c-4etch3 [1001kB]
Fetched 3718kB in 4s (908kB/s)

Wer es sich traut, kann die verfügbaren Updates automatisch einpflegen lassen. Hierzu muss allein eine neue Action erstellt werden. (Alternativ kann der Parameter -d aus der zweiten Zeile in der Datei /etc/cron-apt/action.d/3-download entfernt werden. Der Parameter sorgt dafür, dass die Updates lediglich heruntergeladen und nicht installiert werden.) Die neue Action kann zum Beispiel so aussehen:

# cat /etc/cron-apt/action.d/9-safe-upgrade
upgrade -y -o Aptitude::CmdLine::Show-Versions=true -o APT::Get::Show-Upgraded=true

Es sei davor gewarnt, Updates automatisch installieren zu lassen. Durch diesen Eingriff kann ein System unerwünschte oder unerwartete Veränderungen erfahren. Im Beispiel oben (dem Debian-OpenSSL-Fiasko) hätte sich ein Benutzer mit verwundbarem SSH-Key möglicherweise nicht mehr auf dem System anmelden können.

Sollen nur bestimmte Updates berücksichtigt werden, kann man die Auswahl auf ausgewählte Repositories beschränken. So werden nur Security-Updates automatisch eingespielt, wenn cron-apt eine Datei nur mit dem entsprechenden Repository übergeben wird. Eine paketbasierende Auswahl ist nicht möglich.

# cat /etc/cron-apt/config
[...]
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
[...]

Mit Fail2Ban Dovecot absichern

[EDIT: October 9, 2008 10:34 PM: Achtung: Das hier beschriebene Verfahren ist praktisch wirkungslos, wenn nicht die in den Kommentaren genannten Änderungen angewandt werden.]

Mit Fail2Ban lässt sich ein System recht flexibel gegen Einbruchsversuche absichern. Es kann durch reguläre Ausdrücke in den Logdateien fehlerhafte Authentifizierungsversuche (Passworteingaben) erkennen. Werden zu viele falsche Authentifizierungsversuche festgestellt, wird der zugreifende Host für eine bestimmte Zeit durch eine Firewallregel geblockt.

In der Standardkonfiguration von Fail2Ban ist leider kein Filter für den IMAP-Server Dovecot beigefügt, weshalb ich einen erstellt habe. Die folgenden Zeilen sind als Filter in /etc/fail2ban/filter.d/dovecot.conf zu speichern.

[Definition]
# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching.
# Values:  TEXT
#
failregex = (?:imap|pop3)-login: Disconnected: user=<.*>, method=(?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5), rip=<HOST>, lip
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Danach ist ein Jail für Dovecot zu erstellen. Hierzu fügt man die folgenden Zeilen der Datei /etc/fail2ban/jail.local an:

[dovecot]
enabled  = true
port     = imap,imaps,pop3,pop3s
filter   = dovecot
logpath  = /var/log/mail.log

Damit der Filter von Fail2Ban genutzt werden kann, muss die Konfiguration neu geladen werden.

# fail2ban-client reload

Mit dem folgenden Befehl kann geprüft werden, ob der neue Filter Matches in den Logs findet:

# fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/dovecot.conf

Perl 5.10 auf Ubuntu (zusätzlich) installieren

Perl 5.10 wurde Ende 2007 veröffentlicht, fand aber keinen Einzug in das kürzlich erschienene Ubuntu 8.04 LTS. Wer die neuen Features von Perl 5.10 ausprobieren oder nutzen möchte, muss es separat hinzuinstallieren. Die vorinstallierte Perl-Version (5.8.8) sollte bestehen bleiben und weiterhin als Standard ausgeführt werden.

Zunächst wird der aktuelle Tarball von Perl 5.10 heruntergeladen und entpackt. Danach werden mit den folgenden vier Befehlen Perl kompiliert und installiert. Die Installationsanleitung erklärt die Details.

$ sh Configure -de
$ make
$ make test
$ sudo make install PERLNAME=perl510

Mit dem Parameter PERLNAME wird der Name des Perl-Binary übergeben. So ist sichergestellt, das `perl` weiterhin den vorinstallierten Perl-Interpreter aufruft. Mit dem Kommando `perl510` wird dann Perl 5.10 ausgeführt.

$ perl -v | head -n 2
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
$ perl510 -v | head -n 2
This is perl, v5.10.0 built for i686-linux

Ein Beispielskript und seine Ausgabe:

$ cat first.pl
use feature ':5.10';
say "Hello, world!";
$ perl510 first.pl
Hello, world!