Archiv

Archiv für die Kategorie ‘Nerd’

OpenLDAP Replikation mit syncprov

9. März 2010 melle Keine Kommentare

Für einen neuen Server in unserer Rootserver-Kommune brauche ich eine Replik unseres LDAP-Servers. Wie sich herausstellte, ist das ziemlich einfach und in der umfangreichen Dokumentation exzellent erklärt.

Im zu replizierenden LDAP-Server (“Provider”) muss man lediglich dafür sorgen, dass das syncprov-Modul in der slapd.conf geladen wird:

modulepath      /usr/lib/ldap
moduleload      back_hdb
moduleload      syncprov

Im Zielserver (“Consumer”), wird so eine 1:1 Replikation des Quellservers konfiguriert:

# replication settings
syncrepl rid=001
    provider=ldaps://ldaps.yourdomain.de:636
    type=refreshAndPersist
    searchbase="dc=yourdomain,dc=de"
    schemachecking=on
    type=refreshAndPersist
    retry="60 +"
    bindmethod=simple
    binddn="cn=replicator,dc=yourdomain,dc=de"
    credentials=assword

Natürlich müssen im Quellserver entsprechende Credentials hinterlegt werden. Durch das Keyword refreshAndPersist bleibt die Verbindung dauerhaft bestehen und Änderungen im Quellserver werden sofort auf dem Zielserver repliziert.

Achtung: im Zielserver müssen natürlich die gleichen Schemata geladen sein, wie im Quellserver. Schaut euch also die Include-Section entsprechend an, sonst hagelt es Fehler.

Mit dieser Methode kann man den LDAP-Server super-komfortabel umziehen, einfach Replikation einschalten, DNS-umschwenken und dann die Replikation auf dem Zielserver ausschalten.

DynDNS mit dem Alice Modem 1121 WLAN

25. Februar 2010 melle 7 Kommentare

Das Alice Modem 1121 WLAN bzw. TV hat eine recht spartanische Administrationsoberfläche. Man kann wirklich nur das Nötigste einstellen, eine Möglichkeite den beliebten DynDNS-Dienst zu konfigurieren, sucht man vergeblich.

Die Modemsoftware bringt jedoch einen DynDNS-Client mit, allerdings ist der nur via Telnet zu konfigurieren. Das Modem ist vom LAN und WLAN aus unter seiner Standard-IP 192.168.1.1 erreichbar.

Die Zugangsdaten lauten:

  • User: admin
  • Passwort: AliceXXXXXX123

Die Zeichenfolge XXXXXX muss durch die letzten sechs Zeichen der LAN MAC-Adresse des Modems ersetzt werden. Lautet die MAC-Adresse des Modems z.B. 00:25:5E:AB:64:FE, so muss man als Passwort AliceAB64FE123 verwenden:

$ telnet 192.168.1.1
 
Entering character mode
Escape character is '^]'.
 
Alice Modem WLAN 1121
Login: admin
Password: AliceAB64FE123
 
>

Man findet sich auf einer kastrierten Linux(?)-Shell wieder. help liefert eine Liste der möglichen Kommandos. Mit ddns kann man den DynDNS-Client konfigurieren:

> ddns
ddns add hostname --username username --password password --interface interface --service tzo|dyndns
     remove hostname
     show
ddns --help>

Ok, mit add fügt man eine DynDNS-Konfiguration hinzu, mit remove wird sie wieder entfernt und mit show kann man alle anzeigen lassen.

Der folende Aufruf fügt eine Konfiguration für den Hostnamen myhomedsl.dyndns.org beim Dienst dyndns mit dem Usenamen user6 und dem Passwort 123456 hinzu:

dns add myhomedsl.dyndns.org --username user6 --password 123456 --interface ppp_0_1_32_1  --service dyndns

Wichtig: man muss im parameter --interface den Namen des WLAN-Interfaces eingeben. Den Namen bekommt man mit dem Kommando ifconfig heraus. Es listet alle Interfaces auf, gesucht ist das mit ppp im Namen:

ppp_0_1_32_1    Link encap:Point-Point Protocol  
                inet addr:85.178.209.191  P-t-P:213.191.89.4  Mask:255.255.255.255
                UP POINTOPOINT RUNNING NOARP ALLMULTI MULTICAST  MTU:1492  Metric:1
                RX packets:9540 errors:0 dropped:0 overruns:0 frame:0
                TX packets:7456 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:3 
                RX bytes:6444034 (6.1 MiB)  TX bytes:1135835 (1.0 MiB)

In meinem Beispiel lautet der Name des Interfaces also ppp_0_1_32_1.

26C3: Tag vier

1. Januar 2010 melle Keine Kommentare

Leider leider ist der AS/400 Talk von Sebastian ausgefallen. Ich hatte ihn schon am Vorabend zu dem Thema ausführlich befragt, aber es wäre natürlich interessant gewesen, die Live-Demos zu sehen.

