.titleBar { margin-bottom: 5px!important; }

Wie crosscompiler verwenden (statisches openvpn binary erstellen)

Dieses Thema im Forum "Freetz" wurde erstellt von anonymus, 16 Okt. 2011.

  1. anonymus

    anonymus Neuer User

    Registriert seit:
    31 Dez. 2006
    Beiträge:
    2
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo liebes Forum,

    vielleicht könnt ihr mir helfen, ein statisch gelinktes openvpn Binary für meine
    Fritzbox (7320 = 1&1 Homeserver) zu kompilieren.
    Bisher hatte ich eine alte Fritzbox mit 2.4er Kernel. Irgendwo im Internet hatte
    ich ein CD-Image gefunden (ScratchboxMultiCpu-2.3.iso, Link weiß ich leider nicht mehr),
    welches ein Linux gestartet hat. Darin war eine Toolchain enthalten, mit der ich Programme (z. B. openssl, lzo, openvpn)
    für die Box kompilieren konnte. Das gab ein statisches Binary und lief direkt ohne Firmwaremodifikationen
    (Kommandozeilenaufrufe siehe unten).

    Mit der neuen Box läuft das natürlich nicht mehr, bisher sind all meine Versuche gescheitert:

    1) http://www.wehavemorefun.de/fritzbox/index.php/Cross-Compile_Toolchain
    Ergebnis: ich kann ein statische "hello world" programm kompilieren welches auf der FB läuft.
    Aufgrund unzureichender Linuxkenntnisse weiß ich jetzt aber nicht, wie ich das "configure" für
    die o. g. Programme aufrufen soll, damit dieser Crosscompiler verwendet wird.

    2) Habe es analog zu http://www.ip-phone-forum.de/showthread.php?t=217453&page=1 versucht
    Ergebnis: hat nicht funktioniert (Fehler war glaube ich, dass kein Compiler gefunden wurde)

    3) http://freetz.org/wiki/help/howtos/development/compile_own_progs#EigeneProgrammekompilieren
    Das klingt eigentlich vielversprechend, als ich openvpn kompilieren wollte,
    gab es einen Fehler, irgendwas mit ungültige Konfiguration.
    Hier steht auch noch was: http://freetz.org/wiki/help/howtos/...er_toolchain#Cross-CompilerToolchainerstellen
    allerdings finde ich die angegebenen Menüs nicht in meinem Freetz (freetz-stable-1.2)

    Mir würde es schon helfen, wenn ich wüsste, welchen der Punkte ich weiterverfolgen muss.
    1) scheint vielversprechend, da schon mal was lauffähiges rausgekommen ist
    2+3) sind allerdings ähnlich zu den aufrufen unter "Scratchbox"


    Danke und viele Grüße,
    Martin

    PS: bisher habe ich mein openvpn für die alte Box so erstellt:

    openssl:
    ./config
    make
    make install

    lzo:
    LDFLAGS=-static ./configure --build=i386-linux-gnu --host=mipsel-linux-uclibc --target=mipsel-linux-uclibc
    make
    make install

    openvpn:
    sslLib=/usr/local/ssl/lib
    sslInc=/usr/local/ssl/include
    lzoLib=/usr/local/lib
    lzoInc=/usr/local/include
    LDFLAGS=-static ./configure --build=i386-linux-gnu --host=mipsel-linux-uclibc --target=mipsel-linux-uclibc --with-ssl-headers=$sslInc --with-ssl-lib=$sslLib --with-lzo-headers=$lzoInc --with-lzo-lib=$lzoLib
    make

    => Fertig war mein schönes openvpn-Binary, lauffähig ohne FB-Modifikationen
     
  2. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn Du hier schon bei Freetz fragst, kannst Du natürlich auch Freetz verwenden, um OpenVPN zu erstellen, und es auch auf der original Firmware laufen lassen.

    Wenn es den Fehler "irgendwas mit ungültige Konfiguration" und nichts konkreteres gab, dann ist das Problem wohl nicht wichtig genug.
     
  3. anonymus

    anonymus Neuer User

    Registriert seit:
    31 Dez. 2006
    Beiträge:
    2
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    hab deine Anmerkung zu Punkt 3 mal als "Wink mit dem Zaunpfahl" aufgefasst.
    Habe jetzt ein lauffähiges Binary (zumindest kann ich es auf der FB starten
    und es erscheint die normale openvpn-Hilfeausgabe)

    Falls es interessiert (freetz-stable-1.2):
    make menuconfig
    ->Advanced options->Shared libraries->Crypto & SSL->OpenSSL cryptographic library
    ->Advanced options->Shared libraries->Crypto & SSL->OpenSSL SSL/TLS library
    ->Advanced options->Shared libraries->Data compression-> LZO
    ->Advanced options->Shared libraries->Data compression-> Zlib
    make

    dann Opvenvpn runterladen und entpacken
    Erstellen mit
    export PATH=/home/freetz/freetz-stable-1.2/toolchain/target/bin:$PATH
    LDFLAGS=-static ./configure --build=i386-linux-gnu --target=mips-linux --host=mips-linux # mips, nicht mipsel!!
    make

    => jetzt gibt's eine Date "openvpn", die kann man auf die FB kopieren

    FRAGE:
    wie kann ich LZO selber übersetzen?
    Wenn ich den configure-Aufruf oben auf LZO loslasse funktioniert das noch, aber bei "make" gibt es einen Linkerfehler: In function '_lzo_config_check': .../lzo-2.06/src/lzo_init.c:113: undefined reference to '__clzsi2'
    Was fehlt mir hier? Scheint irgendwas vom compiler zu sein (https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/clzsi2.c)
     
  4. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Du solltest die CFLAGS verwenden, die Freetz auch verwendet. Bei der 7320 kannst Du -march=24kc verwenden, -march=4kc sollte mit allen Boxen funktionieren.

    Das mips ohne el hast Du schon verwendet, als Du das "hello world" Programm erstellt hast, sonst wäre es nicht auf der Box gelaufen.
     
  5. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Moin, wenn du sowieso freetz verwendest, ist die "simpel-Methode", ein statisches Binary zu bekommen:
    Wähle das Paket "OpenVPN", je nach Bedarf mit oder ohne lzo (das wählt dann automatisch SSL und bei Bedarf LZO), und wähle auch "statisches Linken" (oder "static Binary", weiß ich gerade nicht).
    Nach einem "make openvpn-precompiled" findest du das fertige und komplette Binary als "packages/target<deine HW unduclib>/openvpn-<Version>/root/usr/sbin/openvpn".