Crosscompilieren von verschiedenen Libs

Verzweifelt

Neuer User
Mitglied seit
26 Feb 2007
Beiträge
77
Punkte für Reaktionen
0
Punkte
0
Hi

ich wollte mir esniper auf die box holen leider benötige ich dafür LibCURL und SSL. Beim versuch das ganze zu compilieren bricht der compiler ab da er die nötigen LIBS nicht finden kann (selbst wenn ich diese vorher compiliere)

könnt mir einer helfen?
 
Dazu bräuchten wir mehr Infos. Du weißt ja schonmal, dass du crosscompilen musst. Danach musst du die Libs in die Toolchain installieren.
Welchen Compiler benutzt du denn?

MfG Oliver
 
Ich nutze dafür fribolin (schön konfortabel ;) ) leider weis ich nicht wie ich die libs in die toolchain bekomme...
 
make DESTDIR="$(TARGET_TOOLCHAIN_DIR)" install

MfG Oliver
 
SSL Libs

Falls du openssl libs selber kompilieren und statisch linken willst, schau mal in diesen thread:
Apache SSL

Dort ist auch ein Skript zum Kompilieren von openssl für die Box enthalten.
 
Hallo Verzweifelt.

... alter Thread, ich weiß ... aber trotzdem ein aktuelles Thema.


Als "Machbarkeitsstudie/beweis" (für mich selbst) ...
... habe ich das Ganze mal auf nem Debian Etch (Debootstrap) aufgesetzt auf ner Fritzbox 7170. Es funktioniert auch, allerdings sind doch ressourcenhungrige Programme am Werk: HTTP Server, PHP, CURL, SSL. All das in einer chroot Umgebung ist dann doch zu langsam.

Bist Du beim Cross-Kompilieren schon weitergekommen?
... ich denke das könnte nativ performanter laufen als mein Kram.

Gruß
molfi
 
Probiers mal mit Freetz, da gibts die benötigten Libs und die werden automatisch kompiliert.
 
Hallo linuxkasten.

Ich habe mich ein wenig eingelesen in die Freetz development Dokumentation im Wiki und somit mein erstes Freetz-Paket geschnürt.

Folgende Schritte wurden durchgeführt:
Mittels make curl-precompiled wurden cURL und OpenSSL kompiliert und abgelegt.
Dann habe ich das makefile für das esniper Freetz Paket so modifiziert, dass die Bibliotheken statisch gelinkt werden (LDFLAGS=-static).
Ein make esniper-precompiled läuft einwandfrei und erzeugt ein nicht dynamisches Executable (ca 1,4 MB). (Dieses Problemchen vorher umschiffen)

Ich habs dann mal kurzerhand auf den USB Stick kopiert und die benötigten Zertifikate unter /usr/share/... gleich mit drauf kopiert und das Executable nach einem chmod +x gestartet. Es sieht auch soweit ganz gut aus:
Code:
/var/mod/bin # esniper
Error: no auctions specified.
usage: esniper [-bdhHnmPrUv] [-c conf_file] [-l logdir] [-p proxy] [-q quantity]
       [-s secs|now] [-u user] (auction_file | [auction price ...])

Try "esniper -h" for more help.

Please visit http://esniper.sf.net/ for updates and bug reports.  To learn
about updates to and major bugs in esniper, subscribe to the esniper mailing
list at http://lists.sf.net/lists/listinfo/esniper-announce

Ein richtiger Test (Login) endet jedoch mit folgender Meldung:
Code:
/var/mod/bin # ./esniper -m
Enter eBay username: test
Enter eBay password:

Auction 0: Cannot connect to URL tY: Error: error:0D0C50A1:lib(13):func(197):reason(161)

strace zeigt nichts Auffälliges (kann aber auch sein, dass ich es nicht richtig interpretiere).

Hier häng ich irgendwie fest. Hast Du evtl noch einen Tipp, woran das liegen könnte? ... Ich dachte, wenn ich statisch linke, befindet sich alles in der Datei.


Gruß
molfi
 

Anhänge

  • strace.txt
    10.5 KB · Aufrufe: 7
Zuletzt bearbeitet:
Das hab ich mit auf die Box gepackt.

