Headerbild

Wer neulich nach meiner Anleitung das htop-osx Projekt bei sich installiert hat, wird evtl. schon festgestellt haben, dass in dieser Version vom htop-osx keine Anzeige des Swap möglich ist. Die beiden Werte stehen dauerhaft auf 0 anstatt sich den eigentlichen Systemwerten anzupassen. Damit verliert man natürlich ein wenig den Überblick über seine Ressourcen.

Ich habe mich heute mal daran gemacht einen kleinen aber feinen Patch für htop-osx zu schreiben, der das behebt und es ist mir gelungen. Wie man hier sehen kann zeigt mein htop jetzt brav meine Swap-Werte an und ich habe auch darüber einen Überblick:

Die Befehlsliste für die Installation ändert sich damit dann wie folgt:

git clone git://github.com/AndyA/htop-osx.git
cd htop-osx
git checkout -b osx origin/osx
curl http://gist.github.com/raw/420738/gistfile1.diff | git apply
./autogen.sh
export CFLAGS="-m32"
./configure
make
sudo make install

Damit wird in der 4. Zeile mein Patch automatisch auf den Quellcode angewandt. Den Patch habe ich außerdem noch an den Entwickler geschickt, damit er ihn fest in den Quellcode übernehmen kann. Sobald das geschehen ist, wird die 4. Zeile der Befehlsliste 6 Fehlermeldungen produzieren:

error: patch failed: ProcessList.c:864
error: ProcessList.c: patch does not apply
error: patch failed: ProcessList.h:196
error: ProcessList.h: patch does not apply
error: patch failed: htop.c:358
error: htop.c: patch does not apply

Das gleiche passiert, wenn Ihr versucht den Patch 2x auf den gleichen Quellcode anzuwenden.

Heute habe ich mal wieder eine Runde mit dem jOSM-Editor gearbeitet, den ich jetzt schon seit ein paar Wochen nicht angefasst hatte. Dabei kam was kommen musste und es stand ein Update an. Beim jOSM eigentlich absolut nichts ungewöhnliches, da dort die Entwicklung sehr schnell voran schreitet.

Was mich dann dazu brachte, dass ich kurz ein Script und einen LaunchAgent für Mac OS geschrieben habe, der mir den jOSM-Editor automatisch auf dem aktuellen Stand hält:

Dieses Script macht nichts anderes als die aktuelle getestete (also stabile) Version herunter zu laden und bei einem erfolgreichen Download an die gewünschte Stelle zu verschieben. Das Script ist durchaus auch für Linux-Distributionen einsetzbar. Allerdings müsst Ihr euch da einen anderen Weg suchen es periodisch zu starten (Cronjob).

Für OSX gibt es da die Möglichkeit einen LaunchAgent anzulegen, der diese Starts für euch übernimmt:

Dieser LaunchAgent hier startet das Script immer um 02:00 Uhr morgens und sorgt dafür, dass ich jeden Tag, wann immer ich jOSM starte, eine aktuelle Version zum Arbeiten habe.

Die beiden Programmargumente müsst Ihr natürlich entsprechend anpassen. Das erste Argument ist der absolute Pfad zum Script selber. Der zweite Pfad ist der absolute Pfad, an dem die jOSM.jar liegen wird, nachdem sie dorthin verschoben wurde.

Die plist-Datei legt Ihr dann in das Verzeichnis “Library/LaunchAgents/” in eurem Home-Verzeichnis und meldet euch danach einmal neu an um sie zu aktivieren. Das Script muss natürlich mit einem “chmod +x josm-update.sh” ausführbar gemacht werden, damit es funktioniert.

Alles in allem vollkommen unspektakulär aber vielleicht kann es jemand brauchen.

Heute habe ich mich aufgrund eines Problems mit meinem Browser ein wenig damit beschäftigt, wie man ordentliche Informationen über die laufenden Prozesse auf einem Mac bekommt. Dabei steht natürlich ganz oben auf der Liste die standardmäßig installierte Aktivitätsanzeige von OSX. Ganz ehrlich: Was mir das Ding liefert finde ich schlichtweg unbrauchbar.

Also war meine nächste Intention mein gewohntes und “geliebtes” htop auf OSX zum Laufen zu bringen. MacPorts wollte ich dafür nicht extra installieren also selber kompilieren. Sollte eigentlich nicht so das Problem sein, da ich aufgrund meiner Entwicklung von Programmen für OSX sowieso ein Xcode installiert habe.

