h1

Diskimage-File (img) mit dd auf OS X erstellen

1. Juli 2009

Wer z.B. ein ext2fs oder ext3fs in Form einer startfähigen Speicherkarte oder anderen Mediums hat, möchte davon vielleicht eine Kopie in eine Datei oder auf ein anderes Medium erstellen. Das Festplatten Dienstprogramm von OS X eignet sich dazu nicht. Dafür kann das aus der UNIX-Welt kommende dd (disk dump) dies erledigen. Und so geht es:

Um von einer Disk (z.B.  SD-Karte mit startfähigem Ubuntu-Linux) eine Kopie in eine Datei zu erzeugen und diese dann für die Erzeugung beliebig vieler „Clones“ dieser SD-Karte zu verwenden, gebe man diese Komandos auf der Komandozeile (im Terminal) von Mac OS X ein:

$ sudo -s 
# diskutil list
/dev/disk0
 #:                       TYPE NAME                    SIZE       IDENTIFIER
 0:      GUID_partition_scheme                        *232.9 Gi   disk0
 1:                        EFI                         200.0 Mi   disk0s1
 2:                  Apple_HFS Macintosh HD            232.6 Gi   disk0s2

# --> Einlegen der SD-Karte mit dem z.B. starfähigen Ubuntu

# diskutil list
/dev/disk0
 #:                       TYPE NAME                    SIZE       IDENTIFIER
 0:      GUID_partition_scheme                        *232.9 Gi   disk0
 1:                        EFI                         200.0 Mi   disk0s1
 2:                  Apple_HFS Macintosh HD            232.6 Gi   disk0s2
/dev/disk1
 #:                       TYPE NAME                    SIZE       IDENTIFIER
 0:     FDisk_partition_scheme                        *3.7 Gi     disk1
 1:                      Linux                         3.5 Gi     disk1s1
 2:                 Linux_Swap                         219.6 Mi   disk1s5

# --> Ok, wir wissen nun dass diese als /dev/disk1 angesprochen werden kann.

# diskutil umount /dev/disk1
# dd if=/dev/disk1 of=Zauberkarte.img
7729152+0 records in
7729152+0 records out
3957325824 bytes transferred in 631.937897 secs (6262207 bytes/sec)
# --> Der Inhalt von disk1 wurde nun in die Datei Zauberkarte.img kopiert

# --> Die Karte, von der kopiert wurde aus dem Kartenleser nehmen und
#     stattdessen die neue, zu überschreibende Karte einlegen.

# diskutil list
/dev/disk0
 #:                       TYPE NAME                    SIZE       IDENTIFIER
 0:      GUID_partition_scheme                        *232.9 Gi   disk0
 1:                        EFI                         200.0 Mi   disk0s1
 2:                  Apple_HFS Macintosh HD            232.6 Gi   disk0s2
/dev/disk1
 #:                       TYPE NAME                    SIZE       IDENTIFIER
 0:     FDisk_partition_scheme                        *3.7 Gi     disk1
 1:                 DOS_FAT_32 NO NAME                 3.7 Gi     disk1s1

# diskutil umountDisk /dev/disk1
Unmount of all volumes on disk1 was successful

# dd if=Zauberkarte.img of=/dev/disk1 bs=1m
3774+0 records in
3774+0 records out
3957325824 bytes transferred in 617.424331 secs (6409410 bytes/sec)

# --> Fertig, die Karte im Leser ist nun eine exakte Kopie des Images Zauberkarte.img

Fehler „Resource busy“:

Es kann folgender Fehler beim Kopieren der IMG-Datei auf die frische Karte auftreten: dd: /dev/disk1: Resource busy

$ diskutil umount /dev/disk1
$ sudo dd if=Zauberkarte.img of=/dev/disk1 bs=1m
dd: /dev/disk1: Resource busy

Der Fehler war, dass anstelle von umountDisk der Befehl unmount verwendet wurde, das nur einzelne Partitionen und nicht die ganze Disk aushängt.

So ist es richtig:

$ diskutil umountDisk /dev/disk1
Unmount of all volumes on disk1 was successful
$ sudo dd if=Zauberkarte.img of=/dev/disk1 bs=1m

h1

Foldings für pod und HERE-Documents in TextMate

23. Juni 2009

Um die mitunter längeren HERE-Dokumente sowie die Dokumentationen zwischen =pod und =cut in TextMate einklappen zu können, muss man dessen Voreinstellungen ein wenig ergänzen:

