Wir waren im Radio! Als Teil des 53h bauhaus.fm Sendungsmarathons haben wir eine Stunde lang über Meltdown und Spectre sowie den Maschinenraum allgemein gesprochen. Hört euch auch die anderen Beiträge der 53h Sendung an.
Los geht's:
Januar 20th, 2018 § 0 comments § permalink
Wir waren im Radio! Als Teil des 53h bauhaus.fm Sendungsmarathons haben wir eine Stunde lang über Meltdown und Spectre sowie den Maschinenraum allgemein gesprochen. Hört euch auch die anderen Beiträge der 53h Sendung an.
Los geht's:
Dezember 13th, 2017 § 0 comments § permalink
Mai 11th, 2017 § 0 comments § permalink
April 8th, 2017 § 0 comments § permalink
am 12.4. feiert der Maschinenraum den ersten Menschen im Weltraum - Juri Gagarin. Wir möchten euch herzlich einladen uns zu besuchen und mit uns zu feiern. Los geht's gegen 21 Uhr im Café S140 in der Marienstraße 18, es gibt spacige Cocktails und Tanzmusik von der Schallplatte.
März 10th, 2015 § 0 comments § permalink
..weiter geht's. Teil I war ein Rundumschlag mit allgemeinen Geplänkel und jetzt wird es konkreter.
Wir schauen uns an wie die Firmware an. Ziel soll sein selbst etwas an der Firmware ändern zu können. Wenn man da keinen Bock drauf hat, kann man auch direkt Meshkit benutzen und bekommt eine fertige Firmware für seinen Router!
Los geht's!
...ist vielleicht das falsche Wort dafür, aber es gibt ein paar Ideen und Konzepte die immer wieder auftauchen und in etwa zu wissen womit man da zu tun hat macht alles sehr viel einfacher.
..und das wichtigste:
echt jetzt! Das Problem ist, dass es kaum oder keine Dokumentation gibt. Dieser Blogpost ist auch nur aus dem Frust heraus entstanden keine Informationen über die Funktionsweise der Weimarnetz-Firmware zu haben. Im Zweifel hilft es nur den Quellcode zu lesen.
Okay - jetzt geht es aber los:
Ziel ist es für einen Router ein Image mit der Weimarnetz-Firmware aus dem Quellcode zu bauen. Dafür folgen wir erstmal der Anleitung aus dem git-Repository vom Weimarnetz:
# login as non-root user export REPONAME="weimarnetz" export REPOURL="git://github.com/weimarnetz/weimarnetz.git" git clone $REPOURL mkdir myrelease; cd myrelease DO="../$REPONAME/openwrt-build/build_release.sh" # choose your router-model and build, for example: # build all ar71xx based hardware images # with barrier breaker 14.07 final $DO "HARDWARE.ar71xx" ffweimar_standard \ patch:901-minstrel-try-all-rates.patch \ patch:luci-remove-freifunk-firewall.patch \ patch:openwrt-remove-ppp-firewall-from-deps.patch \ patch:openwrt-remove-wpad-mini-from-deps.patch \ ffweimar_luci_standard hostapd vtunnoZlibnoSSL \ i18n_german https owm shrink tc use_bb1407
Alles klar? Hier auch nicht..
export VAR=
setzt eine Umgebungsvariable in der Shell - diese Variablen werden später vom Script build_release.sh
genutzt um das Repository zu clonen.
Das Build-Script selbst wird noch in eine 2. Umgebungsvariable $DO
gepackt und in der letzten Zeile wird das Buildscript mit vielen mysteriösen Optionen ausgeführt zu denen wir gleich noch kommen...
Ein Blick in das Build-Script erklärt vielleicht die langatmigen Ausführungen zu Shell-Scripten und Quellcode lesen am Anfang des Artikels: build-release.sh. Es stellt sich heraus, dass in diesem Script im wesentlichen nur die Repositories gecloned werden und einige Vorbereitende Konfigurationen unternommen werden und die eigentliche Magic in einem 2. Script passiert. Dieses Script heißt mybuild.sh und es wird in build-release.sh in Zeile 197 mit dem Argument make
aufgerufen sowie - und das passiert automatisch den Argumenten, die wir weiter oben schon build_release.sh
mitgegeben haben.
In mybuild.sh
werden viele Funktionen definiert aber in Zeile 44 wird es interessant:
case "$ACTION" in "") show_help exit 1 ;; make) ACTION="mymake" ;; esac
Jetzt wird die Funktion mymake()
aufgerufen... hier die nach besten unwissen kommentierte Version:
mymake() { # Parameter der Funktion werden # in die Variable $option gepackt local option="$1" # e.g. V=99 # Zähle die CPU Kerne # und packe sie in die Variable $cpu_count local cpu_count="$( grep -c ^processor /proc/cpuinfo )" # lege ein paar Variablen an local t1 t2 date1 date2 hardware local filelist file # [... ein paar Zeilen gekürzt] # lösche alte Firmware Dateien filelist="$( get_firmware_filenames )" for file in $filelist; do { [ -e "bin/$( get_arch )/$file" ] && rm "bin/$( get_arch )/$file" } done # Optionen für make werden vorbereit: # -j (Anzahl der Kerne die make nutzt) also z.B. -j4 # und nach die mitgegeben Optionen - siehe weiter oben. option="-j$(( $cpu_count + 1 ))${option:+ }$option" echo "executing: 'make $option'" # Hier passiert der eigentliche Build.. # make von OpenWRT wird aufgerufen... # Hier wird das Image gebaut!!! make $option || return 1 # Es hat geklappt! [... echo "\"Jauchzet und frohlocket...\" \ ob der Bytes die erschaffen wurden: \ (revision: $( scripts/getver.sh ))" # [...] }
Die Eigentliche Arbeit wird von OpenWRT geleistet. Wie feeds.conf
und make menuconfig
und .config
Files funktionieren würde noch einen weiteren Blogpost füllen. Mit den Infos hier und dem OpenWRT-Wiki bekommt man das aber schnell heraus. Entweder durch Source lesen oder zum Treffen kommen :)
Jetzt kann man sich durch die Dokumentation auf der Weimarnetz github-Seite wühlen und herausbekommen wie man seine eigene Firmware ändert. Am besten erstmal auf dem Router testen.
Momentan gaukelt einem das Buildsystem auch noch vor man würde die lokal veränderten Dateien ins Image einbauen. Dem ist nicht so. Es wird ein Paket aus dem github-Sourcen gebaut über einen Package-Feed der den aktuellen Master-Branch nutzt.
Die Makefile für das Paket sieht so aus:
include $(TOPDIR)/rules.mk PKG_NAME:=kalua PKG_VERSION:=2014-09 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://github.com/weimarnetz/weimarnetz.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_VERSION:=master PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz include $(INCLUDE_DIR)/package.mk define Package/kalua SECTION:=utils CATEGORY:=Utilities MAINTAINER:=Andreas Bräu <freifunk@andi95.de> TITLE:=Kalua extensions URL:=http://kalua.org/trac/wiki endef define Package/kalua/description Kalua extensions used in weimarnetz. endef define Package/kalua/compile endef define Package/kalua/install $(INSTALL_DIR) $(1)/etc $(INSTALL_BIN) $(PKG_INSTALL_DIR)/etc/kalua_* $(1)/etc/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/etc/local* $(1)/etc/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/etc/variables* $(1)/etc/ [...gekürzt] endef $(eval $(call BuildPackage,kalua))
Dieses Paket wird über die feeds.conf
(die im Build-System auch auftaucht, grep -r
ist immer nützlich) eingebunden. Details über Package-Feeds findet man im OpenWRT-Wiki
Soweit erstmal... leider auch mehr eine Linkliste als ein Tutorial, aber mit den Infos sollte man erstmal reicht weit kommen. Am besten zum Treffen kommen oder die Mailingliste fragen.
Es gibt noch weitere gute Tutorials. Bernd hat mich auf zwei gute Bücher mit freien Lizenzen aufmerksam gemacht, die Freifunk allgemein behandeln:
WLAN für alle – Freie Funknetze in der Praxis
Wireless Networking in the Developing World ist ein guter - wenn auch etwas älterer Einstieg.
Die Dokumentation (und der Quellcode) anderer Firmware-Versionen ist auch lesenswert und teilweise auf die Weimarnetz-Firmware übertragbar:
Freifunk Gluon Dokumentation
Meshkit Dokumentation
Have Phun!