Inhaltsverzeichnis
Die folgende Doku beschreibt die Installation der Distribution openwrt auf einem Linksys-WRT54G.
der leichte Weg
Bevor du anfängst, solltest du unbedingt folgende Seite für einen groben Überblick lesen: http://openwrt.org/GettingStartedTips
Vorbereitung
Programme auf dem Host installieren
Unter debian genügt: apt-get install tftp telnet
Falls du das Image selbst bauen willst, dann brauchst du noch ein paar mehr Pakete, unter anderem:
gcc binutils patch bzip2 flex bison make gettext unzip zlib1g-dev libc6-dev
boot_wait aktivieren
Die einfache Methode, ein neues Image hochzuladen, ist per tftp während des Bootvorgangs.
Dafür musst du das boot_wait-Flag des Routers aktivieren. DAS IST SEHR WICHTIG!
(Infos: http://openwrt.org/OpenWrtDocs/Installing#head-76921c79e7c7ed3b03d3bc9a40b1a2c792c215b0)
Folgendes Kommando nutzt einen Bug des Linksys-APs aus, um das boot_wait-Flag zu setzen, während er noch die originales Firmware enthält:
for PING_IP in '%3Btrue' '%3Bcp%24%7BIFS%7D*%2F*%2Fnvram%24%7BIFS%7D%2Ftmp%2Fn' '%3B*%2Fn%24%7BIFS%7Dset%24%7BIFS%7Dboot_wait%3Don' '%3B*%2Fn%24%7BIFS%7Dcommit' '%3B%2Fsbin%2Freboot' #for PING_IP in '%3B%2F*%2Fcp%24%7BIFS%7D%2F*%2F*%2Fnv*%24%7BIFS%7D%2Ftmp%2Fn' '%3B%2F*%2Fn%24%7BIFS%7Dset%24%7BIFS%7Dboot_wait%3Don' '%3B%2F*%2Fn%24%7BIFS%7Dcommit' # '%3B%2Fsbin%2Freboot' do POST_DATA='submit_button=Ping&submit_type=start&action=Apply&change_action=gozila_cgi&ping_ip='"$PING_IP"'&ping_times=5' #echo "Aktion: $PING_IP" #echo -e "$POST_DATA\n---" | lynx -auth=admin:admin -post_data http://192.168.1.1/apply.cgi > /dev/null wget -q -O /dev/null --http-user=admin --http-passwd=admin --post-data="$POST_DATA" http://192.168.1.1/apply.cgi [ $? != 0 ] && { echo -e '\nFehler beim Aktivieren von boot_wait!' exit 1 } echo -n "." done
Vorher musst du dem WAN-Interface eine IP-Adresse geben.
Das Original-Skript zum setzen des boot_wait-Flags findest du unter: http://aachen.uni-dsl.de/download/wrt/Releases/rev90/buildroot-rev90/takeover
ROM-Image
Entweder installierst du ein fertiges Image - das geht schön schnell.
Oder du baust dir dein eigenes: dauert zwei Stunden länger und ist flexibler.
fertiges Image verwenden
Unter http://openwrt.org/downloads/experimental/bin/ liegen fertige Images.
Welches der beiden Dateisysteme (jffs2 oder squashfs) du wählst, ist eigentlich egal. Allerdings scheint es so, als würde das squashfs per Komprimierung platzsparender sein.
Das Hochladen des Images ist unter http://openwrt.org/GettingStartedTips sehr gut beschrieben.
selberbauen
Das ist ziemlich einfach geworden - also keine Angst
Das Quellen-Paket (tar.bz2) liegt unter http://openwrt.org/downloads/experimental/.
auspacken: tar xjf experimental.tar.bz2
konfigurieren: cd openwrt; make menuconfig
Die Voreinstellungen sind schon ziemlich sinnvoll. Falls du Veränderungen vornehmen willst, dann solltest du auf folgende Punkte achten:
- Kernelpakete lassen sich als Modul oder statisch einbinden
seltsamerweise kannst du auch Programm-Pakete als Modul anwählen (M anstelle von *) - diese Pakete werden jedoch NICHT installiert - wähle sie also immer nur per * aus
das ifupdown-Paket scheint nicht korrekt zu funktionieren (Stand: Mai 02005) - danach war keine Netzverbindung möglich (du kannst jedoch weiterhin ein neues ROM per tftp hochladen)
wahrscheinlich brauchst du mknod (standardmäßig nicht angewählt) - z.B. für /dev/ppp
pivot_root muss drinbleiben (diese Erkenntnis hat mich mehrere Stunden gekostet)
Zum Erstellen der Pakete tippe einfach make. Beim ersten Mal werden dabei die Quellen der gewählten Pakete aus dem Netz geholt.
Die fertigen Pakete liegen anschließend unter bin/.
Das Skript zum Hochladen ist scripts/flash.sh:
cd bin; ../scripts/flashs.sh openwrt-wrt54g-squashfs.bin linksys ; cd ..
Hinweise:
dein Netzwerk-Interface sollte eine IP im Bereich 192.168.1.x (mit x ungleich 1) haben
- kurz bevor du das Skript ausführst, musst du den Linksys neustarten
du musst dich im Verzeichnis mit dem Image befinden, weil die Dateiangabe für tftp keinen Pfad beinhalten darf
eventuell musst du vorher das flash-Skript als ausführbar setzen: chmod +x scripts/flash.sh
Die genaue Anleitung für den Upload findest du unter: http://openwrt.org/GettingStartedTips.
Spezial-Zeug
Platzprobleme
Falls du zuviel Pakete im openwrt-Menü ausgewählt hast, dann kannst du mit dem AP kaum noch etwas machen (z.b: scheitert das Setzen eines neuen Passworts). Alos: aufräumen!
Unter bin/packages/ findest du nach dem Erstellen eines Images alle installierten Pakete. Anhand deren Größe kannst du dann die harten Entscheidungen der Verschlankung sicherlich objektiv treffen
PPTP
PPTP ist für manche DSL-Modems erforderlich.
Es ist als Teil des openwrt-Pakets im boot-ROM auswählbar.
Bei der Nutzung hatte ich folgende Probleme:
ein paar Module müssen geladen werden: ip_gre slhc ppp_generic ppp_async
das Verzeichnis /var/lock/ existiert nicht - es muss also bei jedem Systemstart erzeugt werden
das device /dev/ppp existierte nicht: mknod /dev/ppp c 108 0 (das BusyBox-Modul mknod muss installiert sein)
die Datei /etc/ppp/chap-secrets darf nur drei (anstelle der üblichen vier) Spalten enthalten
die pptp-Verbindung ist nicht besonders stabil - folgendes Skript könnte zur Überwachung (im Hintergrund starten) helfen:
look4pptp() { while true do if ifconfig ppp0 >&2 2>/dev/null then true else killall pptp 2>/dev/null pptp 10.0.0.138 fi sleep 30 done }
WLAN und LAN trennen
Wenn der Verkehr über das Kabel- und das Funknetz gesondert behandelt werden soll (firewall-technisch), dann kannst du die virtuelle Bridge, die automatisch eingerichtet wird, auflösen: brctl delif br0 eth1
mehr Handarbeit
Dieser Abschnitt ist etwas älter (Mitte 02004) - damals war noch etwas mehr Handarbeit erforderlich. Also es ist wahrscheinlich nur noch als Referenz für spezielle Probleme geeignet.
BEWARE: selbst nochmal die docs lesen, sonst ist das Teil schnell Schrott!
Ich habs selbst geschafft, als ich versucht hab, das Ganze auf ppc zu compilen -> siehe naechsten Ansatz.
auf dem host
apt-get install tftp telnet
- wenn mensch sich aufm nicht-x86-Rechner befindet, dann sollte sich ein anderer Rechner gesucht werden. Es sind zwei binaere tools dabei, die sind fuer x86, ich hab qemu benutzt, um sie trotzdem auszufuehren. Schien auch alles zu klappen, nach dem flashen sagte das Teil allerdings keinen Piep mehr. Muss allerdings nicht unbedingt daran gelegen haben, darum im folgenden trotzdem die Anleitung:
qemu (apt-get install qemu) und /qemu-gnemul (http://fabrice.bellard.free.fr/qemu/) installieren. Dann vor die folgenden Zeilen qemu-i386 setzen
$(WRT54G_DIR)/release/tools/trx -o openwrt-linux.trx \ $(WRT54G_DIR)/release/tools/addpattern -i openwrt-linux.trx \
- folgende Skripte ausm Netz ziehen und +x in den path legen:
- ipkg-buildpackage
- ipkg-build
- ipkg-make-index
compilieren
- docs:
- WRT anschliessen, Strom rein
auf http://openwrt.org/ gucken, ob die angebotene Version sehr (paar Tage) nah am aktuellen Datum ist.
- Wenn nicht: buildroot und root (das ist buildroot-openwrt) von folgenden URLs ziehen:
http://openwrt.org/cgi-bin/viewcvs.cgi/buildroot/buildroot.tar.gz
- entpacken und reingehen
http://openwrt.org/cgi-bin/viewcvs.cgi/root/root.tar.gz
- nach buildroot entpacken
- im Makefile die Versionen der files anpassen:
bei busybox kann snapshot rein
- fuer uclibc nach make.uclibc.mlkgehen, die URL suchen (die site-Variable), mit nem Browser besuchen und eine aktuelle Version anpassen.
- bei nicht-x86 im file make/openwrt.mk im vorletzten Absatz bei tools/trx und toos/addchanges jeweils qemu-i386 davorsetzen:
vorher: $(WRT54G_DIR)/release/tools/trx -o openwrt-linux.trx \
nachher: qemu-i386 $(WRT54G_DIR)/release/tools/trx -o openwrt-linux.trx \
- make eingeben und der Dinge harren, die da kommen
- make zieht noch mindestens 200MB! Die komplette mips toolchain und die wrt54g sourcen werden gezogen.
eigentlich musste Dich da nur noch durchkaempfen, wenn Du besonderen Wert darauf legst, fertige Binaries gibt es unter: http://openwrt.org/downloads/experimental/
installieren
- in der host box dhcpcd/dhclient eth0
- Internet port einstellen (Setup). wird nicht genutzt, nur einstellen.
- ping testen (administration/diagnostics)
wenn ping geht: ;ls>tmp/ping.log sollte ein directory listing bringen.
dann folgende 3 Zeilen bei ping eingeben:
;cp${IFS}*/*/nvram${IFS}/tmp/n ;*/n${IFS}set${IFS}boot_wait=on ;*/n${IFS}commit
dadurch wurde die Variable boot_wait gesetzt. Nun kann mensch tftpen, ohne das Teil zu killen. lieber nochmal nachgucken unter http://openwrt.org
alle Variablen anzeigen lassen geht mit ;*/n${IFS}show>tmp/ping.log
- jetzt hat das Teil beim Booten ne 3s-Zeitspanne fuer tftp, da kann es geflasht 192.168.1.1 werden:
- Stecker des routers ziehen
tftp mit 192.168.1.1 starten, alles bis inkl letzte Zeile, aber exkl. <enter> bei stromlosem Router
tftp 192.168.1.1 binary rexmt 1 verbose trace put openwrt-g-code.bin
- router anmachen, 0.5-2 s warten, dann enter drücken, ums binary abzusenden.
- das Teil hat kein Passwort, wenn also doch eins erwartet wird, dann warste beim flashen nicht schnell genug.
Administration
- es gibt ein romfs, das ist das Basissystem. Was $user sieht, das ist ein jffs, das aus symlinks aufs rom besteht. Wenn $user also was veraendern moechte, dann löscht er/sie den entsprechenden Symlink und kopiert das file aus /rom/quelle nach /ziel.
ipkg einrichten. Das ist meine ipkg.conf:
src openwrt http://openwrt.org/ipkg src _marc_ http://wrt54g.free.fr/openwrt/b4/ipkg/ dest root / dest ram /tmp
nachdem ssh installiert wurde, kann z.B. telnet gelöscht werden, indem das file /etc/init.d/!S50Services aus /rom kopiert und der symlink gelöscht wurde. Dann die Zeile mit telnet auskommentieren. Diese Beschreibung spar ich mir ab jetzt.
- iwconfig scheint irgendwie nicht zu funktionieren. Zeigt alles ok an, aber irgendwie isses komisch. Also: das ipkg-Paket wl installieren. beim _marc_ repository isses dabei.
mode managed mit wl: wl ap 1
mode master (also Access Point): zusätzlich noch wl infra 1
- mode ad-hoc: beides 0
essid: wl ssid <ssid>
um ein ad-hoc-Netzwerk einzurichten, muss erstmal die bridge br0 entfernt werden. dafuer hab ich ne ganze Weile gebraucht ;>
Kommando: brctl delif br0 eth1
ungetestet: um logging zu aktivieren, die folgenden beiden Zeilen nach /etc/inittab schreiben:
::respawn:/sbin/syslogd -n ::respawn:/sbin/klogd -n
nach /etc/init.d/rcS noch mkdir /var/log schreiben, weil /var sonst nach /tmp symlinkt.
remote loggen geht auch, siehe http://openwrt.org/MiniHowtos
ungetestet: wer ne schoene Statuswebsite a la http://rrust.com/sysinfo/rrdtool-graphs/openwrt-index.php haben will (und BTW waere das auch fuer andere Boxen nett), dem/der wird ebenfalls auf der Seite http://openwrt.org/MiniHowtos geholfen.
kismet
- auf dem wrt:
- kismet installieren, in der /etc/kismet... eth1 einstellen,
- kismet_drone starten, das tool sagt dann, wo es hoert
- aufm host:
- kismet_server -c drone,ipadresse:port,drone
- oder, ab v.2004.3: kismet_server -c kismet_drone,ipadresse:port,drone
- kismet_client
- fertisch.
config-Beispiele
- ad-hoc-Verbindung zwischen WRT und nem anderen Rechner (host genannt)
WRT:
brctl delif br0 eth1 ;# eth1 aus der bridge entfernen wl ap 0 wl infra 0 ;# jetzt im ad-hoc-mode wl ssid foo ifconfig eth1 192...
- host:
das Übliche:
iwconfig eth1 mode ad-hoc iwconfig eth1 essid foo ifconfig eth1 ...
- WRT ist client fuer ne ad-hoc-Verbindung zu nem anderen Rechner
- WRT:
- Rechner am WRT:
- anderer Rechner:
das Übliche:
iwconfig eth1 mode ad-hoc iwconfig eth1 essid foo ifconfig eth1 ...
allgemeine URLS
Links zum Thema Linux aufn Linksys: http://wire.less.dk/wiki/index.php/LinuxonLinksys
openwrtfaq: http://openwrt.org/OpenWrtFaq
NVRAM settings: http://openwrt.org/OpenWrtNVRAM
led codes: http://openwrt.org/wrtLEDCodes
- POWER flashes. DMZ alternates at about 20 seconds.
- Reason: You flashed a corrupt image. This might be because you did not set the binary flag on your tftp program, or have a bad image, or your upload was interrupted.
- Solution: Just reflash, and make sure your tftp program is configured right. Check your image.
- POWER flashes. DMZ alternates at about 20 seconds.
Mini Howtos (da kommt die logging info her): http://openwrt.org/MiniHowtos
misc
- auf den Buffalo WBR54G and the ASUS WL-500G solls auch laufen, wenn die billiger sind, dann koennen wir ja mal gucken.
Falls Du verkackt hast und der WRT tot ist, dann gibts tipps im Forum von openwrt. Falls alles nix hilft: Gehäuse öffnen (Schnappverschluss, aber Garantieverlust) und pin 15 und 16 (für WRT54G - nicht WRT54GS!) vom flash chip kurzschließen, dann die Kiste anmachen (das war nur die Kurzbeschreibung - hier gibt es mehr: http://voidmain.is-a-geek.net:81/redhat/wrt54g_revival.html). Das Ganze ist viel einfacher, als es klingt (bei mir hat es geklappt), aber wohl trotzdem ein wenig gefährlich