Crosscompilieren von verschiedenen Libs

So, ich habe bisher noch nicht die Muße gehabt, mich an das PHP Binary heranzumachen, habe die Zeit aber genutzt, um esniper mit esniper frontend auf lighttpd mit fastcgi PHP ausgiebiger zu testen.

Zunächst schien es so, dass das busybox ps applet nicht geeignet ist für esniper. Ständig kamen Fehlermeldungen bzgl nicht gefundener Prozesse etc. Also habe ich mir dieses statisch vorkompilierte ps mal genommen und versucht es dem Betriebssystem unterzujubeln. Leider nur mit mittelmäßigen Erfolg. Details in diesem Thread.

Da sich das busybox ps anscheinend nur an den mitgegebenen Parametern störte, war es einfacher, den PHP Code vom esniper frontend anzupassen.
Im include "functions.auction.php" "ps ax" durch ein einfaches "ps" ersetzen und schon waren die Fehlermeldungen ade. Z.B.
Code:
$cmd = sprintf('ps | grep -e "[ /]esniper" | grep "%s"', $group);

Ob es weitere ps Aufrufe gibt in anderen includes, habe ich noch nicht gecheckt, werde ich aber noch.


So, esniper ein wenig eingestellt nach persönlichen Preferenzen und ein, zwei Auktionen hinzugefügt, gestartet und hier das Ergebnis:
Code:
 3996 wwwrun      2304 S    lighttpd -f /mod/etc/lighttpd/lighttpd.conf
 3997 wwwrun      4716 S    /usr/bin/php-cgi
 3998 wwwrun      4992 S    /usr/bin/php-cgi
 2830 wwwrun      2128 S    esniper -c .es-f 250575xxx231.xxxxx
 2869 wwwrun      2124 S    esniper -c .es-f 1804xxx02375.xxxxx


Weitere Meilensteine:
- weiteres ausgiebiges Testen des Setups
- Versuch, das neuen esniper frontend zum Laufen zu bringen -> PHP binary
- evtl. Paket schnüren, um nicht alle Schritte manuell ausführen zu müssen


Gruß
molfi
 
So, meine Zeit ist leider sehr knapp bemessen die letzten Wochen, aber trotzdem ein paar Neuigkeiten:


- weiteres ausgiebiges Testen des Setups
Dafür war nicht viel Zeit, ich kann nur sagen, dass esniper selbst super performant läuft auf der Fritzbox 7170. Das esniper Frontend über HTML & PHP stellt hierbei den Performance-Flaschenhals dar. ... Funktioniert aber soweit ganz gut, nur evtl Powerbidder könnten Speicherprobleme bekommen, da mehere Prozesse gestartet werden.
Ich könnte mir vorstellen, von lighttpd auf den Busybox HTTPD umzusteigen, um in dem Bereich das letzte an Performance herauszukitzeln.
Weiter könnte ich mir vorstellen, esf von PHP auf CGI umzuprogrammieren. Man sieht am Beispiel Fritzload, dass deutliche Geschwindigkeitsvorteile zu erwarten sind.
... das war jetzt alles nur laut gedacht, nichts weiter.

Versuch, das neuen esniper frontend zum Laufen zu bringen -> PHP binary
Das neue esf hat immer nur eine weiße Seite geliefert. Nach diesem Post im esf Support Forum war klar: Das PHP Binary musste mit erweiterter Unterstützung kompiliert werden. Ich hab zwar angefangen, aber der Dank gebührt er13. Details hier.
Damit läuft nun auch die esf 2.1 auf lighttpd und PHP (getestet mit Freetz trunk 4380). Der workaround bzgl der Busybox ps Parameter Inkompatibilität müsste eigentlich noch funktionieren. Da die PHP include Struktur ein wenig umgekrempelt wurde, habe ich die entsprechende PHP Datei aber noch nicht ausfindig gemacht. ... folgt noch.
EDIT: Damit im neuen esf ps richtig aufgerufen wird, die entsprechenden CMD Aufrufe in den "exec.unix.xml" Dateien ändern. zB in "./application/exec.unix.xml" und evtl noch in anderen, wo es nötig ist.
EDIT2: Eine nicht(?) dokumentierte Möglichkeit, die PS Aufrufe an das eigene System anzupassen, ohne in den Code eingreifen zu müssen wird nun hier erläutert.