Statt dessen habe ich mich dann in Saal 1 zur Wikipedia-Diskussion gesetzt. Fefe hatte es sich auf der Couch bequem gemacht, lest Euch mal den Artikel in seinem Blog durch, er hat die Diskussion ganz gut zusammengefasst.

Fefe

Blackbox JTAG Reverse Engineering war auch nicht wirklich erhellend, aber vielleicht war auch meine Aufmerksamkeit am vierten Tag arg verschlissen. Ich habe mich dann noch mit ein paar älteren Herren aus dem Internet zum Aisiambiss in den Bahnhof gesetzt.

Photography and the Art of Doing it Wrong war ein interessanter Rückblick auf die Geschichte der Fotografie, außerdem gab es ein paar gute Inspirationen bewusst “falsch” zu fotografieren und die “Fehler” als künstlerischen Effekt einzusetzen. Ein erfrischender Kontrast zur üblichen “Eye Candy Fotografie”.

Falls Ihr den Kongress verpasst habt, schaut Euch die Aufzeichnungen an, Anne hat ein paar gute Empfehlungen zusammengetragen

KategorienChaos-Congress Tags:

26C3: Tag drei

1. Januar 2010 melle Keine Kommentare

Der Jahresrückblick hat mich mal wieder darin bestärkt, dass der CCC-Mitgliedsbeitrag goldrichtig angelegt ist. Schaut Euch einfach mal die Aufzeichnung an.

Danach gab es ein Update zur DECT-Sicherheit. Die Jungs sind schon sehr weit gekommen. Der Grund, warum man den großen Knall nicht gehört hat, ist vielleicht, weil er vom noch viel größeren Knall des Platzens der GSM-Sicherheitsblase übertönt wurde. Interessantes Detail: die Zusammenarbeit mit dem DECT-Forum scheint viel angenehmer und besser zu laufen, als die Zusammenarbeit mit dem GSM-Forum, die derzeit noch nicht einmal zugeben, dass es ein Problem gibt (“das was die machen ist ja Illegal, und deswegen existiert das Problem nicht”).

Dann habe ich mir “DDoS/botnet mitigation and hosting online communities” angeschaut, das war nett, aber insgesamt kein großer Erkenntnisgewinn.

Der GSM-Talk von Harald Welte hiess “Using OpenBSC for fuzzing of GSM handsets”, es war aber eher ein generelles Update zu OpenBSC. Trotzdem interessant, auf welch wackeligen Füßen das ganze System steckt, es gibt nur eine Hand voll (4!) GSM-Stacks und die sind auf 4 Milliarden Geräten deployed. Wenn also ein Stack ein Problem hat, kann man das auf sehr vielen Geräten nachvollziehen.

Was mir im Zusammenhang mit GSM total neu war – und gleich auf drei Vorträgen ausführlich erwähnt wurde – ist, dass im Zuge der 911-Notrufrichtlinie in den USA die Geräte ihren Standort bestimmen können müssen. Wenn ein GPS-Chip eingebaut ist, dann kann man das relativ einfach machen. Wenn kein GPS-Chip eingebaut ist, geht das aber trotzdem. Das Telefon verstellt einfach die Empfangsfrequenz auf die GPS-Frequenz und empfängt die blanken GPS-Signale, die es zur Auswertung an den Provider schickt (GSM funkt i.dR. auf 0.9, 1.8 und 1.9 GHz, GPS liegt mit 1.2 und 1.5 GHz genau dazwischen). Zusammen mit den bekannten Standortdaten der Basisstationen und der derzeit schon vorhandenen GSM-Peilungsmöglichkeiten kommt dabei eine ausreichend genaue Standortinformation heraus.

Da keine Geräte exklusiv für den US-Markt gebaut werden, ist also davon auszugehen, dass alle Geräte, die seit 2006 in den USA verkauft werden, diese Funktion mitbringen. Die Abfrage findet auf sehr sehr tiefen Schichten des GSM-Protokolls statt und kann von der Anwendungssoftware oder dem Betriebssystem des Telefons nicht verhindert oder bemerkt werden.

Bei “Location tracking does scale up” hat Aaron die Funktionsweise von Skyhook erklärt. Das Grundprinzip ist ja recht einleuchtend. Die Standortdaten und Empfangsfeldstärken von WLAN Beacons werden einmal erfasst und in einer Datenbank hinterlegt. Nun kann man anhand dieser Datenbank seinen Standort auch in Gebäuden bestimmen. Das Problem ist, dass die Datenbank mit der Zeit veraltet, weil WLAN AccessPoints sterben und neue hinzu kommen. Die Update-Funktion steckt aber in der Skyhook-Api selbst. Bei Standortabfragen werden alle sichtbaren ESSIDs mitgesendet, ebenfalls die GPS-Position (falls bekannt) und die Basisstation-Id, an der das Telefon angemeldet ist. Zwar funktioniert die API-Abfrage anonymisiert, aber eine Korrelation mit anderen Datensätzen ist natürlich trotzdem möglich.

