Source unter 64Bit-System compilen [Cross-Compilen]

  • Heyo,


    da ich das folgende HowTo noch in keinem M2Board gefunden habe, hier eine Anleitung wie ihr auf einem 64Bit FreeBSD den Source als 32bit Binary (unter 32bit & 64bit laufbar) compilen könnt, auch Cross-compiling genannt. Hier zu nutze ich im folgendem HowTo einen 32Bit Jail / Chroot.


    Getestet hab ich das ganze bis jetzt unter FreeBSD 10.3 (hier musste ich den include Ordner vom System in den Jail kopieren, mehr dazu später) und unter 9.3/9.2, selbstverständlich überall 64Bit Version.


    0. Wichtiges

    0.1 Da ich im folgenden wget nutze müssen wir dieses erst einmal "installieren":
    pkg install wget


    1. 32Bit Jail / Chroot compilen + erstellen


    1.1 FreeBSD Source downloaden
    wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/9.3-RELEASE/src.txz


    1.2 FreeBSD Source entpacken
    tar -C / -xvzf src.txz


    1.3 Ordner für den Chroot erstellen
    mkdir /usr/x86/


    1.4 FreeBSD Source compilen [Dies dauert seine Zeit, je nach Root kann dies schon mal einige Stündchen dauern]
    cd /usr/src
    make TARGET_ARCH=i386 buildworld


    1.4 FreeBSD Chroot "erstellen"
    make TARGET_ARCH=i386 DESTDIR=/usr/x86 installworld


    1.5 Filesystem erstellen. [Der erste Befehl darf fehlschlagen, sollte der Ordner bereits existieren]
    mkdir /usr/x86/proc
    mount -t procfs proc /usr/x86/proc


    1.6 Einige Ordner mit in den Jail mounten
    mkdir -p /usr/x86/usr/ports
    mkdir -p /usr/x86/usr/local/include
    mount -t nullfs /usr/ports /usr/x86/usr/ports
    mount -t nullfs /usr/local/include /usr/x86/usr/local/include


    Bei FreeBSD 11 (danke an Sanii):
    mount -t nullfs /etc /usr/x86/etc


    2. Im Jail / Chroot die benötigten Packages installieren


    2.1 In den Jail / Chroot gehen:
    chroot /usr/x86


    2.2 Nameserver eintragen:
    ee /etc/resolv.conf


    Im Editor folgendes einfügen:
    nameserver 8.8.8.8


    Speichern: ESC -> Enter -> Enter


    2.3 pkg installieren:
    pkg


    2.4 Da ich teils das Problem hatte dass man mit pkg keine Packages gefunden hat:
    setenv PACKAGESITE http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/i386/packages-9.2-release/Latest/


    2.5 Packages installieren:


    Solltet ihr gcc49 für euren Source benötigen müsst ihr natürlich gcc49 installieren statt gcc48!


    pkg_add -r gcc48
    pkg_add -r gmake
    pkg_add -r makedepend
    pkg_add -r devil


    optional:
    pkg_add -r subversion
    pkg_add -r boost-all


    2.6 Den Jail verlassen:
    exit


    2.7 Solltet ihr FreeBSD 10.3 haben war bei mir folgender Befehl notwendig:
    cp -r /usr/include/ /usr/x86/usr/include


    An für sich war es das auch schon.
    Ihr könnt nun euren Source in /usr/x86 hochladen und im Jail compilen.


    Wichtig: Der Jail kennt /usr/x86 nicht, da das sein "/" Verzeichnis ist.
    Sollte euer Source also in


    /usr/x86/workspace


    sein, ist das im Jail nur:


    /workspace


    Zum Compilen einfach in den Jail gehen:
    chroot /usr/x86


    Und wie immer compilen (beispielsweise):
    cd /workspace/game/src
    gmake clean
    gmake -j4


    Danach müsst ihr den Jail natürlich auch wieder verlassen mit:
    exit


    Zum Schluss möchte ich noch anmerken dass Vieles hiervon natürlich nicht von mir ist. Wie man einen Chroot erstellt wird in Google oft genug erklärt, daher hier auch meine Quelle dazu:
    https://filipenf.wordpress.com…or-x86-in-freebsd-64-bit/


    Ja mir ist auch bewusst dass ich die FreeBSD 9.2 Packages nutze, dies funktioniert auch problemlos. Ich hatte nur auf die schnelle den 9.3 Link nicht mehr gefunden.


    Falls es hier jemand gebrauchen kann: Viel Spaß & Erfolg.
    Ich persönlich nutze es nur zu gerne, da ich persönlich finde dass ein extra Root nur zum Compilen Schwachsinn ist und man genauso auf seinem Aufbau-/Testroot compilen kann.

    Einmal editiert, zuletzt von Samagon ()

  • Dieses Thema enthält 15 weitere Beiträge die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.