evtl. Paket schnüren, um nicht alle Schritte manuell ausführen zu müssen
Da bin ich noch nciht beigegangen. Die vorkompilierten Binaries samt Zertifikaten etc in ein Tar-Archiv zu stecken sollte nicht so schwierig werden. Ob daraus ein fertiges Freetz Paket geschnürt werden kann, hängt aber von anderen Faktoren ab, wie zB vorrangig meinen Integrationsfähigkeiten sowie der Bereitschaft und Akzeptanz der Freetz Entwickler und Gemeinde, wie zB hier schon diskutiert. Evtl ist es wohl besser, es bei einem Archiv zu belassen.

Gruß
molfi
 
Zuletzt bearbeitet:
wenn es kein packet gibt, kannst du dann das archiv online stellen und ne anleitung wär topp ;)
 
Kurzer Nachtrag bzgl. Performanceoptimierung der Umgebung:

Habe zwischenzeitlich esniper und esf über den busybox httpd laufen lassen. Nur mit mäßigem Erfolg - was wohl auch zu erwarten war.
- httpd und lighttpd benutzen beide ca. 5-6% Speicher (laut top)
- httpd verursachte viele PHP binary Aufrufe in parallel und brachte die Fritzbox zum Stillstand bzw. zum Reboot
- Fazit: Der HTTP Server stellt nicht den Performance Flaschenhals dar, habe wieder auf lighttpd umgeschwenkt

Beim PHP binary siehts schon ein wenig anders aus:
- Unterbindung von PHP Kindprozessen mittels lighttpd Konfiguration:
Code:
server.modules += ( "mod_fastcgi" )
fastcgi.server = ( ".php" => (( "socket" => "/var/run/lighttpd/php-fastcgi.socket", "bin-path" => "/usr/bin/php-cgi", "max-procs" => 1, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "0", "PHP_FCGI_MAX_REQUESTS" => "5" ) )) )
Damit wird wirklich nur ein PHP Prozess gestartet, was die Speicherauslastung schont
- PHP.ini Anpassungen - nach eigenem Ermessen (siehe Anhang)
... ich weiß gar nicht mehr genau, was ich geändert habe ... einfach mal mit der Standard php.ini im Freetz vergleichen, um die Änderungen herauszufiltern


Esniper Frontends Standardeinstellungen sind nicht unbedingt optimiert für kleine Systeme - wie z.B die Fritzbox. Folgende Einstellungen führten zu einer Performanceverbesserung:
- Deinstallieren sämtlicher Module und Plugins, die man nicht braucht bzw. nicht benutzen möchte (zB Googlegadgets, News, Selleritems etc)
- Benutzen von Popup Dialogen via Javascript (ansonsten wird eine komplette neue HTML Seite generiert und dargestellt was wesentlich mehr Zeit kostet)
- Unterbinden des Nachladens von Bilder von ebay (reduziert Renderzeit)
- Autorefreshfunktionen abschalten
- Text statt Bilder im Menu (reduziert die Renderzeit einer Seite)


Noch ein kleiner Tip:
Zum Ausprobieren und Kennenlernen von Esniper und Esniper Frontend habe ich mir selbiges Szenario im Freetz-Linux aufgebaut. Das läuft auf einer performanten Maschine, so dass man beim Klicken nicht jedes Mal ein paar Sekunden warten muss.

Ach, und noch etwas:
- Alle hier notierten Tipps und Hinweise sind nicht mit wissenschaftlichen Methoden ermittelt worden, sondern durch Ausprobieren. Es sei jeden selbst überlassen, diese anzuwenden
- Wenn ich hier von Performanceoptimierung spreche, meine ich nicht, dass am Ende eine rasendschnelle Anwendung dabei herauskommt. Es ist jedoch ein merkbarer Geschwindigkeitsunterschied zu verzeichnen, der letztendlich die Anwendung nutzbar macht - selbst auf der lahmen 7170


