Firmwareentwicklung
Version vom 18. September 2006, 11:12 Uhr von Fries43 (Diskussion | Beiträge) (→Nightly Build: zum selberbasteln)
Aktueller Stand
- Es exisitieren zwei verschiedene Versionen. Eine ganz normale und eine abgespeckte "Schmalspur"-Variante für Geräte mit nur 2 Megabyte Flash-Speicher.
Stabile und empfehlenswerte Version
Nightly Build
- siehe Changelog
- normal: 18sep2006-17uhr03
- schmalspur: 18sep2006-17uhr03
- zum selbstbauen: skripte & ipkg's
Features, Funktionsübersicht
- ausser den Funktionen der originalen Freifunk-Firmware wurden in der Weimarnetz-Variante noch folgende Dinge hinzugefuegt:
- im Wiki veraenderbare Nervseite die jeder Benutzer mindestens einmal taeglich sieht und die abhaengig vom Betrachter (registrierter Laptop, Laptop oder Kabelrechner) anderes aussieht
- dezentrale Verteilung der MAC-Adressen von registrierten Laptop-Nutzern
- integrierte grafische Statistik (Datenverkehr etc.)
- (momentan deaktiviertes) Accounting (Datenverkehr pro IP)
- automatische Bestimmung der richtigen Antenne
- Passwortfreie-Infoseite
- Fon-Hack
Roadmap bzw. Blick in die Zunkunft
- Momentan basiert die Weimarnetz-Firmware auf der Freifunk-Firmware, die Sven-Ola Tücke aus Berlin entwickelt und die auf OpenWRT basiert.
- Benutzt wird aktuell die Version 1.3.5 dieser Software.
- repository & changelog
Einstellungen (Parameter der Weimarnetz-Firmware)
- Hier soll das IP-Schema und alle Einstellungen hin
Logbuch der Änderungen (changelog)
Version 18sep2006-17uhr03
- FERTIG , umstellen auf FFF-V1.3.6
- FERTIG , neues netcat-ipkg und anpassung registrator
- FERTIG , speichersparen: rrd wird bei wenig speicher deaktiviert
Version 17sep2006-19uhr51
- FERTIG , umstellen auf FFF-v1.3.5 (boah!)
- FERTIG , nervseite: wenn vorlage noch nicht geladen - machen!
- FERTIG , maclisten-verteilung: alle nachbarn pruefen - nicht nur einen
- FERTIG , grobes umstellen auf neues OLSR-plaintext-PlugIn
- FERTIG , accounting erstmal wieder rausgenommen
- FERTIG , syslog auf 2*256kb verkleinert
- FERTIG , URL der Nervseite aendern
- FERTIG , registrator: mehr logging
- FERTIG , BUG: registrator: blockiert manchmal, weil er _denkt_ er wird gerade benutzt
- FERTIG , KISS: infoseitengenerierung nicht ueber wget sondern direkt machen
- FERTIG , KISS: nervseiten-vorlage aus SVN heraustrennen
- FERTIG , KISS: nervseiten-vorlage _ungepackt_ ins firmware-image legen
- FERTIG , accounting integrieren
Version 8jul2006-11uhr36
- nightly_build - 1.748.992 Bytes
- FERTIG , ipk's, binarys und bilder aus dem SVN rausnehmen
- FERTIG , firewall: paket mit ziel=WAN-Netz und quelle NICHT eigenes LAN = verbieten
- FERTIG , registrator: netcat integrieren
Version 07juli2006-19uhr54
- Download - 1.732.608 Bytes
- FERTIG , nervseite+nervnerv joinen , nervseite holen = cgi-bin-nervseite?0
- FERTIG , sanitizer: <walledgarden/> = Liste der freien Seiten fixen
- FERTIG , heartbeat: fon-hack,speicherauslastung,traceroute inetgateway
- FERTIG , domains einheitlich auf ".olsr"
- FERTIG , maclistenverteilung: alle nachbarn probieren
- FERTIG , nervseite: button "ich will ins internet"
- FERTIG , registrator: mechanismus einbauen,damit nur ein nutzer gleichzeitig drauf zugreifen kann
- FERTIG , easyconfig: knotennummer aus nvram-variable und nicht aus domain bestimmen
- FERTIG , easyconfig: leerzeichen in kontaktdaten machten probleme
- FERTIG , cron: skript saeubern und unnoetige /tmp/-kopie loeschen
- FERTIG , statistik: integrieren
- FERTIG , ipk-pakete nach /ipk und dann das verzeichnis loeschen.
- FERTIG , BUG behoben: content-type wird immer doppelt ausgegeben,wenn man nervseite auf entfernten knoten abruft
- FERTIG , easyconfig: wan_dns bei DSL wieder auf 141.54.1.3
- FERTIG , easyconfig: sonderzeichen im hostnamen filtern
- FERTIG , kleineres oder gar kein startbild
Version 30juni2006-13uhr33
- Download - 1.531.904 Bytes
- FERTIG , neue weimarnetzeinstellungen ab 01.07.2006: FunkKanal-5, 02:ca:ca:00:ba:be
- nervseiten: template durch den sanitizer jagen
- FERTIG , syslog vergroessern, logrotate auch anzeigen
- FERTIG , funktuning auch ohne neustart
- FERTIG , infopage: beim generieren wget nach 5 min killen
- FERTIG , eigenes Startbild
- FERTIG , BUG: nervseite: wenn nach dem holen dateigroesse = 0,dann verwerfen
- FERTIG , sanitizer: adresse des geraets fuer nichtrelative links
- FERTIG , infopage: rts_real/cts_real
- FERTIG , walledgarden: iptables-fehlermeldungen unterdruecken
- FERTIG , infopage: "override funkparameter_tuning"
- FERTIG , infopage: force-11mbit
- FERTIG , registrator: k-modus
- FERTIG , infopage: alle adressen aus /proc/net/arp anzeigen
- FERTIG , nervseite: bei zu vielen verbindungen,uebersicht generieren
- FERTIG , nervseite: beim sperren anzeigen,wieviele verbindungen man offen hatte
- FERTIG , registrierung: massenmailmodus
- infopage: mehr logging,auch beim automatisch generieren
- FERTIG , FON-Hack integrieren,damit billige FON-Router ganz normal weiterfunktionieren 8-)
- http://www.twindx.com/node/106
- Fon-Hack
- wget -O /dev/null "http://download.fon.com/heartbeat.php?mac=$(nvram get il0macaddr|sed s/:/-/g)"
- FERTIG , BUG: warum leitet ausgefallener DSLer keinen DNS-inet-verkehr weiter? Auf Eselbremse darf kein DNS gestartet sein!?
- FERTIG , batman: mehr logging
- FERTIG , BUG: batman auf unbenutztem alias-interface starten, WIFI-DEV:2
- FERTIG , dnsmasq: seltener hosts einlesen lassen. - alle 30min - Hostnamen werden erst nach 2 Stunden inaktivitaet geloescht
- FERTIG , infopage: schnellmodus fuer alle netzknoten,die inet einspeisen
- FERTIG , infopage: jens-modus (alle routen + etx)
- FERTIG , infopage: jens2-modus (alle netzwerkverbindungen)
- FERTIG , infopage: firmware-version auslesen
- FERTIG , unixzeit+ 'weimarnetz' in den dateinamen/startseite integrieren
- FERTIG , wenn viel speicher da ist,syslog vergroessern
- FERTIG , CRON: kein cronskript mit exit verlassen!
- FERTIG , easyconfig: Serveripadressen +1 unschön
- FERTIG , Batman 0.06 integrieren
- FERTIG , infopage: Baraucke-Modus um holen der macliste zu erzwingen
- FERTIG , sanitizer: iframes ausfiltern
- FERTIG , Nervseite: mehr logging
- FERTIG , infopage: version/datum/zeit der macliste abfragbar
- FERTIG , infopage: tracert zu beliebiger IP beauftragen
- FERTIG , infopage: Speichertest nur bei Livedaten
- FERTIG, Datumsfeld in MACadressen-liste
- FERTIG , sanitizer "<script-tag" ueberpruefen
- FERTIG , too_many_Verbindungen: zwischencheck mit 3mins Pause
- FERTIG , MAC-Verteil-Mechanismus / Registrierung, siehe Fries43-ToDo
- FERTIG , Speichercheck an kritischen stellen
- FERTIG , neue nvram variablen fuer GPS
- FERTIG , neue nvram variablen fuer netzknotennummer
- FERTIG, WAN-DHCP aus,wenn kein inet zur verfuegung gestellt werden soll (speicher!)
- FERTIG , wenn man auf entfernten router geht (und nicht auf seinen eigenen) soll keine nervseite kommen,sondern fff-startseite
- FERTIG, sanitizer: tags auf nervseite,die script (javascript!) einschalten
- FERTIG , wenn olsr-knoten auf router geht,soll es behandelt werden wie olsr-router und nicht wie mobiler knoten
- FERTIG , registrierung integrieren
- FERTIG , besseres default-template anzeigen,wenn nervseite noch nicht geladen ist
- FERTIG , auf cron verzichten
- FERTIG , eigene weimarnetz-firmware bauen
- FERTIG , 10min laptops soll auf 15mins hochgesetzt werden
- FERTIG , Namensaufloesung im internen Netz: DNSmasq soll per sigHUP alle minute /etc/hosts neu einlesen
- FERTIG , laptops: probe_response_fix integrieren
- FERTIG , forschung: batman2 integrieren inkl. "notaus" per WIKI
- FERTIG , tcp-westwood integrieren
Wunschliste wichtig (ToDo, feature requests)
ToDo Bastian
- registrator: automatisches backup der registrierungsdaten per mail, nur wenn sich DB aendert.
- registratorclient: schutz vor auslesen aus dem internet,nur 127/104/10 im ersten Remote-IP-Oktett zulassen
- registrator+client verschmelzen
- nervseite kommt nicht alle 700minuten, sondern alle 5mb (oder so aehnlich)
- Bestrafung bei geringer Uptime
- regelmaessiges pingen aller nachbarn (auffrischen der arp-tabellen)
- sanitizer: knotenbetreiber-notiz & kontaktdaten & personalisierbarer teil (=ff_adm_note) in nervseite integrieren
- sanitizer: <inethost/> = hostname vom inet-HNA fuer nervseite
- nervseite: wo es geht, bilder benutzen
- speichersparendere und besser zu durchschauende nervseite
- nervseite: nach "ich will ins internet" umleitung auf startseite inet-gateway (172.16.1.80)
- infopage: Bandbreitentest integrieren
- infopage: wrapper fuer abruf beliebiger kontaktseiten von extern (??? - SPAMsicher!)
- infopage: Weg ins Internet
- infopage: Router-Action
- eigener Router immer unter "weimarnetz" erreichar
- macliste: notfallmodus/fallback auf neue liste, wenn es eine "ueberneue" liste im Netz gibt, vertrauensentzug fuer bestimmte unixzeit(en)
- 172er auf 104er umstellen
- telnetd nur ueber kabel erlauben?
- Messmodus einfuehren: Nachts (zwischen 3 und 5?) wird es moeglich sein, bestimmte einstellungen fuer das gesamte Netz zu testen.
- RTS/CTS ein/aus
- Sendeleistung regeln ein/aus
- Frameburst ein/aus
- Multicastrate oder WlanRate fest/auto
- Batman2 ein/aus
- etc.
ToDo Andere
- css von nervseite und freifunk-firmware sollte gleich sein
- also eigene .css-Datei entwerfen, die das ff.css ersetzt
- verschiedene nervseiten ausformulieren
- walled garden ausbauen
- fuer die freigeschaltete webseiten muessen die IPs rausgesucht werden
- einfach mit einem gesperrten/unregistrierten laptop an den eigenen netzknoten gehen und mit einem kabelrechner auf der nervseite nach und nach die IPs hinzufuegen und ueber cgi-bin-nervnerv den walled garden neu einlesen lassen und mit dem schleppi testen,ob man auf die seiten kommt.
- Achtung: viele Webseiten haben mehrere IPs
Wunschliste - niedrige Priorität
- dem Kunstturm eine Denkmalschutz-Plakette (emailliert) kaufen
- registrator: BUG: massenmail manchmal ohne Absender
- registrator: Vertrauensbaum zeichnen lassen
- registrator: massenmail wegen falschen GPS-koords
- easyconfig: lanifnames Problem lösen
- easyconfig: GPS - anonym Hinweis und bessere Check auf Plausibilität
- easyconfig: neustart sofort
- easyconfig: rechnernamen ankuendigen / Server in /etc/local.hosts integrieren / eingabefeld ueber javascript sichtbar
- easyconfig: jeder Router bekommt einen Standardnamen _neben_ dem persoenlichen Hostnamen
- easyconfig: PicoPeeringAgreement abnicken - ( gesehen, gelacht, F8 )
- easyconfig: modus um kindergarten in der shell auszufuehren
- easyconfig: andere staedte - funktionsfaehig machen
- easyconfig: warnung bei passwort "admin" -> nervseite
- nervseite: dezentraler verteilmechanismus aehnlich macliste
- nervseite: sauberes erkennen "aus welchem subnetz kommt remote-ip"
- nervseite: extra nerv, wenn noch kein wiki-eintrag zum benutzer/knoten existiert
- infopage: auf wunsch maschinenlesbarer output
- infopage: funktion einbauen,um einen infopage-befehl automatisch an alle Router zu senden
- infopage: schnell alle nachbarn anzeigen lassen
- infopage: netzkarte mit gps-infos malen
- infopage: umleitung der erzeugten infoseite zum httpd und /tmp/ und dann move per tee + unixtime_historie
- weimarnetz-version beim startup aus index.html in /www/version "retten"
- sanitizer: sms-versende-knopf
- sanitizer: bruellbox als extra <tag>
- sanitizer: <tag> wer/wieviel ist gerade im DC++ online
- firewall: besseres & allgemeineres Design der Firewall/iptables/Umleitungs-Regeln
- VPN: integrieren. server & client , client geht nur wenn man auch inet anbietet
- VPN: Freifunk-VPN-Config integrieren
- Ziel: nur noch vpn.ipk und vpn-zertifikate draufkopieren und fertig iss...
- OLSR-Timing ueber VPN extra langsam und kuenstlich schlechter ETX-Wert
- tc: trafficshaping auf wireless-ebene / level7-filter / DC++ niedrig / holm_weiss_wie
- sendeleistung: algorithmus fuer sendeleistung/mrate finden
- ueber entfernung zum nachbarn (GPS!) entscheiden, ob verbindung wichtig ist,oder nicht.
- gute,bandbreitige (goodput/throughput) verbindungen wichtiger als 1mbit?
- nachts einen messmodus einfuehren?
- sendeleistung: algorithmus fuer sendeleistung/mrate finden
- netzwerkmasken berichtigen: 104.63.0.0/16 & laptops
- verschiedene Funktionen ueber das Wiki/nervseite ein/ausschaltbar machen:
- mrate11,batman,txpwr,rateset,rate,selektive ausnahmen?
- uhrzeit & nodeliste & macliste & nervseite_holen zusammenlegen
- GPS-Daten als 1ten hostnamen und Routername als 2ten hostnamen eintragen,um GPS-Daten dezentral zu verteilen. evtl. auch an die broadcast-addy den GPS-Hostnamen vergeben. evtl. auch olsrd-service-plugin dafuer benutzen
Fehlerliste (bugreport)
- Kindergarten: manchmal (nur bei neuen Routern?) werden die lanifnames durcheinander-gewuerfelt. Momentan behelfen wir uns mit
- Registrator: emails-verschicken klappt nicht zuverlaessig und bei xxx@freenet-Empfaengern garnicht?
Neue Firmware selbst bauen (buildprozess, howto, SVN)
- Dies ist ein Notizzettel zum bauen einer neuen Firmware. Saemtliche Schritte habe ich fuer ein Linux-System dokumentiert. Eigentlich kann man ein komplettes Copy&Paste machen und schon ist alles fertig.
- Der normale Weg ist, sich die aktuelle Weimarnetz-Firmware auf den Router zu packen, alle Aenderungen auf dem Router vorzunehmen und dann diese Anleitung nachzumachen.
- zum Arbeiten mit dem SVN empfiehlt sich die Lektüre Subversion - Versionskontrolle im Weimarnetz
EIGENER_ROUTER=$(route|awk '/default/{printf $2}') ssh $EIGENER_ROUTER # nun sind wir auf dem Router cd / tar cvzhf www/fw.tgz usr/sbin/*weimar* etc/init.d/*weimar* www/*nervseite www/*info* www/*reg* www/cgi-bin/*kinder* # nun haben wir eine direkt herunterladbare Datei fw.tgz, die # alle (evtl. geaenderten) weimarnetz-spezifischen Dateien enthaelt. # nun muessen wir noch alle zusaetzlich installierten # Software-Pakete herausfinden und in ein Archiv packen: ipkg update ipkg install batman2 ipkg install busybox-awk ipkg install freifunk-dnsmasq ipkg install freifunk-statistics-de ipkg install http://openwrt.alphacore.net/netcat_0.7.1_mipsel.ipk PAKETE="$(ipkg status|awk '{if(s==1&&$1=="Package:")printf $2" ";if($2=="mini-fo")s=1}')" F1="/usr/lib/ipkg/info/*" F2="/usr/lib/ipkg/status" F3="$(for F in $PAKETE;do ipkg files $F|awk '{if($0!="/")system("ls -ld "sprintf("%s",substr($0,2)))}'|awk '{if($5>0)print $9}';done)" tar cvzf /www/ipkg.tgz $F1 $F2 $F3 exit # nun haben wir eine direkt herunterladbare Datei ipkg.tgz, # haben also alles was wir brauchen und sind wieder auf unserem Rechner # wir laden und das aktuelle Kit von sven-ola's freifunk-seite # herunter und entpacken dieses auf unserem Rechner KIT_URL="http://styx.commando.de/sven-ola/testing/_kit/" KIT_VERSION="freifunk-openwrt-kit-1.3.6-de" wget "$KIT_URL$KIT_VERSION.tar.gz" tar xvzf "$KIT_VERSION.tar.gz" cd $KIT_VERSION # nun machen wir uns ein Verzeichnis in der die komplette # Verzeichnisstruktur und alle Dateien wie sie auf dem Router # sind reinkopiert werden. Das Grundsystem ist im Kit schon dabei. # die zwei Dateien, die wir eben auf dem Router erstellt # haben, nehmen wir von dort oder aus dem SVN wget "http://$EIGENER_ROUTER/fw.tgz" wget "http://$EIGENER_ROUTER/ipkg.tgz" mkdir weimar cd weimar tar xvzf ../root.tgz tar xvzf ../fw.tgz tar xvzf ../ipkg.tgz # ok,nun ist fast alles fertig. Wir haben nun noch die Chance # nach www/ ein eigenes bild zu kopieren und ein paar kleine # Aenderungen durchzufuehren, z.b.: # holen und formatieren der aktuellen nervseite: URL="http://wireless.subsignal.org/index.php?title=Nervseite" F1="www/nervseite-vorlage" wget -O - "$URL"|sed '/-- NERVSEITE:START --/,/-- NERVSEITE_LEEREKONTAKTDATEN:END --/!d' >"$F1" # nun alles wieder einpacken und neues firmwareimage erzeugen # das firmwareimage wird schon nach unixzeit und datum benannt: tar cvzf ../root.tgz * cd .. X=$(date -Ih|awk -F[-T] '{print($1-1970)*31536000+$2*2592000+$3*86400+$4*3600}') Z=$(date -R|awk -F"[, :]" '{printf("%s%s%s-%suhr%s",$3,tolower($4),$5,$6,$7)}') N="weimarnetz_firmware-$X-$Z-trx.bin" ./gen-openwrt -v $N trx >$N # Nun muessen wir noch eine Schmalspur-Variante fuer Geraete mit # nur 2Mb Flash-Speicher bauen. Dazu schmeissen wir scheinbar # ueberfluessigen Muell raus. Insbesondere grosse Dateien 8-) # erstmal verschaffen wir uns einen Ueberblick: cd weimar ls -alR|awk '{if(substr($0,1,2)=="./")dir=substr($0,3,length($0)-3);print $5,dir"/"$9,$10,$11,$12}'|sort -n # nun sehen wir den ganzen Kram,der sich lohnt. Hier mein Vorschlag: rm www/images/intro.jpg RRD="$(find -name "*rrd*")" rm $RRD rm usr/bin/dropbearmulti rm lib/libcrypt-0.9.27.so rm usr/bin/netcat rm www/cgi-bin-registrator.html rm usr/sbin/batman # und die neue version bauen: tar cvzf ../root.tgz * cd .. N="weimarnetz_firmware-schmalspur-$X-$Z-trx.bin" ./gen-openwrt -v $N trx >$N # nun haben wir zwei firmware-dateien, die schmalspurvariante ist ca. 300Kb kleiner # und wenn man moechte, nun noch das SVN aktualisieren svn checkout https://svn.sourceforge.net/svnroot/weimarnetz-fw/ cd weimarnetz-fw/trunk/firmware/ rm -fR * svn rm * wget "http://$ROUTER/fw.tgz" tar xvzf fw.tgz rm fw.tgz svn add * svn commit -m "$X-$Z"