Im Bundle-Editor die Language-Grammar für Perl öffnen und die Regex für foldingStartMarker und foldingStopMarker ergänzen:

foldingStartMarker = '(/\*|(\{|\[|\()\s*$|=pod|<<\s+"\s*END_HERE")';
foldingStopMarker = '(\*/|^\s*(\}|\]|\)|=cut|\s*END_HERE))';

Damit die Foldmarker dann auch zu sehen sind, muss man sich an die folgenden Konventionen halten:

1. POD-Abschnitte immer mit =pod einleitenund =cut beenden (letzteres wird von Perl ohnedies verlangt).

2. Here-Dkumente immer mit END_HERE terminieren.

Und falls man die Rechtschreibkontrolle auch in den PODs haben will, lese man bei der glücklichen Giraffe nach

http://happygiraffe.net/blog/2006/06/22/spellchecking-pod-with-textmate/

(Allerdings stimmt der Scopeselektor dort nicht, dieser lautet richtig comment.block.documentation.perl )

h1

USB-Stick auf Asus EEEPC mounten

16. Juni 2009

Um auf der Commandline einen USB-Stick auf einem Asus EeePC zu mounten:
$ sudo -s
# lsusb -l
# dmesg | grep -i „SCSI“
–> das Gerät mit „Attached scsi removable … ist die richtige „Platte“, in meinem Fall sdb
# mount -f vfat /dev/sdb /media

Fertich!

h1

Debugging Nagios Plugins

9. Juni 2009

