blog · git · desktop · images · contact


ngircd auf der FritzBox – Update: minibot

2009-01-02

Der König ist tot, es lebe der König!

Nach dem doch etwas schmerzlichen Wegfall unseres IRC-Servers im Zuge der Root-Kündigung habe ich mir mal die "alte" FritzBox 7170 geschnappt, die noch im Regal stand - zum Glück völlig ungenutzt.

Was also lag näher, als ngircd auf die FritzBox zu packen? :geek: Lustigerweise ist das sogar ziemlich einfach, da die Fritze weit verbreitet sind und schon viele Leute eine wunderbare Arbeit geleistet haben.

Das Equipment hier:

Damit man überhaupt etwas machen kann, muss erstmal Telnet auf der Box aktiviert werden. Dazu auch das Telefon: Kurz #96*7* wählen und Telnet ist an. Mit #96*8* würde man's wieder aus kriegen, aber das ist ja erstmal nicht gewünscht. Man schaue sich kurz dort drinnen um. :D

Als nächstes braucht man eine Cross-Compile-Toolchain. Hier gibt es eine schnelle Anleitung, ob man aber das gesamte Paket dort braucht, weiß ich noch nicht. Schaden kann es aber wohl nicht. Man muss es auch nicht unter /usr installieren, das kann irgendwo hin, ohne den Rest des Systems zu berühren.

Wenn das drauf ist und das "Hallo Welt" schon erste Freude ausgelöst hat :), kann man sich an ngircd ranwagen. Ich habe es auf einen USB-Stick gestopft, sodass ich mir keine größeren Gedanken um seine Location o.ä. machen musste. Außerdem besitzt es die schöne Eigenschaft, dass es problemlos statisch mit seinen Bibliotheken gelinkt werden kann, sodass man vorerst nochmal ein paar Sorgen weniger hat. Release 13 habe ich hier am Laufen.

Zuerst sollte man wohl mal den MIPS-Compiler in den Pfad bringen, sonst geht nichts:

export PATH=/pfad/zu/dsmod/toolchain/target/bin:$PATH

Der Knackpunkt ist dann der Aufruf von configure:

LDFLAGS=-static ./configure --build=i386-linux-gnu \
    --target=mipsel-linux --host=mipsel-linux CFLAGS="-Os -pipe \
    -march=4kc -Wa,--trap" --without-syslog --prefix=/var/tmp/ngircd

Die wichtigen Optionen stehen auch nochmal hier.

Syslog-Support habe ich bewusst erstmal ausgeschaltet. Ob das ginge, weiß ich noch nicht. ;) --prefix=... stellt dann vorallem ein, wo das Programm seine Config erwartet - normalerweise sucht es unter /usr/local, was für die FritzBox etwas unvorteilhaft ist.

Nachdem configure durchgelaufen ist, haut man einfach wie gewohnt ein "make" rein und beobachtet das rege Treiben.

Es bietet sich jetzt an, auf dem Stick folgende Verzeichnisstruktur anzulegen und die beiden Dateien entsprechend zu platzieren:

ngircd/:
drwxrwxrwx    4 root     root        16384 Jan  1 03:31 .
drwxrwxrwx    3 root     root        16384 Jan  1 03:28 ..
drwxrwxrwx    2 root     root        16384 Jan  1 03:33 etc
drwxrwxrwx    2 root     root        16384 Jan  1 03:31 sbin

ngircd/etc:
drwxrwxrwx    2 root     root        16384 Jan  1 03:33 .
drwxrwxrwx    4 root     root        16384 Jan  1 03:31 ..
-rwxrwxrwx    1 root     root         9048 Jan  1 06:04 ngircd.conf

ngircd/sbin:
drwxrwxrwx    2 root     root        16384 Jan  1 03:31 .
drwxrwxrwx    4 root     root        16384 Jan  1 03:31 ..
-rwxrwxrwx    1 root     root       289651 Jan  1 04:37 ngircd

(Ist FAT32 auf meinem Stick, daher die wirren Rechte...)

Wichtig ist noch, dass man in der Config die UserID auf den User "ftpuser" der Box setzt, denn als Root mag ngircd zum Glück nicht starten.

Stick anstecken, warten bis er gemountet ist und dann kann zum Beispiel einen Link in /var/tmp auf der Box anlegen (jenachdem, wo sich der Stick befindet):

cd /var/tmp
ln -s /var/media/ftp/FlashDisk-Partition-0-1/ngircd ngircd

Das geht sicher noch eleganter, aber für den Moment reicht mir das.

Die große Überraschung ist dann, dass das tatsächlich läuft. :D Mal sehen, was noch so alles mit dem Dings geht. :)

Update

Bei so einem kleinen Server mit sehr wenigen Usern hat man manchmal das Problem, dass alle einen Channel verlassen und dann das Topic verloren geht. Daher hier ein kleiner Minimalbot, der nix weiter tut, als rumzusitzen. ;) Ob ich den weiter ausbaue, steht noch in den Sternen - im Moment ist er absolut minimal, alles ist hardcoded etc., aber er erfüllt seinen Zweck.

Comments?