Der Fnord-Jahresrückblick war ebenfalls wieder Pflicht, statt mir danach gleich den Kaminsky zu geben, habe ich mich zu Andy und “Die Ereignisse des 12.9. und ihre Folgen” angeschaut. Schaut Euch mal die Aufzeichnung an, den Erkenntnisgewinn kann man garantiert auf jeder Demo verwerten.

KategorienChaos-Congress Tags:

26C3: Tag zwei, was noch so war

29. Dezember 2009 melle Keine Kommentare

One Laptop per Child: war ganz interessant, den größten Erfolg hat das Projekt derzeit scheinbar in Uruguay. Dort sind fast 400.000 Geräte ausgeliefert, jedes Kind von der 1. bis zur 6. Klasse hat eins. Es gibt Unterstützung von der Post, wenn ein Gerät kaputt ist kann man es kostenlos in jeder Postfiliale abgeben und die schicken es zur Reparatur.

Die alle Zuhörer unter den Nägeln brennende Frage – wo man als reicher Europäer einen OLPC XO kaufen kann, wurde leider nicht befriedigend beantwortet. Das sehr gute “get one, give one”-Programm, bei dem man ein Gerät kaufen und eins spenden konnte, gibt es leider nicht mehr. Man kann sich zwar als Entwickler mit einem Projekt bewerben, aber wenn man “nur”
Geräte für seine eigenen Kinder haben möchte, sieht es im Moment schlecht aus.

Ich verstehe nicht ganz, was das Problem wäre oder warum das “get one, give one” Programm eingestell wurde. Für Faire 280 Euro würde man ein Gerät bekommen und gleichzeitig noch eins spenden. In unseren Breiten wäre das total akzeptabel. Statt dessen bekommen Schüler hier eher Netbooks von Ihren Eltern geschenkt (“ist ja nicht so teuer und bringt auch sicherlich etwas für die Schule…”) und versuchen die wie normale Notebooks zu verwenden. Klar kann man sich auch die OLPC Software auf einen USB-Stick kopieren und auf einem Netbok verwenden, aber viel von dem OLPC Konzept geht dabei verloren.

Danach habe ich mir das Mondprojekt angeschaut, aber darüber habe ich ja schon geschrieben. Heise hat auch darüber berichtet.

“Privacy & Stylometry” war mir zu trocken und so habe ich mich lieber noch ein wenig in der Phenoelit Drogenhölle rumgetrieben.

Vier Fäuste für ein Halleluja war dann natürlich Pflicht. Da ich beruflich viel Unixcode sehe und gelegentlich auch schreibe, kam mir das alles natürlich sehr bekannt vor. Ich werde das Video vom Vortrag mal mit in die Firma nehmen und den Kollegen zeigen, die haben bestimmt auch ihren Spaß daran :-)

Dann habe ich mich statt eines weiteren Vortrags in den Podcast Developer Workshop von Tim Pritlove gesetzt. Sein Problem ist, dass es im Moment keine vernünftige Software gibt, die einen Podcast Workflow vernünftig abbilden kann und man verdammt viele Schritte manuell durchführen muss, die man alle wunderbar automatisieren könnte.

Er hat also ziemlich genau seine Ideen beschrieben, was eine Software alles können muss und welche Funktionen sie bereitstellen soll. Das geht da von Terminkoordination der Teilnehmer und Erzeugung korrekter Feeds über die Integration des Chatprotokolls in die Timeline bishin zu Distributionswegen über Webplayer und BitTorrent. Das ist also ein bunter Strauß an Wünschen,
die man eigentlich unmöglich in einem Projekt erschlagen kann, außer man hat sehr viel Geld und fähige Leute.

Ergebnis war, dass es erstmal eine google Group von Podcastern gibt, die sich des Themas annimmt und versucht konkrete Teilschritte umzusetzen, die man immer weiter zu einem Stück Software zusammensetzen kann. Mich hat das ganze Stark an Pentabarf erinnert, das auch aus der Congressorganisation heraus enstanden und vollkommen von Featurebedürfnissen des realen Congressorganisators getrieben ist.

KategorienChaos-Congress Tags:

26C3: Tag zwei soweit

28. Dezember 2009 melle Keine Kommentare

Ich habe heute statt mir Vorträge anzuhören, mich ein bisschen mehr mit Leuten aus dem Internet unterhalten. Die sind alle echt nett ;-)

Interessant war “A part time scientists’ perspective of getting to the moon“, allerdings wurde das Thema Mondflug auf schmalem Budget so dermaßen schlecht vorgetragen, dass ich nur unter Schmerzen bis zum Schluss ausgehalten habe. Klar, das Team ist im Wettbewerb mit anderen Teams, die Ebenfalls zum Mond kommen wollen, aber wenn man nur nebulös drum herumredet, ist das der Aufmerksamkeit im Publikum nicht gerade zuträglich.

