Firmwareentwicklung-Firmware selberbauen: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Neue Firmware selbst bauen (buildprozess, howto, SVN)=
+
{{Vorlage:überarbeiten}}
* 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]]
 
* einfaches Einsehen des SVNs: http://svn.sourceforge.net/viewvc/weimarnetz-fw/trunk/firmware/
 
  
 +
=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)
  
EIGENER_ROUTER=$(route|awk '/default/{printf $2}')
+
=Wie?=
ssh $EIGENER_ROUTER
+
==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
  
* nun sind wir auf dem Router
+
==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
  
cd /
+
==Ablauf==
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
+
* 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)
  
* nun haben wir eine direkt herunterladbare Datei fw.tgz, die
+
==Probleme im Build-Prozess==
* alle (evtl. geaenderten) weimarnetz-spezifischen Dateien enthaelt.
+
* nach Auswahl eines Hardwaremodels und kopieren der Build-Config sind immer wieder gewisse Standardwerte gesetzt, wie z.B. der b43legacy-Treiber beim Linksys
* nun muessen wir noch alle zusaetzlich installierten
 
* 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==
+
=Weitere Forks=
ipkg update
+
* [https://github.com/bittorf/kalua Basti]: Entwicklung hauptsächlich für bittorf wireless
ipkg install freifunk-recommended-de                              # statistik,horst,tcpdump,dnsmasq,olsrviz
+
* [https://github.com/weimarnetz/storchi Storchi]
ipkg install iptables-extra                                      # viele Ziele
 
ipkg install batman2
 
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
+
[[Kategorie:Firmware]]
echo "ipt_layer7" >>/etc/modules.d/40-ipt-nat-extra (Module direkt beim start laden)
 
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"
 
 
 
* 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 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://svn.sourceforge.net/svnroot/weimarnetz-fw/
 
 
 
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"
 

Aktuelle Version vom 6. April 2014, 02:25 Uhr

Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung.

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