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, 12: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