KategorienChaos-Congress Tags:

263C: dns2dht

27. Dezember 2009 melle Keine Kommentare

Christian Bahls von Mogis hat einen ganz interessanten Ansatz vorgestellt, wie man DNS zensurfest gestalten kann: mittels einer distributed Hashtable. Die Anfragen laufen nicht mehr gegen einen potentiell zensierten DNS-Server, sondern gegen die DHT-Wolke. Voraussetzung ist natürlich, dass die DHT-Nodes letztendlich auf einen unzensierten DNS zugreifen können.

Der Vorteil des ganzen: das System ist dezentral und kann nicht zensiert werden. Nachteil: in die DHT zu schreiben ist einfach, Löschen ist jedoch unmöglich. DNS-Updates bekommt man also nicht so einfach dort rein. Aber: DNSSEC steht vor der Tür, signierte Domains könnten also schon Updates bereitstellen.

Christian hat diese Idee in ein paar Python-Scripte gegossen und hat auch schon eine kleine Wolke am Laufen, die bereits praktisch vom Iran aus genutzt wird. Ich bin gespannt auf den Release der Software.

26C3: Lightning Talks Tag 1

27. Dezember 2009 melle Keine Kommentare

Ein kleiner Auszug aus den Talks (wird noch ergänzt):

  • Sleephacking scheint auszufallen, die Vortragende ist nicht da :(
  • In der C-Base gibt es parallel zum Kongress das Multitouch Hackfest. Und einige der Talks, die auf dem Kongress abgelehnt wurden. Und eine Menge Parties :-)
  • Der CCC Düsseldorf hat eine Zensurinfrastruktur aufgebaut, man kann sie versuchen auf verschiedenen Leveln zu umgehen.
  • Voicebarf ist das Telefoninterface zum Fahrplan. Sehr cool :-)
  • Cache games ist ein Hacking Contest auf Basis von CPU Cache Timing Angriffen. Krass :)
  • wiki2beamer konvertiert Mediawiki-Syntax in Latexcode. Das ist ganz cool, wenn man mit beamer eine Präsentation bauen will, aber der Latexsyntax dafür eigentlich zu aufwändig ist, speziell für syntax highlighting. Natürlich hat man trotzdem den vollen Latex-Syntax, da wiki2beamer lediglich wie ein Preprozessor arbeitet.
  • Sehr interessant war John Maushammer: er hat eine Pong Armbanduhr gebaut (tiny tiny tiny stuff!!1!) und digitale Wegwerfkameras gehackt.

26C3: Ausverkauft :-(

27. Dezember 2009 melle Keine Kommentare

Tja, das ging dann doch schneller als erwartet. Noch vor dem offiziellen Start ist der Kongress ausverkauft, das Anstehen in der Schlange hat sich gestern dann doch gelohnt.

Insgesamt ist es schade, dass jetzt viele Menschen draußen bleiben müssen. Klar, 4200 Leute waren im letzten Jahr zu viel, aber vielleicht sollte man sich überlegen, ob das BCC als Veranstaltungsort noch geeignet ist. Oder ob man nicht generell Tickets im Vorverkauf anbietet, allerdings bedient man damit dann einen gewissen Schwarzmarktanteil.

Dragons Everywhere kann nicht ausgleichen, es dieses Jahr 700 Tickets weniger gibt.

KategorienChaos-Congress Tags:

Worauf ich mich beim 26C3 freue

25. Dezember 2009 melle Keine Kommentare

Der nächste Congress steht vor der Tür und der aktuelle Fahrplan ist schon recht vielversprechend. Ich habe mal ein paar Talks rausgesucht, die ich mir auf jeden Fall anschauen werde.

Tag 1, 13:00 Uhr: Lightning Talks. Es wird einen Talk von @p4ula zu Sleephacking geben, außerdem ist danach um 15.00 Uhr eine Q&A Session zum Thema geplant. Wer schon immer mit dem Schlafrhythmus seiner Umwelt nichts anfangen konnte, ist hier genau richtig.

Update: Oh, gerade noch via Twitter gesehen: Tim macht einen Podcasting Developer Workshop. Da muss ich hin, auch wenn mich im Moment mehr die Hardwareseite interessiert.

Bei GSM: SRSLY? müsst Ihr Euch einfach mal die Beschreibung durchlesen. Auf dem Camp wurde das A51-Projekt vorgestellt, die Leute rechnen schon eine Weile und ich denke dieses Jahr wird GSM – wie DECT im letzten Jahr – als vollständig gebrochen gelten. Dazu passend gibt es noch am Tag 3 das Update zu DECT.

Schon aufgrund des Entertainmentfaktors sollte man sich nicht entgehen lassen, wenn Fefe und Erdgeist über kaputte APIs und Protokolle ranten (Tag 2, 17:15 Saal 1). Gleich danach werden Konstanze Kurz und Frank Rieger über die Anhörung vorm Bundesverfassungsgericht berichten.

Der wunderbare Erich Möchel – der schon auf dem 2007er Camp zum “Tod an der ETSI-Schnittstelle” referierte – wird am Tag zwei zu zwei “ETSI-Vorratsdatenspeicherung 2009 und andere Sockenpuppen der GCHQ” sprechen. Unterhaltsam und erschreckend. Der Vortrag ist Pflicht :)

