Firmwareentwicklung-Firmware selberbauen: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
(+kat)
(neuer Buildprozess)
Zeile 1: Zeile 1:
=Neue Firmware selbst bauen (buildprozess, howto, SVN)=
+
=Wo?=
* 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.
+
* Die Erweiterungen zur OpenWRT-Firmware für das Weimarnetz sowie die Bauanleitung liegen auf github.
* 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.
+
* Ein Repository ist z.B. das hier: https://github.com/andibraeu/weimarnetz
* zum Arbeiten mit dem SVN empfiehlt sich die Lektüre [[Subversion - Versionskontrolle im Weimarnetz]]
+
* Jeder kann dieses Repository verwenden und eine Firmware daraus erstellen. Hilfe und Änderungen sind gern willkommen, wer aktiv mitentwickeln möchte kann sich das Repository auch gabeln (aka forken)
* einfaches Einsehen des SVNs: https://www.weimar-fon.de/websvn
 
  
 +
=Wie?=
 +
==Vorbereitungen==
 +
* Zur Entwicklung und zum Bauen der Firmware empfiehlt sich die Nutzung von Linux.
 +
* auf Debian müssen diese Pakete installiert sein: build-essential libncurses5-dev m4 flex git git-core zlib1g-dev unzip subversion gawk python libssl-dev quilt
 +
* man sollte einen Nutzer verwenden, der nicht root ist, da die openWRT-scripte das überprüfen und es ein wenig Krampf ist, alles umzubiegen
  
EIGENER_ROUTER=$(route|awk '/default/{printf $2}')
+
==Bauen einer Firmware==
ssh $EIGENER_ROUTER
+
* Alle Schritte zum Bauen einer Firmware sind grundlegend in der README des Repositories beschrieben
 +
* Um ein vtund ohne SSL und ohne Komprimierung zu erstellen, muss das Makefile entsprechend angepasst werden.
 +
* Außerdem wurden Abhängigkeiten aus der LuCI-Freifunkkonfiguration entfernt
 +
* Diese Dateien liegen im Repository unter openwrt-build/, später soll das kopieren automatisch erfolgen
  
* nun sind wir auf dem Router
+
==Ablauf==
 +
* Die im README gezeigten Schritte erstellen eine Standardfirmware, die auf die gewählte Hardware installiert werden kann
 +
* Änderungen am OpenWRT können über ''make menuconfig'' vorgenommen werden. Den Kernel passt man mit ''make kernel_menuconfig'' an
 +
* Der erste komplette Buildprozess kann je nach Rechenleistung mehrere Stunden in Anspruch nehmen. Nachfolgende Builds sind erheblich schneller (1 min auf schnellen Rechnern, 30 Minuten auf unserem Rootserver)
  
