Saturday, November 6, 2010

UNIX: Fehler finden mit Strace

Oft reicht die Fehlersuche über Logmeldungen nicht aus, um einen Fehler zu beheben. Dann ist ein kontrolliertes Ausführen des Programms in einem Debugger erforderlich. Dafür sind debug-Symbole nötig, und meist ein Neubau erforderlich.

Ohne debug-Symbole können allerdings auch schon nützliche Informationen mit "strace" gewonnen werden. Das Programm zeigt alle "System Calls" einer Applikation auf. Meist ist dann im Fehlerfall schon zu erkennen, welche Datei geöffnet wird oder wo genau der Fehler tatsächlich entsteht.

Natürlich muss ein Daemon vorher im Vordergrund ausgeführt werden, um die strace Befehle zu sehen. Konkret habe ich das verwendet um PPTPd in Freetz zu debuggen, siehe Dokumentation im Freetz-Wiki.

Einfaches Beispiel der Strace-Verwendung:

# strace echo 3
execve("/bin/echo", ["echo", "3"], [/* 15 vars */]) = 0
brk(0)                                  = 0x1ec03000
uname({sys="Linux", node="unknown-namer", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb3aa000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=42988, ...}) = 0
mmap(NULL, 42988, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2aeadb3ac000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\355\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1432968, ...}) = 0
mmap(NULL, 3541032, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2aeadb5ac000
mprotect(0x2aeadb704000, 2093056, PROT_NONE) = 0
mmap(0x2aeadb903000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x157000) = 0x2aeadb903000
mmap(0x2aeadb908000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aeadb908000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb90d000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb90e000
arch_prctl(ARCH_SET_FS, 0x2aeadb90db20) = 0
open("/dev/urandom", O_RDONLY)          = 3
read(3, "(\333\372\211\343\357\201", 7) = 7
close(3)                                = 0
mprotect(0x2aeadb903000, 16384, PROT_READ) = 0
mprotect(0x2aeadb5a9000, 4096, PROT_READ) = 0
munmap(0x2aeadb3ac000, 42988)           = 0
brk(0)                                  = 0x1ec03000
brk(0x1ec24000)                         = 0x1ec24000
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3927616, ...}) = 0
mmap(NULL, 3927616, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2aeadb90f000
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadbcce000
write(1, "3\n", 23
)                      = 2
close(1)                                = 0
munmap(0x2aeadbcce000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?

Tuesday, November 2, 2010

Fritzbox Rettungsupdate Freetz Recover mit Push_Firmware

Über einen kleinen eingebauten FTP-Server, der nur beim Booten aktiv ist, kann man auch die Fritzbox Firmware updaten:
# ./tools/push_firmware images/neues_firmware.image
(box neustarten)
Dabei gingen meine Firmware-Einstellungen nicht verloren.

Auf Mac OS X funktionierte bei mir nur ncftp zum kopieren und ich musste im Skript auch noch einige Änderungen bei uname und mktemp vornehmen, weil die BSD-Apps vom Mac hier strikter sind.

Ich verwende gerne die neueste Version des Fritzbox-Mods Freetz, den so genannten SVN Trunk. Die Bleeding-Edge Version wird laufend aktualisiert und enthält stundenaktuelle Neuerungen, ist deshalb allerdings auch extrem instabil.

Zum Beispiel im Changeset 6093 wurde ein Bug aus 6078 vorerst revertet. Ich habe allerdings dazwischen eine neue Firmware gebaut und eingespielt - danach startete die Box nicht mehr neu. Ein Recover half mir wieder ins Internet.


Saturday, October 23, 2010

Wiki2Touch: Howto offline Wikipedia auf dem iPhone OS 4.X

Das beste Feature der iPhone/iTouch Reihe überhaupt meiner Meinung. Wichtige geschichtliche, technische oder kulturelle Fragen können ohne Internetzugang beantwortet werden. Anlässlich meines Updates auf iOS 4.1 schreibe ich ein kleines HOWTO dazu.

Installiert werden muss ein kleiner Server und die Wikipedia Daten.

1. Software auf dem iPhone installieren
# apt-get install com.jmaille.sbswiki2touch sbsettings coreutils
Hinweis: um "apt-get" verwenden zu können, muss in Cydia APT 0.7 Strict installiert worden sein

SBSettings erlaubt das schnelle aktivieren des Servers. Auf SBSettings kann man mit einem Wisch des Fingers über die Leiste oben zugreifen.

2. Wikipedia Dumps
Nun müssen noch die Wikipedia Dumps auf das Device geladen werden. Norbert stellt diese kostenlos bereit [1]. Danke! Die Dateien müssen nach /User/Media/Wikipedia/de auf dem iDevice als images_de.bin und articles_de.bin. Bei mir funktionierten nur die 120px Bilder.
Zum Kopieren nutze ich den kostenlosen iPhone Explorer [2]
3. Webclip Icon für Wiki2Touch erzeugen, danke an Lucas [3]
Nachdem Wiki2Touch mit SBSettings aktiviert ist, kann man über http://localhost:8080 auf Wiki2Touch zugreifen. Um das ganze etwas komfortabler zu machen, gibt es das Webclip - ein Lesezeichen, das wie ein App-Icon aussieht.

- gehe im MobileSafari auf http://localhost:8080
- drücke auf das (+) unten in der Mitte
- wähle "Zum Home-Bildschirm"

Und ein schönes Wiki2Touch-Icon taucht auf in der iPhone App-Liste auf :-)

4. Wikipedia geniessen. Und so sieht das aus:



Für Wiki2Touch gibt es regelmässig neue Dumps. Die aktuelle Entwicklung kann man im Apfeltalk Forum verfolgen [4]


Repair Cydia crash with apt-get for iPhone OS 4.1

iPhone 4.1 Cydia crashed on me because the Pwnagetool 4.1.2 jailbreak in expert mode installed outdated packages and missed some dependencies. To fix this I used the installed SSH connection to the iPhone to repair and update packages:

# apt-get update
# apt-get -f install
# apt-get dist-upgrade

Friday, October 22, 2010

Debian vs. Ubuntu für Server

Ubuntu und Debian benutzen das gleiche Paketformat. Allerdings bieten beide unterschiedliche Versionen an. Debian hat ein sehr unregelmäßiges stable-release weshalb oft ungetestete Pakete in einem System zu finden sind. Ubuntu dagegen macht regelmäßige Releases um Neuerungen anzubieten. [1]

Auf einem Server ist es nicht nötig, immer die neueste Version zu haben. Viel wichtiger ist es, die neueste Version der eingesetzten Serveranwendungen zu haben. Und diese neuesten Versionen werden meist von der Community bereit gestellt. Die Installation und der Betrieb dieser Anwednungen brauchen am meisten Zeit. Dabei helfen Installationsanleitungen, HowTos, Pakete, Foren, Blogs und andere Informationen, die meist von der Community bereitgestellt werden.

Wie lässt sich die beste Community finden? Die Qualität der Community ist schwer zu messen. Allerdings ist die Quantität durch Google Trends abschätzbar [2]. Der Suchbegriff "Ubuntu" überholte die anderen Distributionen in 2006. In 2010 suchen in etwa 10 mal so viele Leute nach Ubuntu wie nach Debian. Auch bei Distrowatch ist Ubuntu schon seit mehr als einem Jahr führend bei den Zugriffszahlen [3]. Laut diesen Zahlen ist Ubuntu zu empfehlen, wenn zahlreiche Community-Informationen benötigt werden.

[1] http://itmanagement.earthweb.com/osrc/article.php/12068_3890111_3/Debian-vs-Ubuntu-Contrasting-Philosophies.htm
[2] http://www.google.de/trends?q=ubuntu,debian,fedora,suse,redhat,rpm,deb&ctab=0&geo=all&date=all&sort=0
[3] http://distrowatch.com/stats.php?section=popularity

Tuesday, September 28, 2010

Wireshark Kurztipp: Expert Infos des Netzwerks

Installation unter Mac OS
Abgreifen der Pakete erfordert volle Rechte auf dem Interface:
$ sudo chown deinUserAccountName /dev/bpf*

Kurztipp
Nach dem ersten Aufnehmen (und Stoppen) sieht man alle gecapturten Pakete. Allerdings ist nicht so klar sichtbar, ob das Fehler sind oder nicht. Dafür gibt es die Expert Infos. Ganz links unten ist ein gelber Punkt (siehe roter Pfeil im Screenshot)


Jedes TCP/IP Paket hat eine Sequenznummer und so erkennt Wireshark wenn etwas nicht stimmt. Pakete out-of-order angekommen sind oder ähnliches. Alle vermuteten Probleme werden hier gezeigt. In meinem Fall gab es sehr viele vermutete Verluste, aber tatsächlich nur 4 vermutete Neuübertragungen, was aber auch an der kurzen Aufnahmezeit liegen kann. Das Ergebnis mit 1.339 Auffälligkeiten auf 24.127 Pakete (5.5%) liegt wohl am schlechten WLAN, ist aber OK.

Wireshark gibt mir den Blick auf die Grundlagen des Netzes, immer wieder interessant. Danke für den Tipp an Experteach auf der heutigen Veranstaltung über Wireshark.

Saturday, September 25, 2010

Projektmanagement mit Open Source: GanttProject

In einem größeren Projekt ist es wichtig den Überblick zu bewahren. Dafür ist die grafische Darstellung von Zeiträumen und Abhängigkeiten der einzelnen Teilaufgaben sinnvoll.

Als kommerzielles Tool sticht MS Project hervor. Im freien Bereich scheint Open Workbench am erfolgreichsten zu sein. Allerdings ist es nur für Windows. Deshalb will ich GanttProject auf meinem Mac evaluieren.

Die Startansicht auf das Projekt ist der dem Programm auch namensgebende Gantt-Chart. Benannt nach dem Unternehmensberater Henry L. Gantt wird in diesem Chart die zeitliche Ausdehnung der Tätigkeiten sichtbar.

Im zweiten Reiter lassen sich die Ressourcen mit ihrer zeitlichen Belegung ohne Abhängigkeit anzeigen. Im dritten Reiter findet sich eine "Program Evaluation and Review Technique"-Netzplan Grafik, die sehr gut zur Darstellung der Abhängigkeiten geeignet ist. Hier ein Screenshot:


Die Graphen lassen sich als HTML exportieren. Dort werden einfach Screenshots eingebunden. Auf der Oberfläche lässt sich zum Beispiel noch der Zeitraum verändern.

Die letzte Version kam Februar 2009, also vor eineinhalb Jahren heraus. Große Funktionserweiterungen sind hier offenbar nicht geplant.

Fazit: Einfaches Tool, das seinen Job tut.

Links
http://www.ganttproject.biz
http://de.wikipedia.org/wiki/Gantt-Diagramm
http://de.wikipedia.org/wiki/Program_Evaluation_and_Review_Technique
http://open-source-project-management-tools.blogspot.com

Andere Open Source Tools zum Projektmanagement
Planner aus GNOME Office
OpenProj
PHProjekt
Redmine
airTODO - Project Management Tool
Achievo
Activity Manager
BORG Calendar
dotProject
eHour
GanttProject
jxProject
Open Workbench
Projectory
Rapla
TaskJuggler
XPlaner