In Location tracking does scale up – How skyhook wireless tracks you continously spricht Freifunkerkollege L. Aaron Kaplan über den kleinen praktischen Dienst der Lokalisierung über die WLANs in der Umgebung realisiert. Eine Schnittstelle zu Skyhook steckt in jedem Mac und iPhone. Es kann nicht schaden sich darüber schlau zu machen, vielleicht wird man öfters getrackt als einem lieb ist.

Für mich ist der AS/400-Talk Pflicht, die Maschine ist ja von der Architektur ziemlich nahe an der S/390-Architektur. Interessant ist ebenfalls der Talk zum Mediahacking.

Alles in allem klingt der Fahrplan vielversprechend, ich hoffe, dass ich die vier Tage mit genug Mate durchstehe und noch ein bisschen Zeit finde darüber zu bloggen.

How to enable Server Name Indication (SNI) on Debian Lenny

9. November 2009 melle Keine Kommentare

Server Name Indication (SNI) on Debian Lenny is easy to implement. OpenSSL is already SNI-capable, only the Apache Webserver is a bit outdated. So lets backport Apache >= 2.2.12 to Lenny. Here is my little step-by-step howto:

Install a compiler an the debian dpkg-Development Environment:

$ sudo aptitude install dpkg-dev build-essential fakeroot

To build apache, you will nee libcap2-dev and autoconf too:

$ sudo aptitude install libcap2-dev autoconf

…and the build dependencies for apache2:

$ sudo apt-get build-dep apache2

Download the Apache 2.2.14 sources for the current testing release from http://packages.debian.org/source/squeeze/apache2:

$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14-1.dsc
$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14.orig.tar.gz
$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14-1.diff.gz

Extract the source packages:

$ dpkg-source -x apache2_2.2.14-1.dsc

Compile the package:

$ cd apache2-2.2.14/
$ dpkg-buildpackage -us -uc -rfakeroot

(-us and -uc supresses the digital signature, fakeroot allows to set the ownership of the archived files to root, even if you are not root currently)

Install the desired apache packets:

$ cd ../
$ dpkg -i apache2_2.2.14-1_i386.deb apache2.2-bin_2.2.14-1_i386.deb apache2.2-common_2.2.14-1_i386.deb apache2-mpm-prefork_2.2.14-1_i386.deb apache2-suexec_2.2.14-1_i386.deb apache2-utils_2.2.14-1_i386.deb

Finally, remove the packages you installed to build the apache2-packages.

Jetzt noch sicherer

9. November 2009 melle 3 Kommentare

20091109_https

Dieses Blog ist jetzt auch über https erreichbar und damit noch sicherer ;-) Der geneigte Leser mag bitte auf den Link klicken und ggf. in den Kommentaren Feedback hinterlassen, ob beim Aufruf der Seite ein Zertifikatsfehler angezeigt wird. Vermutlich trifft das User mit dem Internet Explorer unter Windows XP (*). Vielen Dank!

(*) Ja, SSL für Arme mit SNI, aber dafür mit “richtigem” Kostenloszertifikat von StartCOM.

Surfterminal mit Linux

1. November 2009 melle Keine Kommentare

Wenn man einen Rechner im öffentlichen Raum als Browserterminal bereitstellen will, gibt es hauptsächlich die Anforderung, dass die User keine privaten Daten hinterlassen und am System so wenig wie möglich verstellen.

Es gibt verschiedenste Lösungen für diesen Zweck, fertige Linux-Distributionen oder spezielle Internet-Café Software, die Windows-Rechner so abschottet, das man noch nicht mal einen Explorer aufbekommt.

Für die beiden vom Freifunk betriebenen Surfterminals habe ich eine extrem simple Lösung gewählt. Die Rechner verrichten seit etlichen Monaten ohne Probleme ihren Dienst, obwohl es in den Kneipen schon etwas rauher zugeht.

Zunächst wird auf den Rechner die Linux-Distribution der Wahl installiert. Ich verwende Ubuntu, aber darauf kommt es nicht an. Es werden zwei Benutzer eingerichtet: ein administrativer (“tresen”) und ein unpreviligierter (“gast”). Achtung, bei Ubuntu ist der erste, bei der Installation eingerichtete User ein previligierter User (mit sudo-Rechten). Also erst “tresen” und dann “gast” einrichten und hinterher nochmal die /etc/sudoers überprüfen.

