Wie OpenSouce patches in cdk kompilieren

  • Hi Leute,


    Ich versuche seit Tagen vergebens apache und php für die DB7000
    zu kompilieren. Ich kenn mich im CDK noch nicht so gut aus.
    Obwohl ich es im CDK Makefile.am integriert habe bekomme ich trotz
    ppc Settings, I686 - kompilierte bins.


    mit selberscript bleibt es hängen - gar keine keine bins.


    Hat von euch schon jemand etwas ähnliches geschaft?


    Makefile.am/configure usw....


    Würde mich freuen wenn wer gute Tipps hätte, denn im web habe ich nur


    Bsp. für enigma-plugins gefunden.


    Danke schon mal.


    Gruß Emanuel

  • Warum im cdk bauen?


    Du kannst das auch außerhalb vom cdk machen. So habe ich mir z.B. einen Compiler + komplette Entwicklungsumgebung für die Dreambox gebaut -> läuft auf der Dreambox.


    Zeig doch mal deine configure, die du erstellt hast.
    Vorweg wird nicht alles so einfach auf einer Crossumgebung zu bauen sein. Perl habe ich auf diese Weise nicht hinbekommen. Ich habe das dann komplett auf der Dream gebaut. Ist auch ein Grund für die Entwicklungsumgebung auf der Box gewesen. Wie es mit php aussieht.. keine Ahnung, einige Packete wirst du aber ohne leichte Patches nicht so einfach compiliert bekommen.


    Die Basis ist eigentlich immer.
    ./configure --build=i686-pc-linux-gnu --host=powerpc-tuxbox-linux-gnu
    bzw.
    ./configure --build=i686-pc-linux-gnu --host=powerpc-tuxbox-linux-gnu --target=powerpc-tuxbox-linux-gnu


    Build bezeichnet dabei dein Buildsystem, hier i686-pc-linux-gnu und Host dein Gastsystem, das den Crosscompiler enthält. Target wäre hierbei das Zielsystem, auf dem die Binaries laufen sollen. Da Target und Host aber die gleichen Systeme sind, braucht man Target nicht mit anzugeben. Manche configure Scripts versagen auch bei der Angabe des Targets, deswegen sollte Variante 1 reichen. Target und Host können auch verschieden sein, dann nennt sich das ganze Canadian Crosscompile, das nur nebenbei. ;)



    Dann setzt du noch ein paar CFLAGS beim Maken bzw. in der configure.
    Also


    CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s"
    CXXFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s"



    Diese CFLAGS habe ich aus dem Makefile meiner Crossumgebung im Rootverzeichnis.
    Einfach mal öffnen und nach TARGET_CFLAGS suchen. Die Optionen -g oder ggdb3 kannst "mußt du" weglassen, sonnst hast du Debuginfos drinn und die Files werden riesig. Die Options "-s" sorgt für das Strippen (entfernen unnötiger Infos mal einfach ausgedrückt) der Binaries auf ein Minimum der Größe. Wenn "-s" nicht funktioniert mal in die Manpage von gcc schauen, stehe da gerade etwas auf dem Schlauch. Ich habe das ganze immer zum Schluß per Hand gestrippt.

    Das ganze sieht dann grob in etwa so aus:
    1. Entpacke die Sourcen in irgend einen Pfad deines Home Verzeichnisses
    2. Exportiere die PATH Variable, so daß dein Crosscompiler gefunden wird.
    Befindet sich dein powerpc-tuxbox-linux-gnu-gcc also in /root/cdk/bin dann wie folgt:

    Code
    1. export PATH=/root/cdk/bin:$PATH


    3. Öffne die Konsole, wenn nicht schon getan, cd in das Verzeichnis der ausgepackten Sourcen, und tippe erstmal ./configure --help für die Übersicht evtl. nötiger Optionen.
    4. Erstelle das Makefile

    Code
    1. CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s" CXXLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s" ./configure --prefix=your_path --build=i686-pc-linux-gnu --host=powerpc-tuxbox-linux-gnu your_options...


    5. Dann kannst du mit make das Packet bauen. Sollten deine gesetzten CFLAGS hier ignoriet worden sein. Kannst du diese auch alternativ beim Maken adden.
    Also:

    Code
    1. make CFLAGS+="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s" CXXLAGS+="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s"


    6. Installiere das Packet in deinen gewünschten Pfad, der bei configure mit --prefix angegeben wurde.

    Code
    1. make install


    7. Alternativ Binaries noch strippen



    cheers ;)

  • Was noch wichtiges zu erwähnen wäre!


    Du wirst php sicherlich dynamisch gelinkt bauen. Das sollte auch normalerweise der richtige Weg sein, sofern alle libs auf dem Zeilsystem vorhanden sind.
    Das ist "leider" bei den Dreamboximages nicht so. Die libs sind zwar meist vorhanden, aber selten vollständig vom Funktionsumfang her dank "mklibs.py".


    Du wirst evtl. das Problem haben, das dein php nicht so ohne weiteres auf der Box laufen wird, wegen fehlender aufgelöster Abhängigkeiten.



    Was nun tun.
    Es gibt 4 Möglichkeiten.


    1. Du packst dein php + stuff mit ins cdkflash in deine Entwicklungsumgebung und baust auf dieser Basis ein Image selbts. Dann läuft php auch problemlos allerdings ist die Kompatibilität zu anderen Images nicht gegeben.


    2. Du baust php statisch (setze zu den FLAGS ' LDFLAG="-static" ' beim compilieren). Das hat wiederum den Nachteil, dass alle libs (glibc etc.) statisch mit ins binary gelinkt werden und das Tool recht groß wird, mitunter sogar an Performance im Betrieb verliert.


    3. Du lässt deinen php/Apache Server in einer chroot Umgebung laufen. Dann kannst du alle benötigten vollständigen libs mit dorthin liefern und unabhängig von den libs im Image deinen Apache & php in chroot betreiben. Diese Variante scheint mir angesichts von php und Apache hier am sinnvollsten zu sein. Du wirst die eingerichteten Apps ja nicht permanent hin und her portieren. Welche libs du benötigst sagt dir ein /lib/ld.so.1 --list dein_tool auf der Dreambox.


    4. Du tauschst die libs in dem Image gegen deine eigenen. Allerdings bin ich davon kein Fan, denn ins Image gehören die libs, die auch zum Bauen des Images verwendet wurden. Da weicht ja doch das ein oder andere zwischen den CVS ab.


    Bonusvariante -> Werbung in eigener Sache. ;)


    Ich habe auf h**p://imageonhd.info eine komplette Enticklungsumgebung (xdevels) bereitgestellt. Diese agiert als Linuxdistri und kann von jedem beliebigem Image aus als chroot Umgebung betreten werden. Du kannst dort quasi alles laufen lassen, was auf einer waschechten Linuxdistri auch funzt (begrenzt natürlich durch die Hardware der Dream). Die Basis dazu ist geschaffen. Die Umgebung verfügt so z.B. über den GNU Compiler C/C++, Binutils, Perl, Phyton, make und was alles noch benötigt wird. Sollte also auch dein php builden in der Cross Environment versagen, kannst du versuchen es direkt auf der Dreambox zu bauen. Das Forum dort würde auch etwas mehr Aktivität begrüßen.


    cheers ;)

  • Ja kallekit,


    jetzt probiere ich mal Dein Entwicklerpaket für die Dream.


    das env:
    -------------------------------------------------------------------------------------------------------------------------
    #! /bin/sh


    PATH=${PATH}:/home/emanuel/dreambox-cvs/root/cdk/bin
    CROSS=/home/emanuel/dreambox-cvs/root/cdk/bin/
    export CC=${CROSS}powerpc-tuxbox-linux-gnu-gcc
    export CXX=${CROSS}powerpc-tuxbox-linux-gnu-g++
    export AR=${CROSS}powerpc-tuxbox-linux-gnu-ar
    export RANLIB=${CROSS}powerpc-tuxbox-linux-gnu-ranlib
    export LD=${CROSS}powerpc-tuxbox-linux-gnu-ld
    export STRIP=${CROSS}powerpc-tuxbox-linux-gnu-strip
    export NM=${CROSS}powerpc-tuxbox-linux-gnu-nm
    export PATH=$PATH
    export CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s"
    export CXXLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os -s"
    -------------------------------------------------------------------------------------------------------------------------
    das scr:
    -------------------------------------------------------------------------------------------------------------------------
    #! /bin/sh


    ./configure --prefix=/hdd/php/usr
    --build=i686-pc-linux-gnu
    --host=powerpc-tuxbox-linux-gnu
    --exec-prefix=/hdd/php/usr
    --with-config-file=/home/emanuel/dreambox-cvs/cdk/apache_1.3.37/conf
    --with-apache=/home/emanuel/dreambox-cvs/cdk/apache_1.3.37
    --with-config-file-path=/hdd
    -------------------------------------------------------------------------------------------------------------------------
    Canadakompilieren hat nicht geklappt.
    Erst ist im Makefile von php ein if gcc im
    System nimmt das als erstbestes. Hab ich dann stillgelegt, daß es mein CC
    nimmt.


    $CC -o test a.c war OK auch mit CFLAGS (405 ...)
    file testwar auch OK (405er bin)


    Dann hat es den PowerPC genommen, aber dann gab es da noch
    7 Stellen in configure if crosscompiling=yes echo blabla... exit 1
    und der Rest von configure --prefix usw. wurde als Fehler zurückgegeben.


    Naja und weiter gez...


    Gruß Emanuel

  • Quote

    Ja kallekit,

    jetzt probiere ich mal Dein Entwicklerpaket für die Dream.


    Hab dich schon gerade als neuen User vernommen. ;)



    Zu deinem Script


    Das könnt vielleicht etwas zu viel des guten sein.
    Folgendes, wenn du den Pfad deines Crosscompilers exportiert hast, mußt du beim exportieren der binutils und des Compilers nicht extra den Pfad mit angeben. "configure" sucht automatisch in allen Verzeichnissen der Pfadvariable nach dem richtigen Tool, deswegen setzt man auch das Verzeichnis beim exportieren an die erste Stelle. Weiterhin werden deine exportierten CFLAGS vom configure Script bzw. spätestens beim Maken vom Makefile und make wieder überschrieben, es bringt hier also wenig.
    Besser wäre alles in einem Script:


    Mußt nur mal schauen, wie sich das mit den Backslash am Zeilenende mit der Shell macht. Bei einem Makefile kein Problem, aber hier weiß ich es nicht 100%. Für solche Sachen ziehe ich deswegen immer ein eigenes Makefile dem Shellscript vor.


    cheers ;)

  • Leider läuft das Developerimage bei mir nicht,
    Ich hab G..i-DM7000 (2.6.9) im flash,


    1. Versuch mit Flashw63 auf hdd:
    Melldung Files nicht OK /... /... /..........


    2. Versuch nach löschen/reboot auf usb:
    Flashw. install+Kiste hängt.


    3. das gleiche wieder


    schade. So einfach mit dem neuen CVS updaten ist
    bei Deinem Image wohl eher Essig.


    Ich test mal noch das script.


    Danke Emanuel

  • NeNe du mußt auch nicht das Image installieren. Ich habe ein extra Howto reingestellt, womit du die Packete auf die Festplatte entpackst und dann von deinem Image (egal welches) via telnet aus in chroot betrittst. Danach ist der Rest wie immer.


    Schau mal hier

  • Hi krallekit,


    ${MEINE_VARIABLE} - zu später Stunde


    Ja das Script ist jetzt schöner, ich habe da gar keine Erfahrung.


    Nur ~10 Seiten aus Mama's Linuxbuch


    Aber ich hänge jetzt wieder :( da und da gib's 7 davon im Makefile:
    (Exit 1 - Da trau ich mich kaum ran)


    ....
    configure: error: can not run test program while cross compiling
    make: *** Keine Targets angegeben und keine »make«-Steuerdatei gefunden. Schluss.
    emanuel@falcon:~/php-4.4.6>


    Vieleicht kannst Du mal einen Blick drauf werfen


    eingefügt: Ich schau mal nach Deinem Hier!


    Also Gruß von Emanuel

  • Quote

    configure: error: can not run test program while cross compiling
    make: *** Keine Targets angegeben und keine »make«-Steuerdatei gefunden. Schluss.
    emanuel@falcon:~/php-4.4.6>


    Jaja, genau das meinte ich mit Patchen der Sourcen oder files. Ich finde es immer lustig, das für das Maken von Sourcen die Option des Crosscompilens angeboten wird, dies aber im späteren configure Verlauf an solchen Sachen wie "can not run test programm" scheitert. Dann soll die Option doch ganz weggelassen werden. ;)


    Du benötigst im einfachsten Fall eine config.cache dafür. Diese müßte ich dir mal für php auf meiner Box erstellen, das wäre das einfachste. Dort stehen ein paar systemspezifische Variablen drin, die fürs Bauen benötigt werden.


    Vielleicht schaue ich mir auch mal php an, hast du einen Link zu den Sourcen?


    cheers ;)

  • Super Tool!!


    Mein Box hat kein alias Bzip2 -d -> Bunzip2


    Dann halt mit Bunzip2 -c ... geht genauso


    und:
    Freude++ =) =) =) gcc in der Box, der Hammer!!!
    ---------------------------------------------------
    Dreambox7000:
    ---------------------------------------------------
    (chroot) / >gcc -o kralletest.ppc a.c
    (chroot) / >./kralletest.ppc


    Hallo krallekit++ :-)
    (chroot) / >
    ---------------------------------------------------
    Gruß Emanuel

  • krallekit


    Apache & Php:
    z.B. die Server:


    rules-archive:
    php-4.4.6.tar.gz;h :D :Dp://de.php.net/distributions
    apache_1.3.37.tar.gz;h :D :Dp://archive.apache.org/dist/httpd


    Da gibt es auch apache2(httpd2...) &php-5...


    Ich habe php4 mal auf der Dream probiert, configure lief aber nicht
    durch, ist ohne Fehlermeldung abgebrochen,bei apache1 auch.


    Du kannst es ja mal bei Dir testen


    :D Gruß Emanuel

  • Quote

    Ich habe php4 mal auf der Dream probiert, configure lief aber nicht
    durch, ist ohne Fehlermeldung abgebrochen,bei apache1 auch.


    Was heißt abgebrochen?


    Auf der Dreambox dauert bei der configure Prozedur beispielesweise das Suchen nach der Maximalanzahl der Zeichen sehr lange, manchmal bis zu 5 Minuten. Dort bleibt configure dann so lange stehen.
    Achso hast du auch swap aktiviert? Ist auf der Dreambox eigentlich ein Muß beim compilieren größerer Packete.


    Ich schau mir das bei Gelegenheit mal an und schicke dir auch ne config.cache damit die configure schneller durchläuft. Momentan bin ich sehr beschäftigt mit einem arm-elf Prozessor, da will setjmp() nicht so richtig funzen. Brauche ich für die msh schell.


    cheers ;)

  • Hi krallekit,


    Swap 512MB


    da war dann Schluß:


    configure:


    kam ohne Zeilenumbruch:
    (chroot) /php-4.4.6 >


    Hast du meine Emailadresse?


    Gruß Emanuel

  • Also ich hab dann mal php und apache auf der Box gebaut. Es fehlt noch ein Tool namens flex, welches nicht in der Toolchain enthalten ist. Das ist der Grund, warum beim php builden configure abgebrochen ist.


    Hat übrigens alles ohne patchen funktioniert, ich habe es aber noch nicht getestet. Die Builds liefen aber feherfrei durch.


    Zu erst packe alle Packete auf die Festplatte nach /hdd
    Deine beiden Packete, sowie flex was du hier bekommst.


    Telnet auf deine Box und betrete mit "env-chroot" deine Entwicklungsumgebung.


    Erstelle flex:

    Code
    1. gzip -dc flex-2.5.33.tar.gz|tar -x
    2. cd flex-2.5.33
    3. CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" CXXFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" ./configure --build=powerpc-tuxbox-linux-gnu --prefix=/usr --with-gnu-ld --disable-nls --disable-rpath
    4. make
    5. strip -s flex
    6. strip -g libfl.a
    7. make install


    Erstelle Apache:

    Code
    1. CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" CXXFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" ./configure --build=powerpc-tuxbox-linux-gnu --prefix=/hdd/server/apache
    2. make
    3. make install
    4. strip -s /hdd/server/apache/bin/*


    Die Apache Header werden bei der php Configure irgendwie im falschen Pfad gesucht. Deshalb linken wir das Verzeichnis hier.

    Code
    1. mkdir -p /hdd/server/apache/src
    2. ln -s /hdd/server/apache/include /hdd/server/apache/src/include


    Apache lässt sich zunächst nicht starten, da ein User Nobody fehlt. Mußt du mal schauen, ob du den erstellen kannst, andernfalls evtl. die Sourcen Patchen oder eine Möglichkeit in der configure nutzen. It's your job. ;)
    Vergesse auch nicht den Port 80 auf z.B. 8080 in der httpd.conf zu setzen. Port 80 wird ja schon vom Webif besetzt.


    Erstelle php:

    Code
    1. cd /hdd
    2. gzip -dc php-4.4.6.tar.gz|tar -x
    3. cd php-4.4.6
    4. CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" CXXFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" ./configure --build=powerpc-tuxbox-linux-gnu --prefix=/hdd/server --exec-prefix=/hdd/server --with-apache=/hdd/server/apache --with-config-file-path=/hdd --with-gnu-ld --disable-rpath
    5. make
    6. make install


    So das wars von meiner Seite. Du kannst ja mal über deine Tests berichten.


    cheers ;)

  • Hi krallekit,


    Weiß nicht wieso, aber beim apache hängt es:

    Quote

    (chroot) /hdd/apache_1.3.37 >CFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" CXXFLAGS="-mcpu=405 -msoft-float -mmultiple -mstring -meabi -pipe -Os" ./configure --build=powerpc-tuxbox-linux-gnu --prefix=/hdd/server/apache
    Configuring for Apache, Version 1.3.37
    + using installation path layout: Apache (config.layout)
    (chroot) /hdd/apache_1.3.37 >


    flex läuft


    Test : Steigt auch alleine mit --build=powerpc-tuxbox-linux-gnu aus.
    Test: nur ./configure läuft durch.


    Gruß Emanuel

  • Mhh schon sehr komisch. Du hast aber alles in einer Line, also als ein Kommando ohne Zeilensprung auf der Konsole eingegeben, ja? Wenn nicht nochmal per Hand probieren. Bei mir lief es wirklich problemlos.


    Probiere dochmal einfach ein

    Code
    1. ./configure --prefix=/hdd/server/apache


    Was passiert dann?. Zur Not nochmal das ganze apache Verzeichnis löschen und neu entpacken.


    Poste mal deine Ausgabe von 'env' bitte.


    Vielleicht habe ich mittlerweile noch weitere Tools in der Entwicklungsumgebung installiert, das es bei mir funzt?
    Swap ist ja aktiviert sagtest du, also kann es daran nicht liegen.


    **grübel


    PS: Kann man php nicht auch ohne Apache builden. Ich finde apache persönlich etwas übertrieben für die Dream. Gibt doch noch andere kleine hhtp daemonen, die mit php umgehen können. Das genialste wäre natürlich PHP gleich ins Webif einzubinden, aber ich denke, das wird so ohne weiteres nicht funzen.


    cheers ;)

  • Hi,


    Der Teil der php configure ist Verzeichnis für apache scr!
    Wie Seite 1 hier im Forum.


    Das hier hab ich auch schon getestet mit apache nur configure vorher
    dann php so:


    --with-config-file=/hdd/apache_1.3.37/conf
    --with-apache=/hdd/apache_1.3.37


    aber das apache configure ist abgeschmiert, so sollte es eigenlich gehen!
    wegen dem Modul php4 das muß auch im apache eingestellt werden
    aber der apache läuft nicht mal mit ./configure ohne was durch.


    und im apache:


    --activate-module=src/modules/php4/libphp4.a


    Gruß Emanuel


    Überleg doch mal ob Du noch irgendwelche anderen tools oder libs drauf hast

  • Achso, sag mal hast du die Pfade auch so genutzt, wie ich es gepostet habe?
    Also auf Seite 2 hier im Thread. Ansonsten funzt das natürlich nicht. Als Mainverzeichnis habe ich /hdd/server genutzt. Dort findest du nach der Installation einen Ordner namens apache und die gnazen Tools von php in /bin etc..


    Das sollte zwar eigentlich nicht das grundlegenste Problem bei dem Abbruch deiner configure sein, aber auch ne Fehlerquelle.


    cheers ;)


    Ich weiß leider nicht mehr, welche libs und tools ich noch so am laufen haben, da ich die xdevels schon über 1 Jahr so nutze. Ich kann mir aber auch ehrlich gesagt nicht vorstellen, das hier Tools fehlen sollten, denn das würde das configure Script mit einer Fehlermeldung signalisieren. Bei dir bricht sie aber immer ohne ab.