Code:
/var/mod/bin # date
Sun Jan 31 00:47:25 CET 2010
/var/mod/bin # openssl errstr 0D0C50A1
error:0D0C50A1:lib(13):func(197):reason(161)

Unter /var/mod/bin existieren nun
Code:
/var/mod/bin # ls -la
drwxr-xr-x    2 root     root            0 Jan 31 00:27 .
drwxr-xr-x   11 root     root            0 Jan  1  2000 ..
-rwxr-xr-x    1 root     root      1762744 Jan 30 23:51 curl
-rwxr-xr-x    1 root     root      1423308 Jan 30 02:34 esniper
-rw-r--r--    1 root     root        10738 Jan 31 00:27 log
-rwxr-xr-x    1 root     root      1717320 Jan 29 23:52 openssl


ldd bringt
Code:
/var/mod/bin # ldd ./curl
        not a dynamic executable
/var/mod/bin # ldd ./esniper
        not a dynamic executable
/var/mod/bin # ldd ./openssl
        libdl.so.0 => /lib/libdl.so.0 (0x2aabe000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aad1000)
        libc.so.0 => /lib/libc.so.0 (0x2aaef000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

... was eigentlich in Ordnung sein sollte.
Ich versteh das irgendwie (noch) nicht.

Ich bin für jede Idee dankbar.

Gruß
molfi
 
/var/mod/bin # ldd ./openssl
libdl.so.0 => /lib/libdl.so.0 (0x2aabe000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aad1000)
libc.so.0 => /lib/libc.so.0 (0x2aaef000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)[/CODE]

... was eigentlich in Ordnung sein sollte.
Auf meinem nativen Linux hat openssl, als dynamic executable, noch zusätzliche Abhängigkeiten:
Code:
# ldd /usr/bin/openssl
        linux-vdso.so.1 =>  (0x00007fff067b8000)
        [COLOR="Red"]libssl[/COLOR].so.0.9.8 => /usr/lib64/libssl.so.0.9.8 (0x00007f890d50f000)
       [COLOR="Red"] libcrypto[/COLOR].so.0.9.8 => /usr/lib64/libcrypto.so.0.9.8 (0x00007f890d183000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f890ce28000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f890cc24000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f890ca0e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f890d75f000)
 
Hallo sf3978.

Ja, je nach System scheinen andere zusätzliche Abhängigkeiten zu existieren für openssl.

ldd für die dynamische binary von esniper auf der Fritzbox zeigt dies:
Code:
/var/mod/bin # ldd ./esniper
        libcurl.so.4 => not found
        libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0x2aabe000)
        libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x2aafc000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2abf1000)
        libc.so.0 => /lib/libc.so.0 (0x2ac0f000)
        libdl.so.0 => /lib/libdl.so.0 (0x2acc3000)
        ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

Ich würde jedoch gerne den statischen Weg gehen, um dem libssl und libcrypto Problem aus dem Weg zu gehen, zumindest scheint das dynamische esniper auch nicht mit den AVM eigenen Bibliotheken zusammenzuarbeiten.


Gruß
molfi
 
[...]
Ich würde jedoch gerne den statischen Weg gehen, um dem libssl und libcrypto Problem aus dem Weg zu gehen, [...]
OK, verstehe ich. Aber warum brauchst Du dann openssl als dynamic executable, auf der Box?
 
Ich würde jedoch gerne den statischen Weg gehen, um dem libssl und libcrypto Problem aus dem Weg zu gehen

Das hast Du aber bei esniper nicht getan, wie man an der Ausgabe von ldd feststellen kann.

Und openssl gibt oben auch nicht die Meldung im Klartext aus. Entweder sind da auch die Fehlermeldungen weggelassen, oder es liegt daran, daß die falsche Library verwendet wird.
 
Versuch mal mit dieser (siehe unten) "esniper.mk". Bei mir hat er durchkompiliert, ohne Fehlermeldung. Ob das binary funktioniert habe ich noch nicht getestet.
Code:
$(call PKG_INIT_BIN, 2-22-0)
$(PKG)_SOURCE:=esniper-$($(PKG)_VERSION).tgz
$(PKG)_SITE:=http://downloads.sourceforge.net/project/esniper/esniper/2.22.0
$(PKG)_BINARY:=$($(PKG)_DIR)/esniper
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/esniper
$(PKG)_SOURCE_MD5:=7cf2e28b1a1967146367a8599ef28fd9

