Unterschiede zwischen den Revisionen 8 und 9
Revision 8 vom 2005-05-16 05:52:56
Größe: 14271
Autor: lars
Kommentar: pivot_root
Revision 9 vom 2012-06-13 21:26:27
Größe: 14273
Autor: anonym
Kommentar: converted to 1.6 markup
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 1: Zeile 1:
[[TableOfContents]] <<TableOfContents>>
Zeile 16: Zeile 16:
Unter [http://debian.org debian] genügt: `apt-get install tftp telnet` Unter [[http://debian.org|debian]] genügt: `apt-get install tftp telnet`


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/.

  1. auspacken: tar xjf experimental.tar.bz2

  2. 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

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

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 :)

WRT54GmitOpenWRT (zuletzt geändert am 2012-06-13 21:26:27 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.