Neutrino-MP Entwicklungsumgebung

Aus TuxBoxWIKI
Wechseln zu: Navigation, Suche


Review-KandidatDieser Artikel befindet sich derzeit im Reviewprozess. Hilf mit, ihn zu verbessern! Falls du bei weiteren Artikeln helfen willst, findest du hier eine Auswahl offener Artikel.

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.

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


Stop hand.png HINWEIS:

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/bash
In 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 immer darauf hingewiesen wird, für welches System gewisse Details zutreffen oder auch nicht.

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


Stop hand.png HINWEIS:

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


Stop hand.png HINWEIS:

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


Stop hand.png HINWEIS:

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