$(PKG)_DEPENDS_ON := openssl curl
$(PKG)_LDFLAGS += -all-static
$(PKG)_LIBS := -lresolv -lcurl
$(PKG)_CONFIGURE_OPTIONS += --with-curl-config="$(TARGET_TOOLCHAIN_STAGING_DIR)"

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_CONFIGURE)

$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
	PATH="$(TARGET_PATH)" \
		$(MAKE) -C $(ESNIPER_DIR) \
		CC="$(TARGET_CC)" \
		LDFLAGS="$(TARGET_LDFLAGS) $(ESNIPER_LDFLAGS)" \
		LIBS="$(ESNIPER_LIBS)"

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
	$(INSTALL_BINARY_STRIP)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	-$(MAKE) -C $(ESNIPER_DIR) clean
	$(RM) $(ESNIPER_DIR)/.configured

$(pkg)-uninstall:
	$(RM) $(ESNIPER_TARGET_BINARY)

$(PKG_FINISH)

Code:
file packages/esniper-2-22-0/root/usr/bin/esniper
packages/esniper-2-22-0/root/usr/bin/esniper: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped

EDIT:
Mit den Dateien "*_static.txt" (siehe Anhang) kannst esniper, mit statisch gelinkten Libraries kompilieren:
Code:
~> file esniper
esniper: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped
Code:
/var/tmp # esniper -h
usage: esniper [-bdhHnmPrUv] [-c conf_file] [-l logdir] [-p proxy] [-q quantity]
       [-s secs|now] [-u user] (auction_file | [auction price ...])

