Freetz

Aus Zebradem WIKI
Zur Navigation springenZur Suche springen
http://www.zebradem.com/wiki/images/3/3d/Freetz_motd.png
http://www.zebradem.com/wiki/images/3/3d/Freetz_motd.png


Was ist eigentlich Freetz ?

Freetz wurde am 2. Februar 2008 ins Leben gerufen. Freetz, eine Zusammensetzung aus dem englischen free (= frei) und dem deutschen Namen Fritz, ist ein Software-„Baukasten“ für Entwickler und setzt die Entwicklungswerkzeuge des freien Betriebssystems Linux voraus. Mit Freetz können versierte Anwender auf der Original-Firmware des Herstellers aufbauende, funktional modifizierte Firmware-Versionen für die diverse DSL-, LAN-, WLAN- bzw. VoIP-Router der Marken Fritzbox bzw. Speedport und die auf ihnen beruhenden Geräte bauen und diese auf das betreffende Gerät transferieren. Es werden eine Vielzahl von Erweiterungspaketen sowie Möglichkeiten, nicht benötigte Funktionalität der Original-Firmware zu entfernen, angeboten. Die Bandbreite der Einflussmöglichkeiten reicht vom Einbinden diverser Linux-Dienste bis zum expliziten Ausblenden störender Trägerbänder im DSL-Spektrum, um Anschlüsse mit hoher Dämpfung zu optimieren.
Durch die MIPS CPU s die in der Fritzbox verbaut wurden , ist es möglich auch EMU s auf der Fritzbox laufen zu lassen , und somit Die Fritzbox als CS Server zu verwenden Achtung: Die Installation einer modifizierten Firmware führt zum Verlust der Gewährleistung des Herstellers!

Wie entstand Freetz?

Es gibt einige Vorläufer von Freetz. Daniel Eiband (bekannt als "Danisahne") hat vor einigen Jahren, aufbauend auf Vor- und Zuarbeiten anderer kreativer Köpfe (Erik Andersen, Christian Volkmann, Andreas Bühmann, Enrik Berkhan u.a.), den sog. Danisahne-Mod (kurz: DS-Mod) ins Leben gerufen. So wie heute mit Freetz, konnte und kann man auch damit Firmware-Modifikationen bauen, allerdings noch für ältere Firmware-Versionen mit Linux-Kernel 2.4. Da einige Router noch immer auf Kernel 2.4 basierende Firmwares haben, ist Version ds-0.2.9-p8 des DS-Mod für jene Geräte immer noch aktuell. Für die Mehrzahl aktueller Geräte war der direkte Vorläufer zu Freetz jedoch die von Oliver Metz ins Leben gerufene Version ds26 (zuletzt ds26-15.2), welche ausschließlich für Firmwares mit Kernel 2.6 geeignet ist. Selbiges gilt auch für Freetz, denn Freetz ist Stand heute (20.01.2008) nichts anderes als die aktuelle Entwicklerversion von ds26, nur mit neuem Namen.


Wozu überhaupt ein neuer Name, wo doch DS-Mod inzwischen so bekannt ist?

Es gibt mehrere Gründe dafür. Zum einen ist seit gut einem Jahr Daniel nicht mehr aktiv an der Weiterentwicklung von ds26 beteiligt gewesen, zum anderen hat er bei SourceForge schon etwa ebenso lange begonnen, eine von Grund auf neue DS-Mod-Version - nennen wir sie mal inofiziell DS-Mod NG (Next Generation) - zu entwickeln, deren aktueller Stand in einem öffentlich zugänglichen Quellcode-Repository auf der Projekt-Webseite einzusehen ist. Wir wollen Daniel seinen Projektnamen nicht streitig machen und auch nicht in Konkurrenz zu ihm treten, sondern hoffen im Gegenteil, daß er eines Tages wieder mehr Zeit für sein Projekt haben wird und schlußendlich beide wieder in ein gemeinsames münden, um alle Vorteile in einem Produkt zu vereinen. Zurzeit ist es jedoch so, daß beide Projekte sich deutlich auseinander entwickelt haben: DS-Mod NG hat eine sehr saubere Struktur, ist jedoch noch lange nicht fertig, Freetz (bzw. bisher ds26) ist hundertfach im Einsatz und wird eher während der laufenden Entwicklung immer wieder mal Refactoring-Maßnahmen unterworfen. Wo zuletzt in der Presse (z.B. PC-Welt) vom DS-Mod gesprochen wurde, war Freetz alias ds26 gemeint.

