Neutrino-MP Entwicklungsumgebung
Development
- Allgemein
- Neutrino-HD-Entwicklung
- dbox2 Entwicklung
Dieser Artikel soll Einsteigern, Versierten und Interessierten zeigen, wie man sich mit den momentan verfügbaren Buildsystem-Quellen eine minimale Buildumgebung aufbauen kann, mit der es möglich ist, Neutrino-HD relevante Teile zu erstellen.
Inhaltsverzeichnis
Voraussetztungen
Zunächst sollte sichergestellt sein, dass genügend Festplattenspeicher (> 20 GB), vernünftige Rechnerleistung und ein möglichst schneller Internetzugang zur Verfügung steht. Aktuelle Mehrkernrechner sollten damit allemal zurechtkommen. Weiterhin benötigt man eine aktuelle Linux-Distribution wie z.B. OpenSUSE 11.3, 11.4, die man auch auf virtuellen Systemen wie z.B. VMWare oder VirtualBox verwenden kann. Nur zur Orientierung, für die Kompilierung einer Crosstoolumgebung auf einem WindowsXP-Rechner mitVMware-basiertem OpenSUSE 11.3 System und AMD Phenom 9750 Quadcore-Rechner mit 2.4 GHz ca. 3GB RAM benötigt man ca. 1h. Diverse Grundkenntnisse im Umgang mit der Kommandozeile (Shell), Subversion und Git sollte man mitbringen.
benötigte Tools
Es werden diverse Programme oder Tools benötigt, die installiert sein müssen, um fehlerfrei bauen zu können. Falls nötig, muss man diese nachinstallieren: Hier als Beispielinstallation für OpenSUSE 11.2 i386, andere Distribution haben möglicherweise ähnliche Paketnamen. Einige andere Pakete werden während der Installation wegen diverser Abhängigkeiten nachgeladen.
zypper install --no-recommends \ git make subversion patch \ gcc bison flex texinfo \ automake libtool \ ncurses-devel pkg-config cmake
Für Debian basierte Systeme, diese Pakete verwenden:
apt-get install --yes \ git make subversion patch \ gcc bison flex texinfo \ automake libtool \ ncurses-dev pkg-config cmake
Unter Ubuntu als auch unter Debian ab Squeeze (Debian 6.x) muss die Defaultshell noch angepasst werden. Viele Buildtools sind nicht auf die Dash abgestimmt, deswegen sollte /bin/sh auf /bin/bash zeigen. Mit root Berechtigungen folgenden Symlink erstellen.
ln -sf /bin/sh /bin/bashIn weiterer Zukunft ist dies eventuell nicht mehr nötig.
Auschecken der Buildsystem Quellen
Die benötigten Quellen für das Buildsystem liegen auf Gitorious, einem Open Source Project Hoster, vergleichbar mit GitHub oder auch SourceForge und werden von Seife verwaltet. Es nennt sich einfach "buildsystem-cs". Zudem gibt es dort noch weitere "Ableger", sog. Clones, welche einige zweckgebundene Eigenheiten aufweisen, auf die im Artikel bei Bedarf hingewiesen wird. Die Original Buildsystem-Quellen von Coolstream sind nicht öffentlich. Das Buildsystem selbst enthält keine Quellen für Neutrino-HD, sondern kann man als Modul verstehen und dient als Werkzeug zum Bauen von Neutrino-HD-Binaries oder Images bzw. Distributionen, die auf USB-Sticks oder in Form von OPKG-Paketen verfügbar gemacht werden können.
Auswahl des Buildsystems
Hier wird auf 3 Buildsyteme eingegangen:
- buildsystem-cs
- tijucas-buildsystem-cs
Diese beiden, sind fast identisch, jedoch sind in tijucas-buildsystem einige Erweiterungen enthalten, auf die wie schon angedeutet wurde, bei Bedarf hingewisen wird, wobei im Zuge der Entwicklung nicht auszuschließen ist, dass davon auch in seifes Buildsystem einiges übernommen wird. Grundsatzlich ist es aber so, dass tijucas-buildsystem genau so verwendbar ist wie Seifes. Es ist aber zu beachten das es durchaus vorkommen kann das in diesem Buildsystem auf Grund des experimentellen Charakters es auch mal zu Buildfehlern oder zu nicht einwandfrei funktionierenden Binarys kommen kann!
- wittinobis-buildsystem-cs
Dieses Buildsystem basiert auch auf Seifes-Buildsystem, weicht jedoch in einigen Details deutlich von den anderen Beiden ab und ist auch in der Wartung nicht immer konform mit den oben genannten. Es bietet aber die Möglichkeit auch Images zu erstellen, was mit den anderen noch nicht ohne weiteres möglich ist. Ausserdem nutzt dieses System im Gegensatz zu den anderen als Quelle für Neutrino-HD weder keinen Git-Mirror bzw. SVN-Clone, sondern nur einen direkten Zugriff auf das Coolstream-SVN, was zwar 1:1 aktuell gehalten werden kann, was aber unter Umständen im weiteren Vorgehen teilweise was Flexiblität angeht, mehr Aufwand bedeutet.
Zuerst geht es um einen minimalen Aufbau, wobei auf die ersten beiden Systeme eingegangen wird.
Klonen
Beim Auschecken via. Git spricht man vom Clonen, dabei werden von einem entfernten Repository (kurz. Repo = remote) die benötigten Daten auf das lokale System übertragen. Das ist also vergleichbar mit dem Checkout wie bei CVS oder SVN. Man ist jedoch nicht vom entfernten Repo abhängig, wie man es von CVS oder SVN her kennt. Alles weitere wird lokal gemacht!
Man legt zunächst einen Ordner an wo man das Buildsystem ablegt.
you@machine:~mkdir $HOME/coolstream
und wechselt in diesen:
you@machine:~cd $HOME/coolstream
Nun das Kommando für's Klonen eingeben:
tijucas-buildsystem-cs
you@machine:~/coolstream> git clone git://gitorious.org/~tijuca/neutrino-hd/tijucas-buildsystem-cs.git buildsystem-cs
seifes-buildsystem-cs
you@machine:~/coolstream> git clone git://gitorious.org/neutrino-hd/buildsystem-cs.git buildsystem-cs
wittinobis-buildsystem-cs
you@machine:~/coolstream> git clone git://gitorious.org/~wittinobi/neutrino-hd/wittinobis-buildsystem-cs.git buildsystem-cs
Die Ausgabe sollte nun etwa so aussehen:
Cloning into buildsystem-cs... remote: Counting objects: 2891, done. remote: Compressing objects: 100% (2583/2583), done. remote: Total 2891 (delta 1813), reused 414 (delta 208) Receiving objects: 100% (2891/2891), 5.60 MiB | 1.41 MiB/s, done. Resolving deltas: 100% (1813/1813), done.
Verzeichnisse anlegen
Es wurde automatisch ein Unterordner erzeugt in den man nun wechselt:
you@machine:~/coolstream> cd buildsystem-cs
Nun einen Ordner anlegen, wo diverse Archive abgelegt werden können, die während des Buildvorganges heruntergeladen werden:
you@machine:~ mkdir download
alternativ kann man auch einen bereits vorhandenen Archiv-Ordner verwenden den man hier verlinkt
you@machine:~/coolstream/buildsystem-cs> ln -sf $HOME/<dein vorhandenes Archiv> download
Konfiguration
im Ordner .../buildsystem-cs eine Datei namens config anlegen und anhand dieses Beispiels anpassen (im Ordner .../buildsystem-cs/doc befindet sich auch eine Beispieldatei namens config.example:
# The type of box to build for. # either "tripledragon" or "coolstream" # default (if empty) is "coolstream" PLATFORM=coolstream # if you want to use your precompiled toolchain, define those variables: # this will skip the building of our own compiler/glibc combination! # # ONLY CHANGE THOSE VARIABLES IF YOU KNOW WHAT YOU ARE DOING! # # do not set this if you want to build a toolchain with these makefiles. #CROSS_DIR=/opt/cross #TARGET=arm-linux-gnueabi # if /usr/share/libtool/config/config.guess does not supply a valid # build type, specify it here. THIS IS A WORKAROUND. Use with caution. # BUILD=x86_64-unknown-linux-gnu # # # set the flavour of neutrino you want to build # "neutrino-hd": use git://gitorious.org/neutrino-hd/neutrino-hd-experimental.git # "neutrino-hd-tripledragon": use git://gitorious.org/neutrino-hd/neutrino-hd-tripledragon.git # empty: choose one of the above depending on PLATFORM FLAVOUR=neutrino-hd # # configure the directory where "make dist-pkgs" # PKG_DEST_DIR = /srv/www/dist/$(PLATFORM) # # the name used to replace "@MAINT@" in the opkg control files # defaults to your name from the passwd GECOS field # MAINTAINER = "<dein Name>"
Buildsystem vorbereiten
Die Quellen des Buildsystems, die benötigen Archivordner und Konfiguration sollten nun stehen. Jetzt fehlen noch die Vorbereitungen, um richtig loszulegen. Die kann das Buildsystem nun mittels Targets jetzt selbst erledigen.
Welche Make-Targets gibt es?
Einen kleinen Überblick über verfügbare Make-Targets gibt dieses Kommando:
you@machine:~/coolstream/buildsystem-cs> make help
bei wittinobi's System:
you@machine:~/coolstream/buildsystem-cs> make printenv
Quellen holen
Nun dieses Kommando ausführen:
you@machine:~/coolstream/buildsystem-cs> make preqs
bei wittinobi's System:
you@machine:~/coolstream/buildsystem-cs> make prerequisites
Jetzt werden alle weiteren Quellen geholt.
Optionale Quellen einbinden
Dies kann nützlich sein, wenn man mehr als nur die originalen Neutrino-HD-Quellen nutzen will und neuere Entwicklungen verfolgen möchte.
Falls gewünscht, die tuxbox-port Quellen holen (aktuell nur in tijucas-buildsystem-cs!). Das betreffende Repository wird in die bereits bestehenden Sourcen eingebunden und auf den Branch umgeschaltet
you@machine:~/coolstream/buildsystem-cs> make switch-novatux
ansonsten kann man auch mit
you@machine:~/coolstream/buildsystem-cs> make switch-master
wieder zurückschalten.
Wie man mit Git innerhalb der Neutrino-HD-Quellen, weitere Funktionen nutzen kann, wird später beschrieben.
Toolchain bauen
Beim Bauen der Crosstoolumgebung könnte es evtl. Probleme mit LD_LIBRARY_PATH geben
...Don't set LD_LIBRARY_PATH. It screws up the build.
Dieses Kommando behebt das Problem und kann vorsorglich ausgeführt werden.
you@machine:~/coolstream/buildsystem-cs> unset LD_LIBRARY_PATH
you@machine:~/coolstream/buildsystem-cs> make crosstool
Das dauert jetzt natürlich eine Weile, aber muss auch nur einmal gemacht werden. Alternativ kann man auch ein bereits vorhandenes Crosstool verwenden. Hierfür muss in der config der Ordner angegeben werden wo sich das Crosstool befindet Dazu diesen Eintrag anpassen:
CROSS_DIR=$HOME/<dein Verzeichnis zum Croostoool>
Neutrino-HD bauen
you@machine:~/coolstream/buildsystem-cs> make bootstrap you@machine:~/coolstream/buildsystem-cs> make neutrino
Das dauert natürlich auch wieder etwas, aber am Schluß sollte alles Relevante gebaut worden sein und unter
$HOME/coolstream/buildsystem-cs/root/
zu finden sein. Achtung! Dies an sich reicht noch nicht aus um ein komplettes Filesystem zusammen bauen zu können!
Neutrino-HD Quellen updaten und neu bauen
Wenn man die Buildumgebung neu erstellt wird automatisch die aktuelle Version von Neutrino-HD aus dem Git Repo geholt. Will man aber nach ein paar Tagen z.B. Neutrino-HD neu bauen, muss man natürlich die Neutrino-HD Quellen updaten, da die Entwicklung von Neutrino-HD schließlich voran schreitet.
you@machine:~/coolstream/buildsystem-cs> make update-neutrino
Damit werden nur die aktuellsten Sourcen für Neutrino-HD aus dem jeweiligen Git Repo geholt.
Coolstream Library updaten
Da sich von Zeit zu Zeit auch die Coolstream-Library libcoolstream.so
ändert, sollte man vor dem erneuten Bau von Neutrino-HD diese zuerst auf den neuesten Stand bringen damit beim Bauen später keine Probleme auftreten können. Eine veraltete Version von libcoolstream.so
kann trotz erfolgreicher Kompilierung zu gravierenden Laufzeitfehlern (Abstürze etc.) führen und die erzeugeten Binaries im schlimmsten Fall unbrauchbar machen!
Hierfür diese Targets ausführen:
you@machine:~/coolstream/buildsystem-cs> make update-svn
Und dann diese Librarys ins Buildsystem einpflegen lassen.
you@machine:~/coolstream/buildsystem-cs> make update-svn-target
Nun das selbe für eventuell benötigte Header von Coolstream durchführen, den Makeaufruf kennt man schon vom erstmaligen Bauen von Neutrino-HD. Anschliesend kann der Bau angestoßen werden.
you@machine:~/coolstream/buildsystem-cs> make bootstrap you@machine:~/coolstream/buildsystem-cs> make neutrino
Man kann diese Makeaufrufe auch alle kombinieren (aber dann in genau dieser Reihenfolge!). Man könnte unten aufgeführte beide Aufrufe auch zu einem zusammen fassen, dies macht dann aber eine Problemsuche unter Umständen schwieriger!
you@machine:~/coolstream/buildsystem-cs> make update-neutrino update-svn update-svn-target you@machine:~/coolstream/buildsystem-cs> make bootstrap neutrino
Weitere Pakete bauen
you@machine:~/coolstream/buildsystem-cs> make minimal-system-pkgs you@machine:~/coolstream/buildsystem-cs> make neutrino-pkg you@machine:~/coolstream/buildsystem-cs> make cs-libs-pkg
Wenn man in der Konfiguration PKG_DEST_DIR angegeben hat, kann man mit
make dist-pkgs make pkg-index
die erstellten Opkg-Pakete veröffentlichen und den Paketindex aktualisieren. Hat man dann Opkg auf der Coolstream, aktualisiert man sein System mit
opkg-cl update opkg-cl upgrade
Extras kompilieren
Beispiel: wie man sich den Midnight Commander baut
make mc make pkg-index make dist-pkgs
Weblinks
- Gitorious Buildsystem Quellen
- aktuelle Readme's zu Seifes Buildsystem
- aktuelle Readme's zu tijucas Buildsystem
- Wittinobis Buildsystem
- Coolstream SVN
- SourceForge Quellen für Neutrino-HD im Tuxbox-Port
- dbox2world.net Board zum Thema Seifes Buildsystem
- dbox2world.net Board zum Thema Wittinobis Buildsystem
- Neutrino-HD im Tuxbox-Board
- Git Ready deutsch