where:
-b: batch mode, don't prompt for password or username if not specified
-c: configuration file (default is "$HOME/.esniper" and, if auction
    file is specified, .esniper in auction file's directory)
-d: write debug output to file
-h: command line options help
-H: configuration and auction file help
-i: get info on auctions and exit
-l: log directory (default: ., or directory of auction file, if specified)
-m: get my ebay watched items and exit
-n: do not place bid
-p: http proxy (default: http_proxy environment variable, format is
    http://host:port/)
-P: prompt for password
-q: quantity to buy (default is 1)
-r: do not reduce quantity on startup if already won item(s)
-s: time to place bid which may be "now" or seconds before end of auction
    (default is 10 seconds before end of auction)
-u: ebay username
-U: prompt for ebay username
-v: print version and exit

You must specify an auction file or <auction> <price> pair[s].  Options
on the command line override settings in auction and configuration files.

Please visit http://esniper.sf.net/ for updates and bug reports.  To learn
about updates to and major bugs in esniper, subscribe to the esniper mailing
list at http://lists.sf.net/lists/listinfo/esniper-announce

EDIT 2:
BITTE BEACHTEN: esniper funktioniert nur mit curl 7.19.7 aus trunk 4308 oder kleiner.
 

Anhänge

  • Config.in.txt
    404 Bytes · Aufrufe: 13
  • esniper.mk.txt
    1,011 Bytes · Aufrufe: 8
  • external.in.txt
    174 Bytes · Aufrufe: 10
  • Makefile.in.txt
    68 Bytes · Aufrufe: 10
  • Config.in_static.txt
    429 Bytes · Aufrufe: 12
  • esniper.mk_static.txt
    992 Bytes · Aufrufe: 10
Zuletzt bearbeitet:
Hallo

@RalfFriedl:
Das hast Du aber bei esniper nicht getan, wie man an der Ausgabe von ldd feststellen kann.
Ich habe beide Wege versucht (dynamisch und statisch). Beide Varianten haben nicht funktioniert. Entschuldige bitte das Durcheinanderbringen.

Erklärung:
esniper dynamisch hat eine Dateigröße von ca 80 kByte. Das Binary scheint zu funktionieren ("esniper -h" gibt eine Ausgabe). Der Logintest mittels "esniper -m" gibt jedoch diese Fehlermeldung:
Code:
Auction 0: Cannot connect to URL tY: Error: error:0D0C50A1:lib(13):func(197):reason(161)

Und da libssl und libcrypto sowieso recht schwierig sind, wie aus diversen Threads hervorgeht, habe ich von der dynamischen Lösung Abstand genommen und bin den statischen Weg gegangen. Das statische Binary ist ca 1,4 MByte groß. Der Logintest endet jedoch ebenso mit derselben Meldung.
Alle weiteren Kompiliertests werde ich statisch vornehmen.


@sf3978:
Also, zunächst einmal:
Mit soviel Hilfsbereitschaft hätte ich nicht gerechnet. Vielen Dank dafür und für die angehängten Dateien.
Ich habe beide Sachen ausprobiert (dynamisch sowie statisch). Die Binaries sind exakt genauso groß wie die von mir erstellten Binaries. Deine Config.in und esniper.mk sind allerdings um Längen besser ... ich habe noch manuelle Anpassungen an configure im esniper Source Ordner gemacht, damit mein make überhaupt durchlief.
Egal, lange Rede, kurzer Sinn.
Die Fehlermeldung bleibt dieselbe, bei beiden Binaries (dynamisch und statisch)
Code:
Auction 0: Cannot connect to URL tY: Error: error:0D0C50A1:lib(13):func(197):reason(161)

_______________________________________________________


So, daraufhin habe ich Google mal angeschmissen und bekam durch die ganzen Threads etc. das Gefühl, dass das Problem bei OpenSSL zu suchen ist.
Soweit ich aus einigen Threads im IPPF herauslesen konnte wird das "Freetz OpenSSL" nicht mit allen Optionen kompiliert (man berichtige mich, falls ich falsch liege). Was ich also mal versucht habe war Folgendes:
Die libssl.a und libcrypto.a (von openssl-0.9.8e-mipsel.tar.bz2 aus diesem Post) im Toolchain-Ordner ausgetauscht und ein "make esniper-precompiled" durchgeführt. Daraufhin bekam das statische esniper Binary eine Größe von ca. 1,7 MByte und die Fehlermeldung bei "esniper -m" taucht auch nicht mehr auf. Hier mal exemplarisch eine Ausgabe nach Eingabe eines falschen Benutzers/Passworts.

Code:
/var/media/ftp/rootfs/rootfs4256/usr/bin # ls -la esn*
-rwxr-xr-x    1 root     root      1752444 Jan 31 03:07 esniper
-rw-r--r--    1 root     root        17935 Jan 31 03:10 esniper.3267.1.bug.html
-rwxr-xr-x    1 root     root      1423308 Jan 30 02:34 esniper_
/var/media/ftp/rootfs/rootfs4256/usr/bin # rm esniper.3267.1.bug.html
/var/media/ftp/rootfs/rootfs4256/usr/bin # ./esniper -m
Enter eBay username: te^?^?^?^?
Enter eBay password:

Auction 0: Bad username or password
/var/media/ftp/rootfs/rootfs4256/usr/bin #


So, das heißt für mich jetzt, dass es generell möglich ist ein statisches Binary zu kompilieren aus den esniper sourcen. Ich habe allerdings noch nicht versucht die Kompilierweise vom Freetz OpenSSL zu verändern, denke aber dass es in diese Richtung gehen müsste.

Weiß evtl jemand, warum OpenSSL anscheinend nicht richtig/vollständig kompiliert wird im Freetz Standard? Werden evtl nicht alle Verschlüsselungsarten mit einkompiliert? md2 oder so?


By the way: Ich bin kein Developer, also verzeiht meine nicht developer-konforme Ausdrucksweise ;-) Ich bin lediglich daran interessiert, mal ein Freetz-Paket auf die Beine zu stellen. Und wie immer: Aller Anfang ist schwer. Und evtl scheitert es auch an irgendeiner Sache. Aber zumindest wird man nicht dümmer dabei.

So denn ..


Gruß
molfi
 
Wenn ich versuche mit dem statischen binary eine Verbindung herzustellen, bekomme ich folgende Fehlermeldung:
Code:
/var/mod/root # esniper -m
Enter eBay username: *******
Enter eBay password:

Auction 0: Cannot connect to URL �ZY: [B]Error: SSL certificate problem, verify that the CA cert is OK.[/B] Details:
error:14090086:lib(20):func(144):reason(134)
 
Ja, hab ich vergessen zu erwähnen.
Das liegt daran, dass die root Zertifikate im default Pfad gesucht werden (etc/ssl/cert/).

Ich hab da mal aktualisierte Zertifikate von einem Debian genommen.

Da liegen quasi die symlinks zu den Zertifikaten drin
/etc/ssl/certs
Und da liegen die Zertifikatdateien:
/usr/share/ca-certificates

Hab den Kram mal gepackt angehängt.

Da ich mit USBroot arbeite und das rootfs rw gemounted habe, kann ich auch in /etc/ schreiben. Wenn man nicht mit USBroot arbeitet, dann gibt es glaube ich die Möglichkeit, das mit in die Firmwaredatei reinzupacken. Ich meine das ging, indem man die Verzeichnisstruktur nachbildet und das fwmod Script nimmt es dann mit auf (bis auf /lib/* und /usr/lib/*).


Gruß
molfi
 

Anhänge

  • etc_ssl.tar.gz
    74.4 KB · Aufrufe: 27
  • usr_share_ca-certificates.tar.gz
    73.7 KB · Aufrufe: 24
[...]
Weiß evtl jemand, warum OpenSSL anscheinend nicht richtig/vollständig kompiliert wird im Freetz Standard? Werden evtl nicht alle Verschlüsselungsarten mit einkompiliert? md2 oder so?
[...]
Evtl. ist das die Ursache:
Code:
OPENSSL_NO_CIPHERS:= no-idea [B][COLOR="Red"]no-md2 [/COLOR][/B]no-mdc2 no-rc2 no-rc5 no-sha0 no-smime \
	no-rmd160 no-aes192 no-ripemd no-camellia no-ans1 no-krb5
Siehe hier: klick
 
Hallo sf3978.

Ja, das wars anscheinend.
Ich hab die openssl.mk mal dahingehend abgeändert:
Code:
OPENSSL_NO_CIPHERS:= 
OPENSSL_OPTIONS:= shared

Der openSSL make Prozess läuft weiterhin durch. Die libcrypto.a und libssl.a werden hierdurch wesentlich größer. Das Binary von esniper wächst ebenfalls auf ca 1,6 MB an und scheint zu funktionieren auf der Fritzbox:
Code:
/usr/bin # ./esniper -m
Enter eBay username: xxxxx
Enter eBay password:

/usr/bin # ./esniper -m
Enter eBay username: test
Enter eBay password:

esniper encountered a bug.  Please go to:
        http://sourceforge.net/tracker/?func=add&group_id=45285&atid=442436
paste this into "Detailed Description":
        Automated esniper bug report.
        esniper version 2.22.0
        libcurl/7.19.7 OpenSSL/0.9.8l
        Error encountered in function ebayLogin in auction.c line 430
        auction = 0, price = 0, remain = 0
        latency = 0, result = -1, error = 19
        buf = 0x5c1720, size = 17825, read = 0x5c1720
        time = 1265319259, offset = 0
        pagename = "Security Measure", pageid = "(null)", srcid = "(null)"
        unknown pageinfo
then upload and attach esniper.3783.1.bug.html and click submit.
Auction 0: Login failed
/usr/bin #

Der erste Login mit meinem richtigen ebay Namen (unkenntlich gemacht durch xxxxx) funktioniert - zu erkennen daran, dass keine Fehlermeldung erscheint. Der zweite Loginversuch (mit falschen Daten) schlägt fehl, es erscheint eine Fehlermeldung.


Da die Kommandozeile ja nichts Erstrebenswertes ist in Bezug auf die Benutzung von esniper, habe ich gleich noch den lighttpd samt php mit ins Image gepackt und das esniper Frontend in das htdocs Verzeichnis gelegt.
Scheint ebenfalls zu funktionieren (siehe Screenshot). Muss ich aber noch ausgiebig testen. Es funktionierte allerdings auch nur die esf Version 2.0 RC2. Die neue 2.1 RC1 brachte Fehler beim Setup, da dem Freetz-PHP Binary anscheinend expat und noch etwas fehlt. Das muss ich noch mal untersuchen, wenn wieder etwas Zeit da ist.

Gruß
molfi
 

Anhänge

  • esf_esniper.jpg
    esf_esniper.jpg
    144.8 KB · Aufrufe: 47
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.