Man loggt sich zunächst als “gast” ein und richtet den Browser so ein, wie man es gerne für die Gäste hätte: Adblocker, keine Cookies und Passwörter speichern, Startseite ect. Die Startseite für den Browser zeigt in unser Wiki, die Kneipengäste können dort dann eigene Links ablegen und so die Startseite etwas nach ihren Bedürfnissen anpassen. Der Webbrowser wird als Autostart-Applikation eingerichtet (System -> Preferences -> Sessions -> Startup Programs). Dann loggt man sich als “tresen” ein und richtet den Anmeldungsmanager so ein, dass “gast” beim Rechnerstart automatisch eingeloggt wird.

Jetzt kommt der interessante Teil: das Script pack_guest.sh verpackt das Home-Verzeichnis vom Gastuser in eine .tar-Datei:

#!/bin/sh
#
# Erstellt ein neues Template (gast_home.tar.gz) aus dem aktuellen gast
# Homeverzeichnis. Dieses Script sollte nur ausgeführt werden, wenn die
# Änderungem am gast-User dauerhaft gespeichert werden sollen.
#
# siehe http://wiki.freifunk-potsdam.de/index.php?title=Olga-Surfstation
if [ `whoami` != "root" ]; then
  echo "Du musst root sein, um das Script auszufuehren! Schau Dir bitte die"
  echo "Doku auf unserer Webseite an:"
  echo "http://wiki.freifunk-potsdam.de/index.php?title=Olga-Surfstation"
  exit 1
fi
 
#
DATE=`date +%Y%m%d_%H%M%S`
TARGET=/home/tresen/Surfstation/gast_home.tar.gz
 
# backup vom alten $HOME anlegen...
if [ -e $TARGET ]; then
  mv -v $TARGET  /home/tresen/Surfstation/gast_home_$DATE.tar.gz
fi
 
cd /
tar czf /home/tresen/Surfstation/gast_home.tar.gz /home/gast

Dieses Script ruft man einmalig auf und findet dann in /home/tresen/Surfstation die Datei gast_home.tar.gz. Dieses Template kann nun immer ausgepackt werden, wenn der Rechner startet. Das erledigt das Script unpack_guest.sh:

#!/bin/sh
#
# stellt den gast-user aus dem vorgefertigten Template (gast_home.tar.gz)
# wieder her. Das ist das Standard-Script, das bei jedem Booten ausgefuehrt
# wird. siehe
# http://wiki.freifunk-potsdam.de/index.php?title=Olga-Surfstation
#
if [ `whoami` != "root" ]; then
  echo "Du musst root sein, um das Script auszufuehren! Schau Dir bitte die"
  echo "Doku auf unserer Webseite an:"
  echo "http://wiki.freifunk-potsdam.de/index.php?title=Olga-Surfstation"
  exit 1
fi
 
rm -rf /home/gast
cd /
tar xzf  /home/tresen/Surfstation/gast_home.tar.gz
 
# falls das Passwort zurueck gesetzt wurde...
echo "gast:gast" | chpasswd

Jetzt muss man nur noch dafür sorgen, dass dieses Script bei jedem Bootvorgang ausgeführt wird. Eine Zeile in /etc/rc.local genügt:

/home/tresen/Surfstation/unpack_guest.sh

[Update] (12.11.09): Mir ist gerade aufgefallen, dass es mit Upstart zu einer Race-Condition kommt. Es ist einfach nicht definiert, wann das Script unpack_guest.sh ausgeführt wird und das führt zu sehr merkwürdigen Effekten.

Wenn man also eine Distribution mit Upstart verwendet (z.B. Ubuntu 9.10 “Karmic Koala” oder später), muss man den Aufruf des unpack_guest.sh Scriptes im Upstart-System vor den gdm legen. Entweder man definiert einen eigenen Dienst oder man fügt das Script als pre-start Script in /etc/init/gdm.conf ein:

pre-start script
    # unpack the guest account home directory
    /home/tresen/Surfstation/unpack_guest.sh
end script

[/Update]

Mir gefällt an diese Lösung, dass wir damit absolut keine Arbeit haben. Die einzigen Probleme sind Hardwareschäden, also wenn wiedermal Bier über die Tastatur gekippt wurde. Das System an sich läuft aber nahezu wartungsfrei. Man muss sich halt alle paar Monate (idealerweise remote) einloggen und die fälligen Updates einspielen.

Schnelle Übersetzung im Safari

31. Oktober 2009 melle Keine Kommentare

Ich lese viel englische Texte und bin dank “Finer Things in Mac” auf ein Feature gestoßen, das mir beim Lesen sehr weiterhilft: der Shortcut CTRL + CMD ⌘ + D.

Dictionary.appDamit kann man in jeder Cocoa-Applikation (z.B. Safari) das Wort unter dem Mauscursor im Mac OS X eingebauten Wörterbuch nachschlagen. Als Standard wird das New Oxford American Dictionary mitgeliefert, das nur von Englisch nach Englisch “übersetzt”. Zum Glück gibt es Abhilfe: das BeoLingus Dictionary-Plugin Deutsch/Englisch ermöglicht die Übersetzung von Englisch nach Deutsch und umgekehrt.