Warum Firmware modifizieren?

Es können zwar einzelne spezielle Dateien (character devices) unter /var/flash/ bearbeitet werden und sie behalten den Inhalt auch über einen Reboot hinweg, jedoch trifft das nicht auf den Rest des Dateisystems zu. Der Inhalt dieser character devices landet in einer eigenen Flash Partition, die sehr klein ist. Der überwiegende Teil des Dateisystems ist ein read-only Squashfs Image, welches in einem Firmware Update enthalten ist. Um (größere) Dateien dauerhaft in die Firmware einzubinden müssen sie in dieses Squashfs Image gelangen, welches unter anderem in Freetz implementiert ist.

Quellcode

Der Quellcode von Freetz kann aus dem Subversion-Repository bezogen werden: Stabile Version

Je nach Gerätetyp wird eine der nachstehenden Versionen benötigt:

freetz-1.1.2 (Kernel 2.6)

svn co http://svn.freetz.org/tags/freetz-1.1.2/

Alternativ kann der stable-branch-1.1 genutzt werden. Hier sind evtl. Fehler im Release 1.1.x gefixt.

svn co http://svn.freetz.org/branches/freetz-stable-1.1/ 

Eventuell vorhandene Änderungen am stable branch erhält man mit:

svn up
  • Bevor ihr nach einem "svn up" ein neuen Fehler meldet, stellt bitte sicher, dass der Fehler nach einem "make dirclean" noch immer auftritt.

ds-0.2.9-p8 (Kernel 2.4)

svn co http://svn.freetz.org/tags/ds-0.2.9-p8/ ds-0.2.9-p8
  • Entwicklerversion

Diese Version ist ausschließlich für Profis gedacht, die sich u.U. selbst zu helfen wissen! Sie ist ständigen Änderungen unterworfen und funktioniert möglicherweise nicht oder nur eingeschränkt.

svn co http://svn.freetz.org/trunk freetz-trunk

Update auf die neueste Entwicklerversion

svn up
  • Bevor ihr nach einem "svn up" ein neuen Fehler meldet, stellt bitte sicher, dass der Fehler nach einem "make dirclean" noch immer auftritt.

Man kann auch eine bestimmte Revision auschecken, falls z.B. die aktuelle nicht funktionieren sollte. Dabei einfach $revision durch die gewünschte Revision ersetzen.

svn co http://svn.freetz.org/trunk/ freetz-trunk -r $revision


Aussehen

Momentan gibt es nur ganz wenige Möglichkeiten, das Aussehen von FREETZ- oder auch von AVM-Webinterface zu verändern. Bei AVM hängt es damit zusammen, dass man die Urheberrechte von AVM auf ihre Webseiten nicht verletzen will. Bei FREETZ-WebIF ist es mehr historisch gewachsen: Bei der Vielfalt der vorhandenen Pakete ist es momentan nur schwer denkbar globale Änderungen im WebIF-Design durchzuführen. [1] [2]

Bibliotheken (libraries)