cd /
+
==Probleme im Build-Prozess==
tar cvzhf www/fw.tgz usr/sbin/*weimar* etc/init.d/*weimar* www/*nervseite www/*info* www/*registr* www/cgi-bin/*kinder* www/cgi-bin-speed www/cgi-bin-map www/cgi-bin/telnet
+
* nach Auswahl eines Hardwaremodels und kopieren der Build-Config sind immer wieder gewisse Standardwerte gesetzt, wie z.B. der b43legacy-Treiber beim Linksys
  
* nun haben wir eine direkt herunterladbare Datei fw.tgz, die
+
=Weitere Forks=
* alle (evtl. geaenderten) weimarnetz-spezifischen Dateien enthaelt.
+
* [https://github.com/bittorf/kalua Basti]: Entwicklung hauptsächlich für bittorf wireless
* nun muessen wir noch alle zusaetzlich installierten
+
* [https://github.com/weimarnetz/storchi Storchi]
* Software-Pakete herausfinden und in ein Archiv packen:
 
* das Archiv wird aus Platzgruenden in die RAM-Disk geleitet
 
* und ein zusaetzlicher, umgebogener Webserver gestartet
 
 
 
==Softwarepakete nachinstallieren==
 
ipkg update
 
ipkg install freifunk-recommended-de                              # statistik,horst,tcpdump,dnsmasq,olsrviz
 
inkf install freifunk-statistics-de (extra aus leipzig)          # olsr-stats zu 2 nachbarn
 
ipkg install freifunk-olsrd-libs                                  # damit Dienste-Plugin funzt
 
ipkg install iptables-extra                                      # viele Ziele
 
ipkg install batman2 [http://article.gmane.org/gmane.org.freifunk.berlin/827 mehr]
 
ipkg install busybox-awk
 
ipkg install vtun                                                # fuer VPN-Tunnel
 
ipkg install freifunk-portfw-de                                  # Portforwarding
 
ipkg install freifunk-pppoecd-de                                  # fuer DSL-Einwahl
 
ipkg install libmatrixssl                                        # fuer HTTPS
 
ipkg install http://znerol.ch/ipkg/matrixtunnel_0.2-1_mipsel.ipk  # fuer HTTPS
 
ipkg install http://openwrt.alphacore.net/netcat_0.7.1_mipsel.ipk # fuer Registrierungs-mails verschicken)
 
 
 
echo "ipt_ipp2p"  >>/etc/modules.d/40-ipt-nat-extra
 
echo "ipt_layer7" >>/etc/modules.d/40-ipt-nat-extra (Module direkt beim start laden)
 
 
 
URL=http://l7-filter.sourceforge.net
 
cd /etc/l7-protocols/
 
wget -O - "$URL/protocols"|awk -v U=$URL '/layer7-protocols/ {system("wget "U"/"substr($11,7,match($11,"\\.")-3))}'
 
 
 
PAKETE="$(ipkg status|awk '{if(s==1&&$1=="Package:")printf $2" ";if($2=="dropbear")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 /tmp/ipkg.tgz $F1 $F2 $F3
 
tar cvzf /tmp/images.tgz www/images/Info_* www/images/*.swf www/images/intro.jpg
 
httpd -h /tmp/ -p 81
 
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:81/fw.tgz"
 
wget "http://$EIGENER_ROUTER:81/ipkg.tgz"
 
wget "http://$EIGENER_ROUTER:81/images.tgz"
 
mkdir weimar
 
cd weimar
 
tar xvzf ../root.tgz
 
tar xvzf ../fw.tgz
 
tar xvzf ../ipkg.tgz
 
tar xvzf ../images.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"
 
 
 
===Firmware-Image erzeugen/bauen===
 
 
 
* nun alles wieder einpacken und neues firmwareimage erzeugen
 
* das firmwareimage wird schon nach unixzeit und datum benannt:
 
 
 
tar cvzf ../root.tgz *
 
cd ..
 
N="weimarnetz_firmware-$(date +%s-%d%b%Y-%Huhr%M)-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 usr/bin/netcat
 
rm www/cgi-bin-registrator.html
 
rm usr/sbin/batman
 
rm usr/sbin/tcpdump
 
rm lib/libncurses.so.5.2
 
rm usr/lib/libpcap.so.0.8.3
 
 
 
 
 
* 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
 
 
 
* NUR BEIM ERSTEN MAL:
 
svn checkout https://www.weimar-fon.de/svn_freifunkfirmwareweimar/trunk
 
 
 
cd firmware/
 
* Sonst:
 
cd firmware/
 
svn update
 
* weiter
 
wget "http://$EIGENER_ROUTER:81/fw.tgz"
 
tar xvzf --overwrite fw.tgz
 
rm fw.tgz
 
svn add * --force
 
svn commit -m "$X-$Z"
 
  
 
[[Kategorie:Firmware]]
 
[[Kategorie:Firmware]]

Version vom 28. November 2011, 14:02 Uhr

Wo?

  • Die Erweiterungen zur OpenWRT-Firmware für das Weimarnetz sowie die Bauanleitung liegen auf github.
  • Ein Repository ist z.B. das hier: https://github.com/andibraeu/weimarnetz
  • Jeder kann dieses Repository verwenden und eine Firmware daraus erstellen. Hilfe und Änderungen sind gern willkommen, wer aktiv mitentwickeln möchte kann sich das Repository auch gabeln (aka forken)

Wie?

Vorbereitungen

  • Zur Entwicklung und zum Bauen der Firmware empfiehlt sich die Nutzung von Linux.
  • auf Debian müssen diese Pakete installiert sein: build-essential libncurses5-dev m4 flex git git-core zlib1g-dev unzip subversion gawk python libssl-dev quilt
  • man sollte einen Nutzer verwenden, der nicht root ist, da die openWRT-scripte das überprüfen und es ein wenig Krampf ist, alles umzubiegen

Bauen einer Firmware

  • Alle Schritte zum Bauen einer Firmware sind grundlegend in der README des Repositories beschrieben
  • Um ein vtund ohne SSL und ohne Komprimierung zu erstellen, muss das Makefile entsprechend angepasst werden.
  • Außerdem wurden Abhängigkeiten aus der LuCI-Freifunkkonfiguration entfernt
  • Diese Dateien liegen im Repository unter openwrt-build/, später soll das kopieren automatisch erfolgen

Ablauf

  • Die im README gezeigten Schritte erstellen eine Standardfirmware, die auf die gewählte Hardware installiert werden kann
  • Änderungen am OpenWRT können über make menuconfig vorgenommen werden. Den Kernel passt man mit make kernel_menuconfig an
  • Der erste komplette Buildprozess kann je nach Rechenleistung mehrere Stunden in Anspruch nehmen. Nachfolgende Builds sind erheblich schneller (1 min auf schnellen Rechnern, 30 Minuten auf unserem Rootserver)

Probleme im Build-Prozess

  • nach Auswahl eines Hardwaremodels und kopieren der Build-Config sind immer wieder gewisse Standardwerte gesetzt, wie z.B. der b43legacy-Treiber beim Linksys

Weitere Forks

  • Basti: Entwicklung hauptsächlich für bittorf wireless
  • Storchi