Nach der Installation des Plugins und dem Neustart der Dictionary-Anwendung muss jetzt nur das Deutsch/Englisch Wörterbuch als erstes Wörterbuch festgelegt werdem. Dieses wird bei CTRL + CMD ⌘ + D verwendet, die anderen Wörterbucher sind Fallback, wenn das Wort nicht gefunden wird. Die bevorzugte Reihenfolge der Wörterbücher kann man in den Einstellungen von Dictionary.ap festlegen. Einfach das “German-English” Wörterbuch vom Ende der Liste an den Anfang der Liste ziehen…

Dictionary Settings

…und schon muss man nie wieder die Anwendung wechseln, nur um ein Wort nachzuschlagen:

Dictionary

Besserer Maschinencode mit clang

9. Oktober 2009 melle Keine Kommentare

LLVM ist das nächste große Ding. Nach all den Jahren, wo man es hingenommen hat, dass der gcc so ist, wie er ist und man heimlich denkt, dass der Microsoft Visual C++ Compiler doch irgendwie besser war, taucht plötzlich LLVM mit clang im Gespann auf und schickt sich an die Welt zu erobern.

Wer von LLVM noch nie etwas gehört hat, dem kann ich einen ganz wunderbaren Podcast empfehlen. Kurz gesagt: die Low Level Virtual Machine ist eine Compiler Infrastruktur, ein Compiler-Baukasten. Es gibt verschiedene Frontends, die aus unterschiedlichen Eingabesprachen (z.B. C, Objective C, Fortran, in Ansätzen auch C++ ) einen Bytecode generieren. Dieser Bytecode wird optimiert und im letzten Schritt mittels eines Backends in nativen Maschinencode für eine konkrete Architektur übersetzt.

Diese Verarbeitung ist nicht etwa tief im Compiler verborgen, sondern kann ganz praktisch mittels Pipes zusammengebaut werden:

$ clang-cc file.c -emit-llvm -o - | llvm-as \
  | opt -std-compile-opts | llc > file.s

Neben dem Satz an Standard-Optimierungen kann man sich noch mehrere Dutzend Spezial-Optimierungen die heraussuchen, wenn man denkt, dass das eigene Programm die nötig hat. Optimierungen kosten natürlich Zeit und so ist man eher geneigt während der Entwicklung wenige Optimierungen zugunsten schneller Compilerzeiten zu wählen, während man im Release-Stadium mehr Optimierungen wählt um die Performance zu optimieren.

Natürlich möchte man nicht in all seine Makefiles jetzt auf solche Pipe-Orgien umstellen. Es gibt zum Glück ein “drop in replacement” für den gcc: clang. Man muss nur noch an einer Stelle im Makefile die gcc-Definition durch clang ersetzen – fertig. Alle Parameter werden verstanden, Compiler-Parameter übernommen – so unkompliziert, dass man nur noch staunen kann:

# CC=gcc
CC=clang
 
$(CC) -o binary source.c $(CFLAGS) $(IFLAGS)

Seit dem Podcast zu LLVM nagt in meinem Kopf die Idee, das ganze im aktuellen Projekt zu testen. In den beiden letzten Mobile Macs Sendungen war clang ebenfalls Thema, was dazu führte, dass heute das LLVM-Virus bei mir ausgebrochen ist ;-)

Ich habe also das aktuelle Projekt (365.000-Zeilen C-Code) genommen und genau eine Zeile im Makefile geändert. Und es lief ohne Probleme. Ok, ich habe noch einen Fehler in unserem Makefile gefunden, aber dafür kann ja clang nichts. Die absolut problemlose Umstellung hat mich schon überrascht.

Aber warum sollte man dem gcc untreu werden, was bringt einem clang konkret? Da wären zunächst aussagekräftige Warnungen. Ich liebe Warnungen und predige bei jeder Gelegenheit wie wichtig es ist, auf die Warnungen vom Compiler zu hören. Das ist immer der Moment, in dem die Kollegen plötzlich etwas wichtigeres zu tun haben … ;-) clang spuckt Warnungen aus, mit denen man wirklich etwas anfangen kann:

src/source.c:457:15: warning: pointer types point to integer types with different sign passing 'unsigned char *', expected 'char const *restrict' [-Wpointer-sign]
        fputs(pbuffer, stdout);
              ^~~~~~~

Dagegen die Meldung vom gcc:

src/source.c:457: warning: pointer targets in passing argument 1 of ‘fputs’ differ in signedness

Dann wäre noch das Thema Performance. Es gibt Aussagen wie “OpenSSL wird 10% schneller” (letzte MM-Sendung). Das macht schon neugierig und ich werde in der nächsten Woche auf jeden Fall ein paar Benchmarks durchführen um dem auf den Grund zu gehen. Jede Anwendung ist anders und bei unserem Projekt muss man erstmal sehen, was es wirklich bringt.

