Sprung in die Zukunft

Mein altes Nokia-Handy gab langsam seinen Geist auf. Damit der Akku noch nicht dauert raus fällt uns das Handy ausgeht musst ich den Akku mit einem Gummiband fixieren und ein paar Münzen für den richtigen Druck dazwischen geklemmt. Auch die Software hat seine Probleme. Ständige Neustarts, Telefonieren und SMS schicken ging auch nur in gefüllten 30% der Fälle. Das Handy wieder in Werkeinstellungen zurückversetzten half leider auch nicht mehr.

Das alles begann als ich in einem sehr starken Regen von der S-Bahn nach Hause gerannt bin, und die Hose dabei sehr nass wurde. Und das Handy ist nun auch schon 3 Jahre lang in meinem Besitzt. Es wurde nun langsam Zeit für ein neues Handy. Da ich seit langem ein Android Handy wollte hab ich nach vielen “befummeln” der Handy in diversen Läden und viele Internetseiten lesen für ein HTC Desire Z entschieden. Und bin die letzten Tage sehr glücklich damit. Für mich war es der Sprung von einem Handy mit MP3-Player zu einem Taschencomputer der zufällig auch Telefonieren kann.

Samsung SMT-G3210 (DSL-Router) als Webserver

Nach Langer Pause mal wieder ein Blogbeitrag von mir. Es geht um meinen Router über den ich hier schon ein paar Mal geschrieben habe. Was ich heute hier schreibe soll eine Anleitung sein wie man den SMT-3210 in einen Webserver konfiguiert. Zuerst wird das Adminpanel auf einen anderen Port gelegt, ein 2.ter Webserver liefer die Daten von einem USB-Stick aus und das ganze soll von Außen erreichbar sein.

Vorraussetzung :

  • Einen Samsung SMT-3210 (3200 und 3220 sollten auch gehn, aber ich konnte das nicht testen)
  • Eine modifizierte Firmware (google). Ich habe Version 3.02 getestet.
  • Einen Telnet-Client und später optimal SSH-Client
  • USB-Stick (kommt in den USB-Port auf dem Router)

Vorbemerkung:

Falls etwas schief geht lässt sich der Router über ein angeschlossenes Telefon resetten. Dazu wählt man am Telefon “#8312345”.

1. Schritt: Das Adminpanel

Ich will das Adminpanel das normalerweise auf dem Router läuft auch weiterhin benutzten, aber auf einem anderen Port. Dazu gehn wir zunächst per Telnet auf den Router. Wir connecten zu “samsung.router” auf dem Port 30023 mit den Logindaten “root” und “banana”.

Als erstes ändern wir das Passwort. Dazu “passwd” starten und das neue Passwort eingeben. Nun sichern wir das Passwort indem wir “cp /configs/etc/passwd /configs/etc/newpass” ausführen. Nun ist nach einem Reboot des Routers auch das neue Passwort erhalten. Als nächstes aktivieren wir den SSH Zugang. “/usr/sbin/dropbearkey -t rsa -f /configs/rsakey” ausführen und dann mit “reboot” den Router neustarten.

Nun können wir uns per SSH auf samsung.router mit dem neuen Passwort anmelden. Jetzt sichern wir die Config des Webservers bevor wir was verändern. Dazu führen wir “cp /configs/etc/thttpd.conf /configs/etc/thttp.conf.backup” aus. Nun öffnen wir die Datei “/configs/etc/thttpd.conf” (vi ist auf dem router, ansonsten per SSH downloaden und auf dem normalen Rechner editieren und wieder hochladen). Was uns interessiert ist die erste Zeile “port=80”. Die änderen wir ind “port=8080”. Nach dem nächsten Reboot läuft der Standartwebserver nun auf http://samsung.router:8080/.

2. Schritt: Der neue Webserver

Ich möchte alle Veränderungen auf einem USB Stick haben und von da Ausführen. Der interne Speicher ist sehr beschränkt und den sollten man nicht voll machen. Der USB-Stick wird in “/ramdisk/mnt/usb-storage” gemountet (in meinem Fall /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0). Ich habe meinen USB-Stick folgende Ordnerstruktur gegeben :

  • /bin/ für Shellscripts und Programme
  • /config/ für Configuarationsdateien
  • /www/ für die Daten des Webservers

Wir erstellen zunächst die Config. Dazu erstellen wir in /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/config/thttpd.conf mit dem Inhalt:

1
2
3
4
5
6
7
8
port=80
nochroot
user=root
dir=/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/www/
cgipat=cgi-bin/*.cgi
charset=iso-8859-1
nosymlink
max_upload=12582912

Danach machen wir “cp /usr/sbin/thttpd /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/bin/” und erstellen /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/bin/thttp_wrapper mit dem Inhalt:

1
2
3
4
5
6
7
8
#!/bin/sh
basedir=/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0
thttpd=$basedir/bin/thttpd
while true; do
    $thttpd -D -C /mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/config/thttpd.conf -i /var/run/thttpd_alt.pid > /dev/null
    sleep 1
    rm -f /var/run/thttpd_alt.pid
done

Dieses Script startet den Server und startet ihn auch neu falls er mal abstürzen sollte (was ich bisher nicht erlebt habe).

Nun erstellen wir die Datei /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/bin//www/index.php mit dem Inhalt:


<?php echo phpinfo(); ?> 

Nun könnten wir den Webserver starten mit der thttp_wrapper. Allerdings müssten wir das nach jedem Reboot manuel starten. Also müssen wir noch was tun.

3. Schritt: Den Webserver starten

Wir erstellen die Datei /configs/rc.local :

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
if [ -d /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0 ]
then
    echo "staring webserver on port 80"
    /ramdisk/mnt/usb-storage/UNTITLED_SanDisk-Cruzer-0/bin/thttpd_wrapper &   
else
    echo "usb-drive not found, retry in 10 seconds"
    sleep 10
    /configs/rc.local
fi

Das Sorgt dafür das unser Webserver gestartet wird sobald der USB-Drive im Router gemountet wurde. Nach einem Reboot sollte nun alles laufen. Also “reboot” eingeben und dannach auf “http://samsung.router” gehn. Die Seite erscheint. Nun sind wir erstmal fertig. Aber die Seite ist von außen nicht erreichbar, noch nicht.

4. Schritt: DynDns

Wir gehn in das Adminpanel auf http://samsung.router:8080/. Unter Firewall → Fernzugriff seten wir Modus auf “erlauben”. Nun kann man von außen auch auf den Server zugreiffen, sofern man die IP weiß. Um das zu vereinfachen benutzten wir Dynamisches DNS. Dazu auf dem Router zu “Internet→Dynamisches DNS” gehn. Hier kann man einige Anbieter aussuchen. Ich habe aber nur dyndns ausprobiert. Hier die Accountdaten eingeben. Nun ist euere Router von außen auch als Webserver erreichbar.

Was wir haben :

  • Einen Webserver mit PHP (leider ohne Datenbank) und leider in der Version 4.3 (scheiß class-system und xml ist auch nicht besser) der Zuhause steht, leise und stromsparen ist. Dazu unlimited Traffig (wenn auch nur mit geringem Upload). Webspace hängt vom USB-Stick ab (ich benutzte derzeit 4GB)
  • Leider ist das AdminPanel des Routers auch von außen erreichbar. Dazu schriebe ich noch was. Derzeit einfach ein gutes Passwort einstellen Wink

Syncing Nokia 6500 with Evolution

Ich hab neulich die Firmware auf meinem Handy aktuellisiert und wollte schauen ob ich jetzt vielleicht mein Nokia 6500 mit meinem Linuxrechner syncronisieren kann. Kurz gesagt ja Smile Mein Firmware ist 09.40 (lässt sich auf dem Handy durch Eingabe von “#0000#” anziegen. Wenn du eine frühere Version hast und es dennoch klappt dann hinterlasse ein Komment Wink

Howto :

Als erstes installiert man die Packete multisync-tools, opensync-plugin-evolution, opensyncutils und opensync-plugin-syncml (am Einfachsten in Ubuntu in einer Konsole mit "sudo apt-get install multisync-tools opensync-plugin-evolution opensyncutils opensync-plugin-syncml")

Ich verwende Bluetooth zum syncen, vielleicht geht es auch im USB-Modus (Config später ändern). Hab es aber selber noch nicht ausprobiert. Um die Bluetooth address herrauszufinden gibt man "hcitool scan" in der Konsole ein (Handy auf sichtbar stellen Wink ) Merkt euch die Addresse für später.

Nun richten wir OpenSync ein. Dazu erzeugen wir zunächst eine neue Gruppe, ich hab sie nokia genannt. In der Konsole geben wir dazu "msynctool --addgroup nokia" ein. Nun fügen wir noch die benötigten Plugins dazu: "msynctool --addmember nokia syncml-obex-client" und "msynctool --admember nokia evo2-sync" Nun kommen wir zum Spannenden Teil : das Konfigurieren Smile Dazu geben wir "msynctool --configure nokia 1" ein. Im Normalfall öffnet sich dann die Configdatei (in XML) im Editor Nano. Hier ist meine Config, einfach nur die Bluetoothaddresse ändern:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0"?>
<config>
  <bluetooth_address>00:1D:E9:5C:3F:02</bluetooth_address>
  <bluetooth_channel>11</bluetooth_channel>
  <interface>0</interface>
  <identifier>PC Suite</identifier>
  <version>1</version>
  <wbxml>1</wbxml>
  <username></username>
  <password></password>
  <type>2</type>
  <usestringtable>1</usestringtable>
  <onlyreplace>0</onlyreplace>
  <onlyLocaltime>0</onlyLocaltime>
  <recvLimit>10000</recvLimit>
  <maxObjSize>0</maxObjSize>
  <contact_db>Contacts</contact_db>
  <calendar_db>Calendar</calendar_db>
  <note_db></note_db>
</config>

Nun mit STRG-O speichern und STRG-X zum beenden drücken. Mit "msynctool --configure nokia 2" könnten wir noch die Evolution Einstellungen ändern. Hier müssen wir nur einen Einträg löschen :

1
2
3
4
5
<config>
<address_path>default</address_path>
<calendar_path>default</calendar_path>
<tasks_path/>
</config> 

So, jetzt haben wir die Einstellungen geschafft. mit "msynctool --sync nokia" starten wie die Syncronisation und hoffen das alles durchgeht. Wenn es mal nicht geht hilft meist Bluetooth auf dem Handy aus und wieder an zumachen. Auch sollte man in Evolution nur einen Kalendar verwenden. Hoffe es klappt bei euch.

Damn You Busybox!

Hier höre gernen die Nightline auf dem Radio Sender YouFm mit meinem Lieblingsmoderator Holger Klein (Di-Do, 23 Uhr bis 1 Uhr). Da ich nicht immer zuhause bin hab ich mir ein kleines Skript geschrieben das die Sendung für mich aufzeichnet. Nun störte es mich das ich meinen PC immer lauflassen muss dafür. Also dachte ich mir gestern Nacht ich könnte das ja meinen Router machen lassen (Samsung SMTG-3210). Läuft ja eh ein Linux drauf auf dem ich mich einloggen kann. Also schnell einen alten USB Stick an den USB Port des Routers angeschlossen und das Skript ein kleines bisschen modifieziert. Am Ende sah es so aus :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/ash
cd /mnt/usb-storage/UNTITLED_USBest-USB-0
mkdir youfm_nightline
cd youfm_nightline
tag=`date '+%y-%m-%d'`
mkdir ./$tag
cd $tag
LOOP=0
while [ $LOOP -lt 100 ]; do
   uhrzeit=`date '+%H_%M'`
   echo "start recording YouFm @ $tag - $uhrzeit" >> /configs/mylog
   wget -O $uhrzeit.youfm.mp3 http://gffstream.ic.llnwd.net/stream/gffstream_mp3_w72b
   LOOP=`expr $LOOP + 1`
done

Das lief alles soweit. Den Loop hab ich drin falls es mal abbricht, also nur zur Sicherheit. Nun wollte ich das ich das Skript per Crontab starten lassen. Allerdings wird die Crontab bei jedem Neustart auf dem ReadOnly bereich der Firmware gelanden. Also musste ich noch in die /configs/rc.local (wird beim booten ausgeführt) die Änderungen laden lassen. Das lief auch.

Nun komm ich zu BusyBox. BusyBos ist eine kleine Implementation von den Linux Standardtools (ls, mkdir, wget, find, grep, cd, kill, killall, vi, …Wink. Die sind dadurch so klein da die Programme viele Aufrufe wie Datei anlegen, Datei öffnen, usw. auf gleiche weise benötigen und sie so einmal für alle bereitgestellt werden. In der Theorie ist das schön, nur verhalten sich die Programm teilweise sehr unterschiedlich. Das hab ich bemerkt wenn ich das Skript abbrechen lassen will. “killall recYouFm.sh” ging noch (damit schieße ich mein Skript ab. Allerding bringt er bei “killall wget” das er keinen Prozess findet Sad Das heißt die Aufnahme läuft weiter.

Mein erster Workaround war nun einfach ein Reboot um 5.00 Uhr auzuführen (da sollte ich eigendlich im Bett sein). Das Funktionierte auch, allerdings ein bisschen Unschön. Die Inetverbindung mit “killall pppd && /usr/sbin/pppd call pppoe1” neuaufzubauen geht leider zu schnell das sich wget daran stört. Auch gibt es kein awk mitdem ich die ausgabe von “ps au” filtern könnte um die Prozess-ID von wget zu finden. Hat da jemand ne bessere Lösung im Kopf?

Conky

Ich wurde heute gefragt was das da auf meinem Desktop ist, und die Antwort war conky Smile

Bekommen kann man conky unter ubuntu von den normalen packetquellen, bei anderen Distros weiß ich das grad nicht. Da Conky allein noch nicht viel kann hab ich hier meine .conkyrc und das Skript was es für die externe Ip braucht (in den ornere ~/.conky/ reinmachen). Gepackt sind die Skripte hier (1,3kb yeah).

Gwibber

ich hab mich mal auf die suche nach einem guten Twitter-client für linux gemacht. Ich fande es blöd immer auf die webseite zu gehn und Twitterfox für Firefox war auch nicht nach meinem Geschmack. Nach etwas googlearbeit hatte ich Gwibber gefunden (:https://launchpad.net/gwibber/) und bin sehr zufrieden damit. Es versteckt sich in der Trayliste, gibt bei neuen Twitter meist innerhalb von 30 sec ein kleine Notification und wenn es offen ist sieht es auch schön aus Smile Also einfach mal ausprobieren Smile