Im Folgenden mal eine kleine Anleitung für jeden, der htop auch mag und es sich “eben” selber auf den Mac bringen möchte. Es gibt eigentlich nur zwei Voraussetzungen: Bei der Installation vom Xcode muss drauf geachtet worden sein, dass die Option für “Unix Development” angehakt ist. Wenn Ihr das nicht habt: Vergesst es! (Es geht aber ist ein elendes Gefrickel, was ich nicht erklären möchte.) Die zweite Voraussetzung ist ein installiertes GIT. (Inzwischen sollte das Abrufen auch mit SVN gehen aber das müsst Ihr euch dann selber eben für das Repository raussuchen.)

Ab jetzt ist es eigentlich recht einfach und mit den folgenden Befehlen sollte ein fertiges und laufendes htop auf eurem System liegen. Zu einem Befehl sage ich später noch etwas.

git clone git://github.com/AndyA/htop-osx.git
cd htop-osx
git checkout -b osx origin/osx
./autogen.sh
export CFLAGS="-m32"
./configure
make
sudo make install

Wenn bis dahin keine Fehler aufgetreten sind sollte ein “htop” im Terminal euch ein laufendes htop auf den Bildschirm zaubern.

Was die Befehle angeht sollte eigentlich so ziemlich alles klar sein bis auf die CFLAGS-Variable: Die muss auf “-m32″ gesetzt werden, da sonst unter SnowLeopard ein 64bit-Binary erzeugt wird. Hört sich im ersten Moment zwar gut an, geht aber im zweiten Moment schief. Der Sourcecode ist nicht auf 64bit optimiert und euch fliegt das htop beim Starten wunderbar mit folgender Fehlermeldung um die Ohren:

htop(6175) malloc: *** error for object 0x100e00: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

Somit habt Ihr ein lauffähiges htop und könnt schauen was die Prozesse für einen Unsinn treiben.

Vorab: Das hier vorgestellte ist nicht die einzige Lösung, es gibt diverse Möglichkeiten über Anwendungen von Drittanbietern, ich wollte mich allerdings darauf beschränken, ohne Zusatzanwendungen aus zu kommen. Bitte lest euch die Anleitung erst vollständig durch bevor Ihr sie durchführt. Solltet Ihr in irgendeiner Form unsicher sein, was die Befehle machen fragt bitte jemanden, der sich mit der Arbeit im Terminal auskennt!

Aus gegebenen Anlass habe ich mich heute mit der Synchronisation meines OSX-Adressbuchs zu Google Contacts beschäftigt. Diese Möglichkeit nutze ich als  parallele zum Synchronisieren meines Kalenders über Google Calendar. Dazu sollte wie oben erwähnt keine zusätzliche Applikation installiert werden, da OSX diese Synchronisation nativ unterstützt. Sie ist nur ein wenig kompliziert zu aktivieren.

Als erster Schritt muss die Konfigurationsmöglichkeit überhaupt freigeschaltet werden. (Jeder, der bisher ein iPhone mit iTunes synchronisiert hat kann sich diesen Schritt sparen!) Ob das nötig ist, könnt Ihr sehen, wenn Ihr in die Einstellungen im Adressbuch.app geht. Ist dort neben “Mobile.me”, “Exchange” und “Yahoo” auch “Google” sichtbar bitte direkt zum nächsten Schritt gehen. Andernfalls muss eine Einstellung geändert werden. Dazu öffnet Ihr ein Terminal und fürt folgenden Befehl aus:

open ~/Library/Preferences/com.apple.iPod.plist

Dieser Befehl öffnet einen Editor für die oben angegebene Datei. Dort sucht Ihr den Eintrag “Root -> Devices -> (…) -> Family ID” und ändert diesen auf die Zahl “10001″. An Stelle der Punkte steht die GeräteID eures iPods. (Damit die Datei verfügbar ist muss mindestens ein normaler iPod synchronisiert worden sein!) Jetzt müsst Ihr Adressbuch.app neu starten und schon sollte der Punkt zur Synchronisation zu Google verfügbar sein:

Die aktivierte Google-Einstellung

Ab hier geht die Synchronisation relativ einfach. Als erstes müsst Ihr den Punkt wie oben zu sehen anhaken und euer Google-Konto eintragen. Dafür einfach eure vollständige Google-Mail Adresse und das zugehörige Passwort eintragen.

Jetzt sollte bei jedem Anstecken eines iPhones eine Synchronisation durchgeführt werden. Wem das genau wie mir zu wenig ist bzw. wer kein iPhone hat kann sich mit einem Trick helfen. Die Synchronisation kann mit einem einfachen Terminalbefehl angestoßen werden:

/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync

Achtung: Vor dem erstmaligen Synchronisieren sollten in Google Contacts keine Kontakte vorhanden sein. Das erleichtert die Synchronisation.

Zur automatischen Durchführung der Synchronisation sollte entgegen der Anleitung, die hier vorher stand nicht Crontab genutzt werden sondern der LaunchD. Ein gutes Tool um die LaunchD-Dateien zu editieren ist Lingon, welches ein einfaches Interface dazu bietet. So sieht der Task dann in Lingon aus, mit dem stündlich die Synchronisation durchgeführt wird (Die Benennung bleibt natürlich euch überlassen.):

LaunchD-Task für die automatische Synchronisation

Ich hoffe diese kleine Anleitung bringt ein wenig Licht ins Dunkel der hunderten Forenbeiträge, in denen immer behauptet wird, dass die Synchronisation ohne ein iPhone überhaupt nicht möglich sei.

Unter OSX gibt es eine schöne möglichkeit die eigenen Daten mit Boardmitteln zu verschlüsseln. Man legt einfach im “Festplatten-Dienstprogramm” ein neues verschlüsseltes Image an, öffnet dieses und kopiert seine Daten dort hinein. Allerdings wird dabei ein so genanntes “Sparseimage” erzeugt. Das ist ein großer Archivblock, der solange er wächst immer eine Datei ist. Somit müssen Backup-Programme, wie z.B. Timemachine immer das komplette Image sichern, was bei einer Datenmenge von z.B. 1 GB unnötig viel Platz verbraucht.

Es gibt dazu aber auch eine schönere Möglichkeit, die für Inkrementelle Backups (Es wird immer nur das gesichert, was sich auch geändert hat) wesentlich besser geeignet sind. Diese Images können ebenfalls über eine AES-256bit Verschlüsselung gesichert werden, legen aber die Daten in vielen kleinen verschlüsselten Blöcken ab. Damit ist zwar immer noch nicht möglich exakt die Datei in das Backup zu übernehmen, die sich gerade geändert hat, allerdings muss nur der kleine Block geändert werden. So kann z.B. wenn sich in unseren 1GB Daten nur eine 100kb Datei ändert die Sicherungsgröße von 1GB auf 8MB verkleinert werden. Die dafür genutzte Möglichkeit sind die so genannten “Sparsebundle”s. Leider können diese nicht über das Festplatten-Dienstprogramm angelegt werden.

Um ein solches Image zu erzeugen ist ein kurzer Befehl im Terminal nötig. Öffnet dazu das OSX-Terminal und begebt euch z.B. in den Ordner “~/Desktop” (Euer Schreibtisch).

Zum Anlegen eines Sparsebundles benötigt Ihr nun folgenden Befehl:

hdiutil create -size 15g -encryption AES-256 -type SPARSEBUNDLE -nospotlight -volname "Dokumente" -fs "HFS+" Dokumente.sparsebundle

Damit wird ein mitwachsendes Image erzeugt, welches eine maximale Größe von 15 GB erreichen kann. Starten wird das so erzeugte Image mit ca. 20MB Größe. Damit ist die Erstellung prinzipiell schon abgeschlossen und Ihr könnt es mit einem Doppelklick öffnen und eure Daten hinein packen.

Ich möchte euch allerdings noch einen kurzen Überblick über die Parameter des Befehls geben:

  • -size 15g – Die maximale Größe des Images
  • -encryption AES-256 – Die Verschlüsselungsmethode für dieses Image. Möglich wäre auch die schwächere AES-128 Verschlüsselung.
  • -type SPARSEBUNDLE – Der Typ des Images
  • -nospotlight – Spotlight soll die einzelnen Blöcke im Image nicht indizieren
  • -volname “Dokumente” - Der Name eures Images (Wird später im Finder als “Laufwerksname” angezeigt.)
  • -fs “HFS+” – Das Dateisystem im Inneren des Images. Denkbar wäre hier auch das Journal des HFS-Dateisystems einzuschalten “HFS+J”, was allerdings die initiale Größe des Images deutlich erhöht.
  • Als letztes der Name des Verzeichnisses. Dieser muss immer auf “.sparsebundle” enden, damit der Finder das Bundle öffnen kann.

Als kleiner Tip zum Schluss: Wenn Ihr im Finder das Image auswählt und “Command+I” drückt, könnt Ihr anhaken, dass die Endung versteckt wird. Damit seid Ihr das lästige “.sparseimage” los, obwohl es weiterhin da ist.

knuttr2@knut.me