Wenn man aber “einfach so” mehr Performance erhält, ist das ein hoch interessantes Thema. Ein Kunde von uns lastet mit unserer Anwendung eine 8-Core Maschine voll aus. Aufgrund gesteigerter Datenmengen wird diese Maschine bald zu klein sein. Wenn wir ihm sagen können “behalte Deinen Hobel, wir haben noch ordentlich etwas rausgeholt” ist das für den Kunden natürlich ein Gewinn. Er kann die Hardware länger nutzen und spart Mirgrationskosten. Für uns ist das eher schlecht, weil wir am Lizenzupgrade nichts verdienen … aber ich bin Techniker und kein Verkäufer ;-)

KategorienNerd Tags:

Stacktrace gefällig?

7. September 2009 melle Keine Kommentare

Gelegentlich braucht man einen Stacktrace. Ich bin heute über ein Problem gestolpert, bei dessen Lösung mir ein Stacktrace sehr helfen würde.

20090907_dddlogoEine unserer Bibliotheken kümmert sich um Speichermanagement. Das sind kleine Wrapper um malloc / free, die Buchhaltung über den Speicher führen und bei Fehlern entsprechende Meldungen ausgeben. Also der übliche Weg für das Speichermanagementproblem in C, es gibt duzende Lösungen die ähnlich funktionieren.

Das Problem heute war, dass Speicher freigegeben werden sollte, der nie allokiert war oder schon einmal freigegeben wurde. Er war auf jeden Fall nicht mehr als belegt gekennzeichnet und konnte somit nicht freigegeben werden. Programme ohne solch ein Speichermanagement würden an dieser Stelle abstürzen, bei uns taucht nur eine Meldung im Log auf.

Diese Meldung war mein Startpunkt für die Suche. Die Aufrufe der free-Wrapperfunktion sind jedoch in vielen Sourcefiles auf tausenden Zeilen Code verstreut. Wie soll man dort den einen Aufruf finden, der die Ursache für die Meldung ist?

Genau: ein Stacktrace muss her. Der schmutzige Weg wäre, das Programm mutwillig zum Absturz zu bringen. Dann kann man sich aus dem core-File den Stack rauspopeln und weiss, woher der Aufruf kommt.

Es gibt jedoch etwas viel schöneres: backtrace() aus der glibc. Mit ein paar Zeilen Code kann man an jeder beliebigen Stelle des Programms einen Stacktrace erzeugen:

void *array[10];
size_t size;
char **strings;
size_t i;
 
size = backtrace (array, 10);
strings = backtrace_symbols (array, size);
 
printf ("Obtained %zd stack frames.\n", size);
 
for (i = 0; i < size; i++)
   printf ("%s\n", strings[i]);
 
free (strings);

Ich habe also in der free-Wrapperfunktion backtrace() eingebaut und konnte mir den Stacktrace für den Fehlerfall ausgeben. Im Log erhält man dann etwa diese Ausgabe:

yourbinary [0x80b9e0c]
yourbinary [0x80b9f02]
yourbinary [0x8054abd]
yourbinary [0x805124f]
yourbinary [0x8050078]
yourbinary [0x808d6f3]
yourbinary [0x804bd42]
yourbinary [0x804b04e]
libc.so.6(__libc_start_main+0xe5) [0xb7d0f775]
yourbinary [0x804a701]

Ok, das sieht schon mal gut aus ;-) Jetzt muss man nur noch yourbinary in den ddd laden um die Speicheradressen in Codezeilen umzuwandeln - et voilà: schon ist die bösartige Zeile Code identifiziert.

KategorienLinux, Nerd Tags:

har2009: Eindrücke

14. August 2009 melle Keine Kommentare

Videoschnipsel von anderen Besuchern:

KategorienGeneral, Hacking at Random Tags:

har2009: Tag 2 – guten Morgen ;-)

14. August 2009 melle Keine Kommentare

Hab viele stimmungsvolle Videoschnipsel aufgenommen, scheitere leider daran, die unter Linux zusammenzuschneiden. Ich will ein MacBook… ;)

KategorienHacking at Random Tags:

har2009: ein paar Bilder

13. August 2009 melle Keine Kommentare

har2009: my camping site just next to the lake

har2009: oh and there is a data-loo

har2009: keepin important stuff dry and safe :)

har2009: everything is at its place

har2009: impressions (no tripod...)

KategorienHacking at Random Tags:

har2009: angekommen

12. August 2009 melle 1 Kommentar

Ich probiere mal dieses Video-Dings aus. Dann muss ich auch nicht so viel tippen ;-) Bin gerade zu müde noch einen richtigen Podcast draus zu machen, das kommt später.

Update: hatte das Video versehentlich auf “private” gestellt, jetzt sollte es funktionieren.

Pages: 1 2 3 4 5 6 7 8 9 10 11 >>>