OpenMoko | Autoconfigure PC and Neo Freerunner

Thursday, 26. February 2009

Worum gehts:  Der Freerunner wird per USB am PC angesteckt und möchte ins lokale Netzwerk eingebunden werden, sowie die Internetverbindung des PCs nutzen.

Wie soll das gehen:  Entweder man öffnet jedesmal eine Shell und tippt 10 Zeilen cryptischen Code ein – oder man macht es nur einmal aber dafür richtig ^^

Zunächst muss man die Datei “interfaces” um folgenden Abschnitt erweitern:

sudo nano /etc/network/interfaces

auto usb0
 iface usb0 inet static
 up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/2 &
 up echo 1 > /proc/sys/net/ipv4/ip_forward &
 up iptables -P FORWARD ACCEPT &
 down iptables -D POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/2 &
 address 192.168.0.200
 netmask 255.255.255.248
 network 192.168.0.0
 up exec /etc/network/if-up.d/moko

Die letzte Zeile kann – muss man aber nicht unbedingt machen. Diese startet das Skript “moko“, welches das erscheinen des Interfaces usb0 mit dem Angebot eine SSH-Verbindung aufzubauen quittiert. (es ist an dieser Stelle natürlich möglich jedes beliebige Skript laufen zu lassen – zB. für Syncronisation)

Das Skript “moko” liegt wie in der Datei “interfaces” definiert im Verzeichnis /etc/network/if-up.d/ und hat folgenden Inhalt:

 #!/bin/bash                                    
foo()                                          
{                                              
echo "Configuration finished! "                
echo ""                                        
echo "Do you want to connect to your freerunner (N/y)"
echo "___________________"                            
echo "N |No"                                          
echo "y |connect through ssh"                         
read ANSWER                                           
        case "${ANSWER}" in                           
                        "y")                          
                        echo "trying to connect through ssh"
                        exec ssh root@192.168.0.202
                        ;;
                        *)
                        echo "done!"
                        sleep 3
                        ;;
                esac
}
export -f foo

exec su username -c "xterm -display :0.0 -e foo"

(“username” muss an dieser Stelle durch den Namen des angemeldeten Benutzers ausgetauscht werden und das Programm “xterm” sollte installiert sein (sudo apt-get install xterm) )

So sieht das Fenster aus, welches beim Anstecken des Freerunners erscheint:

neo1.jpeg

Zur einfacheren Übertragung von Daten bietet es sich darüberhinaus an Dolphin um einen Eintrag auf  sftp://root@192.168.0.202  zu erweitern (zeroconf bietet allerdings mit 2Klicks mehr unter “network” diese Möglichkeit ebenfalls an)

neo.jpeg

HowTo: Live CD am USB-Stick

Tuesday, 17. February 2009

UPDATE

Für viele Linux Distributionen gibt es einen einfacheren Weg, wie ich festgestellt habe. Alles, was dafür benötigt wird ist UNetbootin, das es für Windows und Linux gibt, sowie eine ISO-Datei der gewünschten Linux-Distribution und natürlich einen USB-Stick oder ein USB-Laufwerk mit genügend Speicher (alle Daten auf dem Laufwerk werden gelöscht, also Vorsicht!).

Somit erspart man sich die Verschwendung von CD/DVD-Rohlingen und kann trotzdem der Lust fröhnen, öfters eine andere Distribution zu testen, ganz einfach vom USB-Stick aus.


Um nicht jedesmal eine neue CD brennen zu müssen, wenn man sich ein neues Linux installieren möchte, kann man sich das Image bequem auf einen USB-Stick ablegen, sofern die Hardware, genauer das BIOS das Booten von einem USB-Gerät unterstützt. Der größte Vorteil dabei ist, dass die Geschwindigkeit enorm zunimmt, im Vergleich zu einer Installation von CD. Hat man eine neuere Version, so braucht man nur die Dateien vmlinuz, initrd.img und sidux.iso ersetzen.