Heute war Debugging-Tag für die NetApp-Plugins für Nagios. Am meisten Probleme bereitete mir mein Ehrgeiz sie im ePN (Embedded Perlinterpreter for Nagios) laufen zu lassen. Bei einer Kundeninstallation wurden die Performancedaten nicht mehr verarbeitet, wenn das Script im ePN läuft – ein Fehler den ich bisher nicht nachvollziehen konnte, ich tippe hier auf eine fehlenden Kennzeichnung  (#nagios: -epn) im performance-Parser. Aber wer weiss …

Der andere Fehler waren einige Scripts, die sich im Nagios mit „Service check did not exit properly“ meldeten, während sie auf der Commandline problemlos liefen. Zunächst einmal drehte ich das Debugging im Nagios auf, indem ich in der nagios.cfg diese Werte setzte:

debug_level=16
debug_verbosity=1
debug_file=/usr/local/nagios/var/nagios.debug

Somit bekam ich dan schon alle Infos frei Haus geliefert, um die Fehler einzugrenzen. Z.B.
Embedded Perl failed to compile /usr/local/nagios/libexec/check_netapp_hardware.pl, compile error **ePN failed to compile /usr/local/nagios/libexec/check_netapp_hardware.pl: „Variable „$object“ will not stay shared at (eval 3969) line 240,“ at /usr/local/nagios/bin/p1.pl line 248.
– skipping plugin

Bei der Nachsicht in dem Plugin entdeckte ich, dass in einer Subroutine auf die mit my im Hauptprogramm definierte Variable (eben jene $object) zugegriffen wurde, was nicht 100%-ig sauber ist. Nach einer Änderung auf local our $object; lief das Plugin durch, bis zum nächsten Fehler, der dann sinngemäß gleich zu beheben war.

Anschliessend bekam ich dann noch die Meldung Check of service ‚CPU-Utilization‘ on host ’simbig‘ could not be performed due to a fork() error: ‚Cannot allocate memory‘! bzw. etwas ähnliches mit „too many open files“ was sich aber durch einen Neustart von Nagios beheben ließ.

Interessant auch, dass es schon ein Reihe von Wrapper-Scripts für Plugins gibt; die Folgenden habe ich gefunden aber sie für diese Debugging-Session dann gar nicht benötigt:

http://www.nagios.org/faqs/viewfaq.php?faq_id=379

http://www.waggy.at/nagios/capture_plugin.htm

h1

Landkarten aus dem OSM-Datenmaterial erstellen

20. Mai 2009

Grundlagen

Das Datenmaterial von Open Street Map (OSM) liegt im XML-Format vor. Jeder „Node“ ist mit seinen Koordinaten und verschiedenen zusätzlichen Informationen wie Name, Art des Nodes und Ersteller bis hin zu Öffnungszeiten, erlaubter Fahrtrichtung und vielem anderen mehr erfasst.

Mit einem Script, das selber wiederum im XML verfasst wurde (XSLT) wird dieses Material in eine Verktorgrafik umgewandelt. Als Vektorformat kommt dabei SVG zum Einsatz, das selbst ebenfalls ein XML-Format ist.

Da man recht unterschiedlich aussehende Karten aus ein und dem selben Basismaterial erstellen kann, kommen noch weitere Dateien (Typdefinitionen) bei der Umwandlung zum Einsatz. Diese legen dann beispielsweise fest, welche Deatils angezeigt werden, welches Symbol für zum Beispiel eine Apotheke verwendet wird oder in welcher Farbe Straßen erster Ordnung gezeichnet werden.

Erstellung einer Landkarte

Um eine Karte zu erstellen muss man einerseits sich die Tools dazu besorgen anderseits die XML-Daten für das gewünschte Gebiet.

Installation der Tools

Die Tools sind am einfachsten via svn auf den loaken Rechner zu spielen

$ svn co http://svn.openstreetmap.org/

XML-Daten

Die  XML-Daten für den gewünschten Kartenausschnitt, kann man sich direkt von der Webpage herunterladen mittels der dort via Browser verfügbaren Exportfunktion. Als Format ist klarer Weise XML auszuwählen. Exportiert wird der aktuelle Kartenausschnitt. Falls man größere Kartenausschnitte benötigt, gibt es auch alternative Downloadmöglichkeiten bis hin zum gesamten Datenbestand (=Weltkarte). Wenn man der Datei gleich den Namen data.osm gibt, spart sich im nächsten Schritt das Umbenennen.

Das Komando zur Erstellung einer Karte lautet dann:

$ mv data.osm svn.openstreetmap.org/applications/rendering/osmarender/xslt
$ cd svn.openstreetmap.org/applications/rendering/osmarender/xslt
$ xsltproc osm-map-features-z17-Ingo.xml > map04.svg

xsltproc ist der XSLT-Prozessor (ähnlich dem Perl-Binary das Perlscripte interpretiert); xsltproc ist auf OS X (zumundest ab 10.5) vorinstalliert.

osm-map-features-z17-Ingo.xml ist das von mir leicht veränderte Stylesheet; es teilt dem Prozessor mit, was wie umgewandelt und somit dargestellt werden soll. Dort habe ich z.B. eine Regel ergänzt, die Apartments mit einem von mir definierten Symbol auf der Karte anzeigen.

map04.svg ist die im Verktoformat auszugebende Karte

Und die eigentlichen XML-Daten sind in der Datei data.osm, deren Name ist in dem Stylsheet „hart“ definiert (data=“data.osm“).

h1

OpenStreetMaps auf Garmin nüvi 550

15. Mai 2009

Seit kurzem bin ich stolzer Besitzer eines nüvi 550 GPS von Garmin. Die Karten dafür kann man sich für teures Geld kaufen, gecrackte Versionen auch kostenlos (aber natürlich illegaler weise) downloaden oder auf die vom Projekt Open Street Map (OSM) zur Verfügung gestellten Karten zurück greifen. Der Vorteil von OpenStreetMap liegt auf der Hand: Die Kosten sind gering (man kann ja ab und zu was spenden) und Fehler im Kartenmaterial können sofort ausgebessert werden.

Die Installation der Karten von OSM auf dem GPS-Gerät erscheint zunächst einmal sehr kompliziert. Das liegt u.a. daran, dass OpenStreetMap die Basis für Karten in jeder Form und Größe und für verschiedenstee Zwecke und Geräte darstellt. Daher gibt es eine Vielzahl von Anleitungen und FAQs, durch die man sich erst einmal durcharbeiten muss, um die Spreu vom Weizen zu trennen. Für mich als Mac-Anwender und Besitzer eines aktuellen Gerätes von Garvin, reduzierten sich die nötigen Schritte auf das Folgende und solange ich keine Mountainbike-karte benötige, lässt sich alles mit Tools erledigen, die am Mac auch probemlos laufen. Ich hoffe mit diesem Artikel so manchem die mühsame Suche in diversen Wikis und Foren zu ersparen.

Vorbereitung

Um die nachfolgende Anleitung ausführen zu können, benötigt man einige Anwendungen. Von Garmin sollte man sich zumindest RoadTrip (auf Windows entspräche das dem Programm MapSource) und MapInstall herunterladen und installieren.

Zusätzlich wird das Programm Gmapi Builder benötigt. Download der graphischen Version http://berteun.nl/gmapibuilder/Gmapibuilder.dmg (aktueller Link siehe Kommentare). Benötigt wird Gmapi Builder um das für das Windows-Programm  MapSource vorbereitete Verzeichnis in ein für das Mac-Programm RoadTrip passendes gmapi-Paket zu verwandeln.

Schritt für Schritt

Download der vorbereiteten Kartenmaterials. Dieses besteht aus einer großen Anzahl von IMG-Dateien und einer TDB-Datei. Für Europa  sind diese  alle zusamengepackt in dieser Datei zu finden:
http://openstreetmap.teddynetz.de/latest/eu.tgz
(Falls man einen anderen Ausschnitt will: Ein Verzeichnis ähnlicher Dateien und alternativer Downloadmöglichkeiten ist hier zu finden.  http://wiki.openstreetmap.org/index.php/User:Computerteddy .  Interessant ist das z.B. wenn man nur Deutschland oder die ganze Welt auf seinem Garmin-GPS haben will.)

Die tgz-Datei wird von OS X nach dem Download sofort in eine tar-Datei umgewandelt, die dann wiederum mittels Doppelklick in ein Verzeichnis eu ausgepackt wird. Dort ist u.a. die besagte und für den nächsten Schritt benötigte tdb-Datei zu finden.

Start der zuvor Installierten Anwendung Gmapi Builder. In deren GUI ist dann der Pfad und Name der tdb-Datei anzugeben. Der Rest wird vom Programm i.A. richtig erkannt und ausgefüllt, so dass man nur noch auf Convert klicken muss.

Das so entstandene gmapi-Paket muss dann nur noch anklicken  und schon ist die Karte in Roadtripp zur Auswahl verfügbar.

Um sie dann auch noch am Garmin Device (bei mir das nüvi 550) zu haben, rufe man MapInstall auf. Dessen GUI ist selbsterklärend. Man bedenke aber, dass bei großen Karten die Übertragung mehrere Stunden in Anspruch nehmen kann. (Im Fall der Europakarte, auf der diese Anleitung beruht, sind es auch Stunden. Von der Installation der Weltkarte würde ich also Abstand nehmen.)

Was kann die OSM-Karte?

Die so installierte Karte ist ja nun sowohl in RoadTrip am Computer als auch am nüvi verfügbar. Die OSM-Karte ist sehr detailreich, genau und aktuell. Vor allem als Fußgänger und Radfahrer im urbanen Bereich (konkret habe ich bisher den 6. Bezirk in Wien genauer unter die Lupe genommen) freut man sich über Telefonzellen, Wasserstellen, Fusswege und Spielplätze. Das sind alles Details die auf den Garmin-Karten nicht zu finden sind. Auch war z.B. auf der Garmin-Karte ein Kino an der falschen Stelle, während die OSM-Karte hier viel genauer war. Öffentliche Verkehrsmittel sind teilweise erfasst.

Besser ausgestattet ist die Garmin-Karte was z.B. KfZ-Werkstätten betrifft aber auch Lokale und Gaststätten sind sehr viele erfasst  – leider nicht immer aktuell. Dafür fehlen die Öffis vollständig.

Der größte Vorteil der Garmin-Karte ist aber, dass man nach Adressen suchen kann und die Möglichkeit des Routings. Die wie oben importierte OSM-Karte kann das nicht (beim Import mit einem anderen Verfahren geht das aber sehr wohl, siehe unten). Was ich auf der OSM-Karte suchen kann, sind Points of Interest (POI). Das funktioniert ganz gut, wenn diese korrekt eingepflegt wurden. So findet z.B. die Suche nach „Trinkwasser“ alle jene Punkte, die im name-tag „Trinkwasser“ stehen haben. Nach anderen tags, wie z.B. jenem das auch für die Auswahl des Symbols verantwortlich ist  „amenity:drinking_water“ kann nicht gesucht werden. Das hat zur Folge, dass solche Punkte zwar auf der Kartenansicht im RoadTripp aufscheinen, aber mittels Suchfunktion nach „drinking_water“ nicht zu finden sind. Das tut vor allem dann weh, wenn solche Punkte von verschiedenen Personen erfasst wurden, die zwar alle konsequent das generische tag „amenity:drinking_water“ setzen, bei der Namensgebung aber die erlaubte Freiheit sich nehmen: Trinkwasser, Trinkbrunnen, Wasserstelle, Brunnen wären alles passende Inhalte für das name-tag. Am nüvi selbst, ist ein Suche nach dem POI „Trinkwasser“ gar nicht möglich. Sehr wohl aber werden Öffis, Polizei, u.ä. gefunden. Die dahinter stehende Logik ist mir noch nicht klar dürfte aber darin begründet sein, dass im Gegensatz zu dem Garmin-eigenen IMG-Format das OSM zugrundeliegende Namensschema beliebig erweiterbar ist.

Routing-fähige Karten aus OSM-Daten

Wer eine routuingfähige Karte möchte dem sei die auf OSM-Basis erstellte Karte der Mountainbiker empfohlen. In Wien habe ich diese kurz getestet und sie führt einen tatsächlich recht brav über Radwege und durch Einbahnstraßen – auch dann, wenn man kein Bergradl hat :-)

Info und Download hier http://openmtbmap.org/

Tipp: Auf meinem System konnte das mit dem Gmapi Builder erzeugte gmapi-Paket nicht richtig installiert und in Roadtrip nicht verwendet werden. Hier musste ich erstmals ein in einer VM installierten Windows-Rechner in Betrieb nehmen, das Material (tdb- und img-Dateien) nach MapSource (RoadTrip-Entsprechung auf Windows) importieren und dann mit dem Mac-Converter von Garmin in ein gmapi-Paket umwandeln. Dieses so erzeugte gmapi-Paket hat sich dann am Mac wiederum problemlos in Roadtrip einbinden und von dort auf das nüvi kopieren lassen.

Fazit

Für Autofahrten ist der City Navigator (bei mir die Version 2010) von Garmin, die ja auch kostenlos im nüvi mitgeliefert wird bis auf weiteres erste Wahl:  Tankstellen, KfZ-Werkstätten und Restaurants sind in großer Zahl erfasst. Für Fussgänger im urbanen Bereich sind Karten die aus den OSM-Datenbeständen erstellt wurden schon sehr brauchbar und eine wirklich ersntzunehmende Alternative, die heute schon in manchen Belangen den kommerziellen Garmin-Karten überlegen sind. Keine Erfahrung habe ich bisher wie die auf OSM basierenden Karten im ländliche Raum oder anderen Städten ausgestattet sind. Und eines habe ich mir auch schon hinter die Ohren geschrieben: Neben dem nüvi nehme ich immer noch Stadtplan, Kompass, Karten und andere Orientierungsutensielien mit, die keinen Akku brauchen, kein Betreibssystem haben, das sich mal eben so „aufhängt“ und auch dann noch Ihre Dienste tun wenn sie einem von weit oben auf den Boden fallen.

h1

Nagios: Monitoring the lag-time of SnapMirrors on NetAppFiler

5. Mai 2009

I just finished a new version of check_netapp_snapmirror. You can use it to monitor the lag-time of several or all snap mirrors on a netapp-filer.

Some examples:

$ check_netapp_snapmirror.pl -H toaster -u nagios%pass
Checks the lag-time of all snampmirror-sources on toaster with the default-thresholds.

$ check_netapp_snapmirror.pl -H netapp11 -u nagios%pass -X netapp11:vol4
Checks the lag-time of all snapmirror-sources on netapp11 with the exception of vol4 using the default-thresholds.

$ check_netapp_snapmirror.pl -H netapp11 -u nagios%pass -X netapp11:vol2 -X netapp11:vol4 -w 120 -c 240
Checks the lag-time of all snapmirror-sources on netapp11 with the exception of vol2 and vol4 – thresholds are set to 120 and 240 sec.

$ check_netapp_snapmirror.pl -H toaster -u nagios%pass -l vo1 -e pair_state –ok_pairstate=snapmirrored –ok_pairstate=uninitialized –w_pairstate=source
Checks vol1, ok if state is either snapmirrored or uninitialized, warning if source.

$ check_netapp_snapmirror.pl -H toaster -u nagios%pass -e last_transfer_duration -w 360 -c 1800
Checks the last-transfer-duration of all snampmirror-sources on toaster. Warning if more than 5 minutes (360s) and critical if more than 1 hour (1800s).
http://ingo.lantschner.name/NetappNagiosPlugins.html