Meine Zeit, die ich in dieses Hobby investieren kann, ist in den letzten Wochen stark begrenzt gewesen und wird in den nächsten Wochen stark begrenzt bleiben. Deshalb bitte nicht erwarten, dass ein fertiges Paket samt Anleitung in naher Zukunft erscheinen wird. Ich arbeite daran, es wird fertig wenn es fertig wird.


Gruß
molfi
 

Anhänge

  • php_ini.txt
    4.1 KB · Aufrufe: 14
danke für den wasserstand! keep on running ;)
 
Hier ne kleine Anleitung, wie man esniper mit Hilfe von Freetz kompiliert, da ich nicht weiß, ob und wie man das alles automatisieren kann mittels Freetz Paket.

Ich benutze Freetz-Linux zum Erstellen der Images und habe mir für esniper einen zweiten Trunk augecheckt, um die Standard Buildumgebung nicht zu "gefährden".
Benutzung des Trunks auf eigene Gefahr, da dieser unstable sein könnte.

1. Revision 4308 auschecken (notwendig, da sich esniper nicht gegen das neue libcurl kompilieren lässt)
Code:
svn co http://svn.freetz.org/trunk/ freetz-trunk_4308 -r 4308
2. make menuconfig (keine besonderen Pakete notwendig, quasi eine MiniFreetz konfiguration reichtaus)
3. make (um das Grundgerüst kompilieren zu lassen)
4. ......./freetz-trunk_4308/make/libs/openssl.mk editieren wie folgt:
Code:
OPENSSL_NO_CIPHERS:= 
OPENSSL_OPTIONS:= shared
5. make openssl-precompiled
6. make curl-precompiled
7. Ordner ......./freetz-trunk_4308/make/esniper anlegen und die angehängte esniper.zip Datei dorthin entpacken
8. make esniper-precompiled


Am Ende sollte ein statisch kompiliertes vollständiges Binary rauskommen:
....../freetz-trunk_4308/packages/esniper-2-22-0/root/usr/bin
-rwxr-xr-x 1 freetz freetz 1660104 2010-03-27 01:28 esniper
Dieses kann zB auf einen an der Fritzbox angeschlossenen USB Speicher übertragen und ausgeführt werden.



Der zweite Teil folgt noch, wenn ich das Verfahren getestet habe.
"Wie erstelle ich das finale Freetz Image samt esniper, SSL certificates sowie den Voraussetzungen, um esniper frontend installieren zu können"


Bis dahin..
Gruß
molfi
 

Anhänge

  • esniper.zip
    1.3 KB · Aufrufe: 31
  • esniper-2-23-0.zip
    1.7 KB · Aufrufe: 29
Zuletzt bearbeitet:
[...]
1. Revision 4308 auschecken (notwendig, da sich esniper nicht gegen das neue libcurl kompilieren lässt)
[...]
Du kannst auch den aktuellen trunk verwenden, und curl 7.20.0 mit curl 7.19.7 aus der rev. 4308 ersetzen.
 
@sf3978: Das ist ein guter Tipp. Danke


Kurzes Update: Es gab ein neues es-f Release. Mit diesem wurde einiger Code umgeschrieben und ergänzt. Die es-f 2.2.1 funktionierte nicht mehr ordentlich mit dem benutzten PHP Binary.

Neue Voraussetzungen an PHP für es-f auf der Fritzbox:
- curl support
- zlib support
- iconv support
Neue optionale Voraussetzungen (für einige Plugins):
- mbstring
- openssl support

Diese gravierenden Änderungen herauszufinden und abzuschalten hat einiges an Zeit gebraucht.
Siehe auch hier und hier.


Wenn ich das nächste mal Zeit finde, versuche ich wieder hieran zu arbeiten:
Der zweite Teil folgt noch, wenn ich das Verfahren getestet habe.
"Wie erstelle ich das finale Freetz Image samt esniper, SSL certificates sowie den Voraussetzungen, um esniper frontend installieren zu können"

So dann, gute Nacht

Gruß
molfi
 
Oh cool! Irgendwie ist mir der Thread seit Monaten nicht aufgefallen. Ich hatte das gleiche mit esniper versucht, nur bin ich mangels Linux Kenntnisse daran gescheitert und hab es dann über debian aufgesetzt was bei mir jetzt noch auf der Box läuft. Der Seitenaufbau dauert unter debian mit esf nur leider teilweise mehr als 15 sec. Wie ist denn der Seitenaufbau in der freetz Version?
 