Bibliotheken (im Nachfolgenden "libs" genannt") zu Paketen, die abgewählt wurden, werden nicht automatisch mit abgewählt. Um nach der Abwahl diverser Pakete auch die nicht mehr benötigten libs zu entfernen (damit das Image nachher auch tatsächlich nicht zu groß wird) gibt es das folgende make target:

make config-clean-deps 

Addons

  • Apache, php, samba ect. Siehe Freetz Wiki: [3]
  • diverse Emus
  • Hier alles zu den Freetz Addons

Möglichkeiten

Man kann sich die Addons für seine Bedürfnisse anpassen oder für neue Anwendungen auch neue Addons erstellen

Pakete & CGI-Erweiterungen

siehe Freetz Wiki: [4]


Erstellen von Firmware-Images (make/Build)

Was bedeuten die einzelnen make-targets (z.B. dirclean, distclean, config-clean-deps etc.)?

A: Die make-targets beeinflussen den Build-Prozess bei der FW-Erstellung.

1. Aufräumen:

make clean
     
make <Paket>-clean:

ruft normalerweise das clean-Target des Source-Makefiles auf. Dieses wird typischerweise alle generierten Dateien (vor allem Object-Dateien, Libraries und ausführbare Programme) löschen. Ein nachfolgendes make wendet keine geänderten Patches an, sondern erstellt nur die o.g. Object-Dateien, Libraries und ausführbare Programme neu (compilieren). Z.B. räumt make mc-clean so das Paket "Midnight Commander" (mc) auf.

make <Paket>-dirclean:

löscht das gesamte Verzeichnis des Pakets. Ein nachfolgendes make wird die Quellen neu auspacken, die Patches anwenden, das Paket konfigurieren und dann compilieren. Nur der letzte Schritt (compilieren) wird nach make <Paket>-clean (s.o.) ausgeführt.

make dirclean:

führt, wie der Name schon sagt, ein "Verzeichnis-Aufräumen" durch. Hierbei werden unter anderem die Verzeichnisse /packages, /source, /build, /toolchain/build, toolchain/target (und ein paar andere Sachen(?)) gelöscht, sodass bei erneutem Ausführen von make alles neu gebaut werden muss. Dies ist empfehlenswert, wenn sich Aufgrund eines svn up eine neu gebaute Firmware nicht so Verhält, wie man es erwartet. Alternativ kann man, wenn man weiß, an welchem Packet es liegt, dieses auch via make <Paket>-dirclean einzeln löschen (siehe oben). Zu erwähnen sei noch, dass nach einem make dirclean der Bau der Firmware natürlich länger dauert, da ja alles neu gebaut werden muss.

make tools-distclean:

löscht die Tools (busybox, lzma, squashfs, usw.)

make distclean:

Hier werden zusätzlich zum make dirclean auch noch die Downloads sowie die Tools gelöscht.

make config-clean-deps:

Wenn bei make menuconfig Pakete abgewählt wurden, sind ggfs. noch Shared Libraries ausgewählt, die nicht mehr benötigt werden (dies kann menuconfig nicht automatisch erkennen). Diese kann man dann manuell unter 'Advanced Options'→'Shared Libraries' abwählen - die benötigten lassen sich nicht deaktivieren. Alternativ kann man dies automatisch mittels make config-clean-deps erledigen lassen.

make kernel-dirclean:

löscht den aktuell entpackten Source-Tree des Kernels, um von komplett sauberen Kernel Sourcen zu kompilieren (wichtig wenn was an den Patches geändert wird)

make kernel-clean:

analog make <Paket>-clean

make kernel-toolchain-dirclean:

löscht den Kernel-Compiler

make target-toolchain-dirclean:

löscht den Compiler für die uClibc und die Binaries (ausführbare Programme)

2. Vorbereitungen:

make world:

Vorraussetzung ist eine Toolchain (siehe Cross-Compiler / Toolchain erstellen). Sollten jemals Probleme mit nicht vorhandenen Verzeichnissen auftauchen, so kann ein make world Abhilfe schaffen. In der Regel sollte das aber nicht nötig sein.

make kernel-toolchain:

kompiliert den Kernel und auch für das target (Fritzbox) Aus historischen Gründen wurde die Bezeichnung als kernel-toolchain belassen, obwohl damit wie gesagt nicht nur der Kernel gebaut wird, sondern auch Pakete (s.u.).

make target-toolchain:

kompiliert die Pakete für das target (Fritzbox)

make kernel-menuconfig:

Die Konfiguration des Kernels wird danach wieder nach ./make/linux/Config.<kernel-ref> zurückgespeichert.

make kernel-precompiled:

Damit werden der Kernel und die Kernel Module kompiliert.

3. Image kompilieren:

make menuconfig 

Zum Konfigurieren von Freetz kommt das Programm conf/mconf zum Einsatz, welches dem ein oder anderen vielleicht von der Konfiguration des Linux Kernels bekannt ist. Die ncurses Variante mconf kann mit dem Kommando make menuconfig aufgerufen werden.

make 

Übrigens: Eine Hilfe zu den einzelnen Punkten kann direkt in menuconfig durch Eingabe von "?" aufgerufen werden. Und nach Eingabe von "/" kann man von allen Ebenen aus nach beliebigen Zeichenfolgen suchen - sehr praktisch.


Entwicklung

Wann kommt Version xy?

 Grundsätzlich: It's done when it's done. Die Entwickler arbeiten in ihrer Freizeit, und Releases gibt es dann, wenn die beschlossenen Features fertig und release-kritische Bugs behoben sind.
 Es gibt jedoch einen groben Plan für die Releases: 3-4 Monate nach einer stabilen Release gibt es einen Feature Freeze für die nachfolgende Release. Ab diesem Zeitpunkt werden nur noch Bugs behoben. Die Feature-Freeze-Termine werden in der [/roadmap Roadmap] angekündigt. Nach dem Feature Freeze kann grob nach 1 bis 1,5 Monaten mit dem Release gerechnet werden. Zwischen den stabilen Feature-Releases gibt es ggfs. weitere Maintenance-Releases, die nur neue Firmwareversionen von AVM unterstützen und Fehler beheben.

Trunk, Branches, Tags?

Der [browser:trunk Trunk] ist der aktuelle Entwicklungszweig. Unter einem Branch versteht man ein Zweig, der zu einer bestimmten Zeit (z.B. r2759) aus dem trunk abgetrennt wurde. Hier gibt es derzeit die Branches [browser:branches/freetz-stable-1.0 freetz-stable-1.0] und [browser:branches/freetz-stable-1.1 freetz-stable-1.1]. Alle Releaseversionen bekommen einen Tag (z.B. [browser:tags/freetz-1.1.2 freetz-1.1.2])


Beim Erstellen tritt ein Fehler auf, was nun?

 Zunächst einmal die folgende Liste der häufigen Fehler durchgehen:

You must have either have gettext support in your C library, or use the GNU gettext library.

 Hier ist wohl ein falscher Wert im Cache gelandet, den man löschen muss: "rm make/config.cache" oder "rm source/target-mipsel_uClibc-0.X.XX/config.cache" jenachdem, wo die Datei zu finden ist. Und danach wird der FW-Bau wieder mit "make" gestartet.

ERROR: The program/library/header xy was not found...

 Wenn mit die ersten Meldungen so aussehen, fehlen für die Erstellung von Freetz unbedingt notwendige Pakete im Build-System und müssen zunächst installiert werden.

WARNING: The program/library/header xy was not found...

 Wenn die Erstellung mit einem Fehler abbricht, kann diese Warnung zu Beginn des Vorgangs darauf hindeuten, daß für bestimmte ausgewählte Optionen notwendige Pakete im Build-System fehlen.

No such file `FRITZ.Box_xxxxxxxxx.aa.bb.cc.image'

 Das passiert regelmäßig immer dann, wenn AVM eine neue Firmware-Version herausbringt - da auf dem AVM FTP Server nie mehr als eine (i.d.R. die aktuelle) Firmware liegt. Freetz unterstützt natürlich nur die Versionen, die zum Zeitpunkt des Release aktuell waren. Aus Lizenzrechtlichen Gründen können wir diese Images nicht selbst zur Verfügung stellen. Lösungsmöglichkeiten (priorisiert nach Schwerigkeitsgrad):
* Für Alle: Im Suche-Firmware-Sammelthread kann man nach älteren Firmware-Versionen fragen. Das Firmware-Image muss dann in den Ordner 'dl/fw' kopiert werden.
* Für Anfänger: Die `stable` Branch aus dem SVN-Repository verwenden. Falls möglich, auf eine neuere Freetz-Version aktualisieren, die die aktuelle AVM-Firmware-Version unterstützt (oder warten, bis eine neue Freetz-Release erscheint).
* Für Fortgeschrittene: Den Entwickler-Zweig (`trunk`) aus dem SVN-Repository verwenden. Hier werden meist alle aktuellen Firmware-Versionen unterstützt.
* Für Fortgeschrittene: In [wiki:help/howtos/common/install/menuconfig make menuconfig] unter Advanced Options => Override firmware source den Namen der herunterzuladenen Image Datei anpassen

Zum letzten Punkt sei gesagt, dass er mit Vorsicht zu genießen ist. Bei einem reinen "Bugfix-Release" (wie dem Update von .57 auf .59) sollte das problemlos möglich sein. Wurden jedoch an der Firmware seitens AVM größere Veränderungen durchgeführt, kann das ins Auge gehen...

Please copy the following file into the 'dl/fw' sub-directory manually: fritz_box_aa_bb_cc-ddddd.image

 Die Labor-Firmwares können nicht direkt vom AVM-FTP-Server heruntergeladen werden. Sie müssen manuell von der AVM-Labor-Seite geladen werden, wobei die Nutzungsbedingungen zu bestätigen sind. Die Dateien müssen dann entpackt und das darin enthaltene Image in den Ordner 'dl/fw' kopiert werden. Hierbei gilt auch das zur vorigen Frage Gesagte.

./ln: cannot execute binary file

 Das aktuelle Verzeichnis '.' ist im Pfad (Variable PATH). Zum erfolgreichen Erstellen muss es entfernt werden.

Filesystem image too big

 Das Firmware-Image passt nicht in den Flash-Speicher der ausgewählten Box.
* Bei manchen Boxen kann dies bereits auftreten, wenn überhaupt keine zusätzlichen Pakete ausgewählt sind, da die grundlegende Freetz-Infrastruktur bereits einigen Platz belegt und die AVM-Images schon knapp unter dem Maximalwert liegen. In diesem Fall ist es notwendig, unter 'Patches' einen oder mehrere der Remove-Patches auszuwählen, um nicht benötigte Komponenten der Original-Firmware zu entfernen.
* Wenn viele Pakete ausgewäht sind, sollte man sich beschränken oder versuchen per external/Downloader/USBRoot/NFSRoot einige Komponenten aus dem Image auszulagern. Näheres dazu im IPPF und in WIKI
* Bei den Boxen mit einem USB-Host (z.B. 7170,7270) kann man auch einzelne Pakete auf das externe USB-Medium (z.B. USB-Stick, USB-Festplatte) auslagern. Die Auslagerung wird nach dem make-Prozess automatisch von einem Skript namens external ausgeführt. Im menuconfig finden sich die Optionen für die Auslagerung mittels external. Im Unterschied zum USB-Root wird hier nur ein Teil der Pakete ausgelagert.
* Wenn Pakete abgewählt wurden, sind ggfs. noch Shared Libraries ausgewählt, die nicht mehr benötigt werden (dies kann menuconfig nicht automatisch erkennen). Diese kann man dann manuell unter 'Advanced Options'->'Shared Libraries' abwählen - die auf benötigten lassen sich nicht deaktivieren. Alternativ kann man dies automatisch mittels 'make config-clean-deps' erledigen lassen.

WARNING: Not enough free flash space for answering machine!

 Im Gegensatz zur Meldung "Filesystem image too big" passt das Firmware-Image in den Flash-Speicher der ausgewählten Box, der restliche Platz im Flash könnte aber für die Aufzeichnung von Nachrichten auf dem von AVM in der FW integrierten Anrufbeantworter zu klein sein oder komplett fehlen. Die Firmware sollte trotz dieser Warnung funktionieren, für Anrufbeantworter-Daten, FAX-Nachrichten und Sonstiges empfiehlt sich einen Stick mit einer FAT-Partition anzulegen und entsprechend in AVM-WebIF angeben, dass der Anrufbeantworter (oder andere Dienste) den externen Speicher nutzen sollten.
 Hintergrundinformationen: Seit einigen Firmware-Versionen versucht AVM die restlichen Bytes im Flash dafür zu nutzen, eine jffs2-Partition anzulegen. Auf dieser Partition werden z.B. Anrufbeantworter-Nachrichten (TAM) und evtl. noch Faxe und Ähnliches abgespeichert. Bei älteren Boxen (z.B. 7170) kommt es fast immer dazu, dass im Image kaum mehr Platz frei ist, sodass die jffs2-Partition nicht angelegt wird und die Meldung nur als Warnhinweis angesehen werden sollte. Mehr dazu im IPPF-Thread. In FREETZ seit Revision 3049.

Anleitungen

Freetz Image erstellen

Freetz Image erstellen

Freetz flashen bis zum CS Server einrichten

Anleitung Freetz flashen bis zum CS Server einrichten

Quellennachweise

Wichtige Links

[Zurück zu Hauptseite]