Als Beispiel werde ich den Vorgang anhand der neuesten Sidux Version (2009-01 “Ουρανός“) vorzeigen, alternativ sollte es aber auch mit anderen Linux Distributionen funktionieren. Dafür ist erforderlich, dass man die Gerätedatei des verwendeten USB-Sticks kennt. Diese erhält man, in dem man beispielsweise nach dem Anstecken folgenden Befehl ausführt:

root@linux# tail -n10 /var/log/messages

Die Gerätedatei sollte inetwa wie “sdX” lauten. Ich werde daher sdx im weiteren Verlauf als Platzhalter verwenden.

Zunächst sollte der Stick formatiert und nach Wunsch partitioniert werden. Für unsere Zwecke reicht aber auch eine Standardformatierung mit FAT32 (aka vfat) und einer primären Partition vollkommen aus.

In den nächsten Schritten hängen wir den USB Stick ein, was je nach Wahl der Desktopumgebung per GUI/Dateimanager geschehen kann oder auch alternativ per Konsole mit Rootrechten und kopieren das Image auf den USB Stick in das Verzeichnis sidux, das wir dort erstellen:

root@linux# mkdir /media/usbstick
root@linux# mount /dev/sdX1 /media/usbstick
root@linux# mkdir /media/usbstick/sidux
root@linux# cp sidux-2009-01-ouranos-kde-lite-i386-200902151242.iso /media/usbstick/sidux/sidux.iso

Nun müssen wir uns darum kümmern, dass vom USB-Stick gebootet werden kann. Dazu brauchen wir zuerst die Dateien vmlinuz und initrd.img aus dem ISO-Image. Dies kann wieder wahlweise über den Dateimanager erfolgen oder per Konsole. Wir kopieren diese Dateien in den Ordner sidux und benennen sie um, damit wir uns später ein wenig Tipparbeit ersparen:

root@linux# mkdir /media/iso
root@linux# mount -o loop sidux-2009-01-ouranos-kde-lite-i386-200902151242.iso /media/iso
root@linux# cp /media/iso/boot/vmlinuz-2.6.28-5.slh.3-sidux-686 /media/usbstick/sidux/vmlinuz
root@linux# cp /media/iso/boot/initrd.img-2.6.28-5.slh.3-sidux-686 /media/usbstick/sidux/initrd.img

Außerdem braucht der Bootloader grub einige Dateien, für die wir direkt auf dem USB-Stick einen Ordner namens boot erstellen und  in den wir sie hinein kopieren:

root@linux# mkdir /media/usbstick/boot
root@linux# cp -r /media/iso/boot/grub /media/usbstick/boot/
root@linux# cp /media/iso/boot/message /media/usbstick/boot

Jetzt haben wir alle benötigten Dateien auf unserem USB-Stick. Was jetzt noch fehlt ist die Installation von grub. Auf dem USB-Stick ersetzen wir den Inhalt der Datei “/media/usbstick/boot/grub/menu.lst” zunächst mit folgendem Inhalt:

default 0
timeout 30
color red/black light-red/black
foreground EE0000
background 400000
gfxmenu /boot/message
title sidux Default (aufs)
kernel /sidux/vmlinuz boot=fll quiet vga=791 fromiso=/sidux/sidux.iso
initrd /sidux/initrd.img

Jetzt kann grub auf dem USB-Stick installiert werden:

root@linux# grub-install --root-directory=/media/usbstick /dev/sdX

Sollte es eine Fehlermeldung geben, die inetwa besagt, dass grub nicht installiert werden konnte, weil kein passendes BIOS am Gerät gefunden wurde, so hilft folgende Vorgehensweise. Wir editieren die Datei “/media/usbstick/boot/grub/device.map” und fügen dort folgende Zeile an:

(hd2) /dev/sdX

Jetzt sollte sich auch grub mit dem Befehl von oben installieren lassen und der USB-Stick sollte bereit zum booten sein. Je nach BIOS muss man dann noch die Einstellungen ändern, damit auf das Gerät zugegriffen werden kann.