Der Seitenaufbau dauert unter debian mit esf nur leider teilweise mehr als 15 sec. Wie ist denn der Seitenaufbau in der freetz Version?

15 Sekunden ist doch ein guter Wert für die 7170 ;-)
Gerade unter Debian bootstrap hat bei mir ein Seitenaufbau über ne Minute gedauert. Direkt unter Freetz/lighttpd/php dauerts aber schon noch etliche Sekunden, ist halt auh keine Rakete.

Gruß
molfi
 
Wenn ich das nächste mal Zeit finde, versuche ich wieder hieran zu arbeiten: "Wie erstelle ich das finale Freetz Image samt esniper, SSL certificates sowie den Voraussetzungen, um esniper frontend installieren zu können"

Ich weiß: Nicht schön, aber das ist der grobe Ablauf

Teil 1: esniper binary erstellen
1. Revision 4308 auschecken (notwendig, da sich esniper nicht gegen das neue libcurl kompilieren lässt)

2. make menuconfig (keine besonderen Pakete notwendig, quasi eine MiniFreetz konfiguration reicht aus)

3. make (um das Grundgerüst kompilieren zu lassen)

4. ......./freetz-trunk_4308/make/libs/openssl.mk editieren wie folgt:
OPENSSL_NO_CIPHERS:=
OPENSSL_OPTIONS:= shared

5. make openssl-precompiled

6. make curl-precompiled

7. Ordner ......./freetz-trunk_4308/make/esniper anlegen und die in diesem Post angehängte esniper-2-23-0.zip Datei dorthin entpacken

8. make esniper-precompiled

Am Ende sollte ein statisch kompiliertes vollständiges Binary rauskommen:
....../freetz-trunk_4308/packages/esniper-2-23-0/root/usr/bin
-rwxr-xr-x 1 freetz freetz 1660104 2010-03-27 01:28 esniper
Dieses kann zB auf einen an der Fritzbox angeschlossenen USB Speicher übertragen und ausgeführt werden.


Teil 2: Image erstellen inkl. esniper und Zertifikaten für SSL
... das Image wird freilich sehr groß und passt nicht ins Flash. Ich benutze daher USBroot. Ob download auch funktioniert weiß ich nicht, müsste ausprobiert werden.

1. Aktuelles Freetz auschecken

2. make menuconfig
benötigte Pakete auswählen (für esniper selbst werden keine weiteren Pakete benötigt (alles statisch gebaut), wohl aber die Folgenden sofern man esniper frontend benutzen möchte: lighttpd mit php fast_cgi, PHP mit support für CURL, SSL, GD, ICONV, XML, ZLILB)

3. make

4. das in Teil 1 erzeugte Binary in ....../freetz-trunk/build/modified/filesystem/usr/bin kopieren
und mittels chmod +x esniper ausführbar machen sowie mittels chown freetz:freetz esniper Eigentümer zuweisen
... im selben Verzeichnis sollte sich dann auch das schon erzeugte php-cgi befinden (ca 8 MB groß)

5. etc_ssl.tar.gz kopieren nach ..../freetz-trunk/build/modified/filesystem/etc und entpacken via tar xzf etc_ssl.tar.gz. etc_ssl.tar.gz danach löschen.

6. usr_share_ca-certificates.tar.gz kopieren nach ..../freetz-trunk/build/modified/filesystem/usr/share und entpacken via tar xzf usr_share_ca-certificates.tar.gz. usr_share_ca-certificates.tar.gz danach löschen.

Dateien zu finden in diesem Post.

7. Nun das Image packen wie im USBroot guide vorgegeben, auf einem USB Stick entpacken und aktivieren.



Weiteres Vorgehen:
Hiernach sollte man dabei gehen, lighttpd und PHP einzurichten.
Dann es-f ins htdocs Verzeichnis legen und Installationsroutine aufrufen.




Wenn ich das nächste mal Zeit habe, mache ich mir mal Gedanken, wie man das evtl ein bisschen automatisieren kann. Evtl. geht es ja doch elegenater ;-)


Bis dahin

Gruß
molfi
 
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.