Webserver/PHP/MySQL auf FritzBox 7390

Skyscraper

Neuer User
Mitglied seit
2 Apr 2007
Beiträge
38
Punkte für Reaktionen
0
Punkte
6
Moin!

Und zwar benötige ich auf meiner 7390 einen Webserver mit PHP5 und MySQL 4.

Für Server/PHP habe ich statisch kompilierte Binaries von Apache und PHP genommen.
Jetzt bin ich auf der Suche nach einer statisch kompilierten Binary von MySQL.

Leider hab ich hier nichts derartiges gefunden (JA, ich hab die Suche befragt!)

Hat jemand vielleicht einen Link/ein File für mich?

Vielen Dank!

LG
Skyscraper

EDIT:
Das scheint was für die "ganz harten" zu sein... Ich versuche schon den ganzen Morgen mit der aktuellen 7390 Toolchain den mysqld zu crosscompilieren...
Aber momentan scheiter ich an verschiedenen Fehlermeldungen....
 
Zuletzt bearbeitet:
Wen es interessiert: Ich habs geschafft MySQL (Client/Server) für die 7390 zu crossen. Scheint soweit zu laufen.
Allerdings scheiter ich jetzt am PHP das ich habe, denn das ist leider ohne MySQL Unterstützung kompiliert.
Daher bin ich jetzt dabei PHP mit MySQL Unterstützung zu kompilieren... Also ich versuchs zumindest...

Wenn jemand interesse am MySQL hat: Bescheid sagen, dann bastel ich mal was zusammen...
(Läuft im chroot)

LG
Skyscraper
 
... mit der aktuellen 7390 Toolchain den mysqld zu crosscompilieren...
Im Anhang ein Paket (Patch) für mysql-6.0.11, für Freetz. Ich kann das binary nicht auf einer 7390 testen, weil ich keine habe. Um für die LE-Boxen ein brauchbares binary zu bekommen, müsste man die aktuelle download-toolchain (aus Freetz) angeblich fixen (wegen der Fehlermeldung: "./mysqld: can't resolve symbol 'bzero' in lib './mysqld'.").
Code:
 root@fritz:/var/media/ftp/uStor01/archiv# ldd ./mysqld         libpthread.so.0 => /lib/libpthread.so.0 (0x2aabe000)         libz.so.1 => /usr/lib/freetz/libz.so.1 (0x2aae1000)         libdl.so.0 => /lib/libdl.so.0 (0x2ab04000)         librt.so.0 => /lib/librt.so.0 (0x2ab17000)         libcrypt.so.0 => /lib/libcrypt.so.0 (0x2ab28000)         libnsl.so.0 => /lib/libnsl.so.0 (0x2ab4c000)         libm.so.0 => /lib/libm.so.0 (0x2ab5d000)         libuClibc++.so.0 => /usr/lib/freetz/libuClibc++.so.0 (0x2ab85000)         libc.so.0 => /lib/libc.so.0 (0x2abb9000)         libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2ac34000)         ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
 

Anhänge

  • mysql_060312.patch.txt
    141 KB · Aufrufe: 44
Moin,

hab leide nicht so viel Ahnung von Linux, währe aber trotzdem interessiert mysql 4.1xx (kein 5er!) auf die Box (7270 oder 7390) bzw ins freetz rein zu bekommen.
Hat das jemand schon hinbekommen?
Habe leide nur sehr wenig infos bis jetzt gefunden und die helfen mir nicht weiter. Eine kleine step-by-step anleitung währe suppi.
Danke
 
Moin!

Ich habs wie gesagt versucht und es ist definitiv machbar (auch ohne Freetz)!
ALLERDINGS wurde mir absolut davon abgeraten MySQL auf der Box laufen zu lassen. Verbraucht einfach zu viel RAM.
Habs letztlich aufgegeben. - Hätte aber eine Binary für die 7390. Hab nur grad vergessen welche MySQL Version es war.

Letztlich kann ich dir dafür den SheevaPlug empfehlen. Haben meine beiden Brüder. Hab zwar keine Ahnung woher, aber kurzes Googlen ergab HIER eine deutsche Bezugsmöglichkeit.

Gruß
Sky
 
Moin moin!

Wolte probeweise eine kleine , genügsame (Cao-Faktura) drauf probieren aber ich nehme lieber doch so ein Zotac Flunder.
Danke für die schnelle Antwort.

Gruß
AK
 
Hallo Zusammen.

Vielen Dank an opto für das mysql.tar. Ich versuche dies gerade in Freetz zu integrieren. Jedoch bekomme ich im Freetz-Linux (Kompilierumgebung für Freetz) immer folgenden Fehler.

Code:
make: *** [source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql/mysqld] Fehler 1


Code:
freetz@freetz-linux:~/trunk$ make
cmd() { PATH="/home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/home/freetz/trunk/toolchain/build/mips_gcc-4.8.4/mips-unknown-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" LD_RUN_PATH="/usr/lib/freetz" make -j2  "$@"  || { printf "\n\\033[33m%s\\033[m\n" "ERROR: Build failed.";  exit 1; } };      if [ -e source/.echo_item_start -a ! -e source/.echo_item_build ]; then echo -n "building... "; touch source/.echo_item_build; fi; cmd -C source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha \
                CXXFLAGS="-march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -fPIC"
make[1]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
Making all in .
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
make[2]: Für das Ziel »all-am« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
Making all in include
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make  all-am
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
Making all in zlib
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/zlib'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/zlib'
Making all in cmd-line-utils
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
Making all in readline
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils/readline'
make[3]: Für das Ziel »all« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils/readline'
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
make[3]: Für das Ziel »all-am« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
Making all in sql-common
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql-common'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql-common'
Making all in scripts
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make  all-am
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make[3]: Für das Ziel »all-am« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
Making all in strings
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/strings'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/strings'
Making all in mysys
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/mysys'
/bin/bash ../libtool --preserve-dup-deps --tag=CC   --mode=compile /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR="\"/var\"" -DDEFAULT_CHARSET_HOME="\"/usr\"" -DSHAREDIR="\"/usr/share/mysql\"" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR="\"/etc\"" -DHAVE_CONFIG_H -I. -I../include  -I../zlib -I../include   -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64   -DUNIV_LINUX -MT my_thr_init.lo -MD -MP -MF .deps/my_thr_init.Tpo -c -o my_thr_init.lo my_thr_init.c
/bin/bash ../libtool --preserve-dup-deps --tag=CC   --mode=link /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc  -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64   -DUNIV_LINUX  -rdynamic  -o libmysyswrap.la  my_libwrap.lo  -lrt -lpthread -lcrypt -lm  -lpthread 
libtool: compile:  /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR=\"/var\" -DDEFAULT_CHARSET_HOME=\"/usr\" -DSHAREDIR=\"/usr/share/mysql\" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR=\"/etc\" -DHAVE_CONFIG_H -I. -I../include -I../zlib -I../include -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUNIV_LINUX -MT my_thr_init.lo -MD -MP -MF .deps/my_thr_init.Tpo -c my_thr_init.c  -fPIC -DPIC -o .libs/my_thr_init.o
libtool: link: mips-linux-ar cru .libs/libmysyswrap.a .libs/my_libwrap.o 
libtool: link: mips-linux-ranlib .libs/libmysyswrap.a
libtool: link: ( cd ".libs" && rm -f "libmysyswrap.la" && ln -s "../libmysyswrap.la" "libmysyswrap.la" )
my_thr_init.c: In function 'my_thread_init':
my_thr_init.c:342:19: error: expected expression before 'long'
  STACK_DIRECTION (long)my_thread_stack_size;
                   ^
my_thr_init.c:342:18: error: called object is not a function or function pointer
  STACK_DIRECTION (long)my_thread_stack_size;
                  ^
my_thr_init.c:342:24: error: expected ';' before 'my_thread_stack_size'
  STACK_DIRECTION (long)my_thread_stack_size;
                        ^
make[2]: *** [my_thr_init.lo] Fehler 1
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/mysys'
make[1]: *** [all-recursive] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'

ERROR: Build failed.
make: *** [source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql/mysqld] Fehler 1

Wäre super, wenn jemand eine Ahnung hätte, wie man diesen Fehler beheben kann. Falls jemand noch eine mysql 5.x Version hat, wäre dies noch besser, allerdings funktioniert auch die 6.x.

LG Pigro95

Randdaten: Fritzbox 7390, Freetz-trunk
 
Na so schwer ist das ja nun nicht zu interpretieren ...

Code:
my_thr_init.c:342:19: error: expected expression before 'long'
  STACK_DIRECTION (long)my_thread_stack_size;
                   ^
my_thr_init.c:342:18: error: called object is not a function or function pointer
  STACK_DIRECTION (long)my_thread_stack_size;
                  ^
my_thr_init.c:342:24: error: expected ';' before 'my_thread_stack_size'
  STACK_DIRECTION (long)my_thread_stack_size;
Da stimmt offenbar etwas in Zeile 342 der Datei my_thr_init.c nicht, die enthält bei Dir den Text

Code:
  STACK_DIRECTION (long)my_thread_stack_size;

Das eigentlich Witzige an der Sache ist aber, daß da in den Zeilen 341 und 342 eigentlich folgendes stehen müßte (so findet es sich jedenfalls an mehreren anderen Stellen im Internet, es gibt ja keine "offizielle" Quelle mehr):

Code:
  tmp->stack_ends_here= (char*)&tmp +
                         STACK_DIRECTION * (long)my_thread_stack_size;

Da würde ich mir jetzt an Deiner Stelle so meine Gedanken machen, z.B. woher ich diese Quelltext-Version habe, ob die Quelle dieses Downloads tatsächlich vertrauenswürdig war und ob bzw. was da event. noch geändert worden sein könnte.

Wenn Du das alles getrost als "Aluhut"-Bedenken abhaken kannst, dann solltest Du aber offenbar trotzdem mal in die betreffende Datei schauen, denn der "gcc" teilt ja einige meiner Bedenken, zumindest was die korrekte Syntax angeht und offensichtlich sieht er es auch weniger als Fortsetzung der Pointer-Arithmetik aus Zeile 341 als vielmehr als mißlungene Variablendeklaration oder einen Funktionsaufruf o.ä. - das mag er verständlicherweise so nicht.

Bleibt also die Frage, wo kommt diese Änderung denn her ...

Wenn man dann einen Schritt weiter geht und sich die Patches aus dem tar-File in #8 etwas genauer ansieht, dann findet sich zumindest eine Antwort, aber es stellen sich mir allerdings noch ganz andere Fragen.

Ich programmiere zwar auch in C, aber nicht ausschließlich - und kenne bestimmt nicht jede mögliche Feinheit und jeden Kniff, den man aus einem C-Compiler noch herauskitzeln könnte. Das sieht für mich aber doch zumindest teilweise etwas merkwürdig aus (das ist das File 100_mysql_6_0_11_alpha.patch, keine Ahnung, wer der Urheber ist):
Code:
Index: mysys/lf_alloc-pin.c
==================================================================================================================
--- mysys/lf_alloc-pin.c.orig	2009-12-12 21:51:40.000000000 +0100
+++ mysys/lf_alloc-pin.c	2009-12-12 21:40:04.000000000 +0100
@@ -314,7 +314,7 @@
   return 0;
 }
 
-#if STACK_DIRECTION < 0
[COLOR="#FF0000"]+#ifdef STACK_DIRECTION < 0[/COLOR]
 #define available_stack_size(CUR,END) (long) ((char*)(CUR) - (char*)(END))
 #else
 #define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR))
Index: mysys/my_thr_init.c
==================================================================================================================
--- mysys/my_thr_init.c.orig	2009-12-12 21:52:28.000000000 +0100
+++ mysys/my_thr_init.c	2009-12-12 21:39:55.000000000 +0100
@@ -338,8 +338,8 @@
                         0);
   pthread_cond_init(&tmp->suspend, NULL);
 
[COLOR="#0000FF"]-  tmp->stack_ends_here= (char*)&tmp +
-                         STACK_DIRECTION * (long)my_thread_stack_size;
+  tmp->stack_ends_here= (char*)&tmp + 
+	STACK_DIRECTION (long)my_thread_stack_size;[/COLOR]

   pthread_mutex_lock(&THR_LOCK_threads);
   tmp->id= ++thread_id;
Index: storage/innobase/os/os0proc.c
==================================================================================================================
--- storage/innobase/os/os0proc.c.orig	2009-12-12 21:53:19.000000000 +0100
+++ storage/innobase/os/os0proc.c	2009-12-12 21:39:42.000000000 +0100
@@ -561,9 +561,9 @@
 /*===============*/
 					/* out: allocated memory */
 	ulint		n,		/* in: number of bytes */
-	ibool		set_to_zero,	/* in: TRUE if allocated memory
-					should be set to zero if
-					UNIV_SET_MEM_TO_ZERO is defined */
+	ibool		set_to_zero,	/* in: TRUE if allocated memory */
+					/* should be set to zero if */
+					/* UNIV_SET_MEM_TO_ZERO is defined */
 	ibool		assert_on_error)/* in: if TRUE, we crash mysqld if
 					 the memory cannot be allocated */
 {
@@ -571,7 +571,7 @@
 	ulint size;
 	int shmid;
 	void *ptr = NULL;
-	struct shmid_ds buf;
+	struct shmid_ds *buf;
 
 	if (!os_use_large_pages || !os_large_page_size) {
 		goto skip;
Index: sql/sql_class.cc
==================================================================================================================
--- sql/sql_class.cc.orig	2009-12-12 21:54:04.000000000 +0100
+++ sql/sql_class.cc	2009-12-12 21:39:33.000000000 +0100
@@ -1254,7 +1254,7 @@
   mysys_var->id= thread_id;
   real_id= pthread_self();                      // For debugging
   mysys_var->stack_ends_here= thread_stack +    // for consistency, see libevent_thread_proc
-                              STACK_DIRECTION * (long)my_thread_stack_size;
+                              STACK_DIRECTION (long)my_thread_stack_size;
 
   /*
     We have to call thr_lock_info_init() again here as THD may have been
Index: sql/sql_parse.cc
==================================================================================================================
--- sql/sql_parse.cc.orig	2009-12-12 21:54:56.000000000 +0100
+++ sql/sql_parse.cc	2009-12-12 21:39:19.000000000 +0100
@@ -5527,7 +5527,7 @@
 
 #ifndef EMBEDDED_LIBRARY
 
-#if STACK_DIRECTION < 0
+#ifdef STACK_DIRECTION < 0
 #define used_stack(A,B) (long) (A - B)
 #else
 #define used_stack(A,B) (long) (B - A)
Index: client/strings.h
==================================================================================================================
--- client/strings.h.orig	1970-01-01 01:00:00.000000000 +0100
+++ client/strings.h	2009-12-12 21:44:23.000000000 +0100
@@ -0,0 +1 @@
+#undef CONFIG_STRINGS
Index: sql/strings.h
==================================================================================================================
--- sql/strings.h.orig	1970-01-01 01:00:00.000000000 +0100
+++ sql/strings.h	2009-12-12 21:44:23.000000000 +0100
@@ -0,0 +1 @@
+#undef CONFIG_STRINGS
Da wird als in der ersten farblich markierten Zeile aus einer if-Direktive für den Präprozessor (das ist ein Vergleich von irgendwas mit irgendwem, hier von "STACK_DIRECTION" und "0") mal kurzerhand ein Test, ob "STACK_DIRECTION < 0" als Makro definiert ist? Das halte ich für ausgemachten Unsinn (ich lasse mich gerne korrigieren), bei dem mit hoher Wahrscheinlichkeit (wenn nicht irgendwo ein "#define STACK_DIRECTION < 0" existiert) immer der else-Zweig verwendet wird. Da hätte ich persönlich jetzt aus Gründen der Klarheit einfach irgendwo ein festes "#define STACK_DIRECTION {1|-1}" für die Zielplattform reingepatched und auf den ganzen Rest dann verzichtet.

Denn betrachtet man dann den Patch für my_thr_init.c genauer, ist das Original eigentlich in Ordnung: Auf die Adresse von "tmp" (auf char-Pointer gecasted) wird der Wert von "my_thread_stack_size" (in my_init.c als "ulong my_thread_stack_size= 65536;" deklariert) addiert. Das ganze Zeug mit STACK_DIRECTION soll vermutlich dafür sorgen, daß die Größe in Abhängigkeit von der Richtung des Stack-Pointers addiert oder subtrahiert wird. Welche der beiden Formen am Ende richtig ist, hängt nun zu 100% davon ab, ob und wie STACK_DIRECTION überhaupt definiert ist. Normalerweise sollte da so etwas wie "1" oder "-1" drin stehen (der originale Vergleich mit '0' legt das jedenfalls nahe), dann klappt auch die Multiplikation aus der ursprünglichen Fassung und die 64K werden positiv oder negativ. Wenn da aber die Multiplikation schon mit enthalten ist (also "1 *" bzw. "-1 *"), weiß ich gar nicht, ob das überhaupt geht. Also tippe ich mal wild, daß da STACK_DIRECTION am Ende undefiniert ist (mithin durch "gar nichts" ersetzt wird) und dann ist natürlich der zusätzliche Stern für die Multiplikation falsch. Stellt sich mir nur die Frage, warum dann der Patch nicht das ganze STACK_DIRECTION einfach entfernt in Zeile 342, die Alternative einer festen "STACK_DIRECTION" hatten wir ja schon.

Aber auch das ist noch nicht der eigentliche Knackpunkt, das sollte nur mal demonstrieren, wo man bei der Suche nach so einem Problem überall landen kann und warum die Fehlerbeschreibung immer noch ungenügend ist, denn es ist nicht einmal klar, wo die gepatchten Quellen für MySQL 6.0.11-alpha eigentlich her sind und ob da nicht schon irgendwelche Patches enthalten sind. Wenn dann solche Patches (die für mich eindeutig "falsch" sind und nur "mit Glück" das Ziel erreichen) am Ende tatsächlich wegen anderer Randbedingungen noch zu einem funktionsfähigen Programm führen, kommt man manchmal aus dem Staunen auch nicht mehr heraus.

Wenn der o.a. Patch auf die my_thr_init.c tatsächlich angewendet wurde, dann dürfte das Statement eigentlich nicht falsch sein, denn es müßte als Fortsetzung von Zeile 341 erkannt werden. Damit bleibt am Ende nur noch die Vermutung, daß dieser Patch gar nicht angewandt wurde ... das sieht man in dem Auszug aus dem make-Log aber nicht, da fehlt der Download und das Patchen komplett.

Da mußt Du also noch Informationen nachlegen oder einfach mal selbst in die Quelltexte schauen, am besten noch vor dem Patchen, ob da tatsächlich der erwartete Ausgangszustand vorliegt. Wenn das so ist, verstehe ich auch nicht, was der "gcc" an der Zeile 342 auszusetzen hat, denn dann steht da nach dem Patchen als letztes ein "+"-Zeichen in 341 und das ist in C ein deutliches Zeichen, daß die Anweisung weiter geht (und zwar bis zum abschließenden Semikolon, deshalb steht das in C eben am Ende jeder Anweisung).

Es ist für mich immer wieder überraschend (und für manche wahrscheinlich auch nicht nachvollziehbar), wie sich aus so einem kleinen Problem eine Suche an zig verschiedenen Stellen ergeben kann.

PS: Daß ich aber auch auf dem Standpunkt stehe, daß eigentlich jeder selbst in der Lage sein sollte, wenigstens die Stelle eines solchen Problems zu lokalisieren (das muß ja noch nicht die Ursache sein) und daß dann selbstverständlich wenigstens ein Auszug der fraglichen Quelltext-Datei um die Fehlerstelle herum auch zu einer kompletten Fehlerbeschreibung gehört, damit ein Hilfewilliger sich nicht erst selbst die Quellen suchen und auspacken muß, brauche ich hoffentlich nicht extra zu betonen und es sollte zumindest als Hinweis bei weiteren Fragen zu dieser Problematik ausreichend sein, um von vorneherein eine umfassende und detaillierte Beschreibung des Problems zu erhalten.
 
Hallo PeterPawn

Vielen Dank für die ausführliche Erklärung.

Tatsächlich hatte ich den Patch noch nicht angewendet. Dies habe ich nun nachgeholt.

Nun erscheint folgende Ausgabe:
Code:
freetz@freetz-linux:~/trunk$ make
cmd() { PATH="/home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin:/home/freetz/trunk/toolchain/build/mips_gcc-4.8.4/mips-unknown-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" LD_RUN_PATH="/usr/lib/freetz" make -j2  "$@"  || { printf "\n\\033[33m%s\\033[m\n" "ERROR: Build failed.";  exit 1; } };      if [ -e source/.echo_item_start -a ! -e source/.echo_item_build ]; then echo -n "building... "; touch source/.echo_item_build; fi; cmd -C source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha \
                CXXFLAGS="-march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -fPIC"
make[1]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
Making all in .
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
make[2]: Für das Ziel »all-am« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'
Making all in include
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make  all-am
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/include'
Making all in cmd-line-utils
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
Making all in readline
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils/readline'
make[3]: Für das Ziel »all« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils/readline'
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
make[3]: Für das Ziel »all-am« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/cmd-line-utils'
Making all in sql-common
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql-common'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql-common'
Making all in scripts
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make  all-am
make[3]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make[3]: Für das Ziel »all-am« ist nichts zu tun.
make[3]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/scripts'
Making all in strings
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/strings'
make[2]: Für das Ziel »all« ist nichts zu tun.
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/strings'
Making all in mysys
make[2]: Betrete Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/mysys'
/bin/bash ../libtool --preserve-dup-deps --tag=CC   --mode=compile /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR="\"/var\"" -DDEFAULT_CHARSET_HOME="\"/usr\"" -DSHAREDIR="\"/usr/share/mysql\"" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR="\"/etc\"" -DHAVE_CONFIG_H -I. -I../include  -I../include   -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64   -DUNIV_LINUX -MT my_thr_init.lo -MD -MP -MF .deps/my_thr_init.Tpo -c -o my_thr_init.lo my_thr_init.c
/bin/bash ../libtool --preserve-dup-deps --tag=CC   --mode=compile /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR="\"/var\"" -DDEFAULT_CHARSET_HOME="\"/usr\"" -DSHAREDIR="\"/usr/share/mysql\"" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR="\"/etc\"" -DHAVE_CONFIG_H -I. -I../include  -I../include   -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64   -DUNIV_LINUX -MT thr_mutex.lo -MD -MP -MF .deps/thr_mutex.Tpo -c -o thr_mutex.lo thr_mutex.c
libtool: compile:  /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR=\"/var\" -DDEFAULT_CHARSET_HOME=\"/usr\" -DSHAREDIR=\"/usr/share/mysql\" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR=\"/etc\" -DHAVE_CONFIG_H -I. -I../include -I../include -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUNIV_LINUX -MT my_thr_init.lo -MD -MP -MF .deps/my_thr_init.Tpo -c my_thr_init.c  -fPIC -DPIC -o .libs/my_thr_init.o
libtool: compile:  /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR=\"/var\" -DDEFAULT_CHARSET_HOME=\"/usr\" -DSHAREDIR=\"/usr/share/mysql\" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR=\"/etc\" -DHAVE_CONFIG_H -I. -I../include -I../include -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUNIV_LINUX -MT thr_mutex.lo -MD -MP -MF .deps/thr_mutex.Tpo -c thr_mutex.c  -fPIC -DPIC -o .libs/thr_mutex.o
libtool: compile:  /home/freetz/trunk/toolchain/build/mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -DDEFAULT_BASEDIR=\"/usr\" -DDATADIR=\"/var\" -DDEFAULT_CHARSET_HOME=\"/usr\" -DSHAREDIR=\"/usr/share/mysql\" -DDEFAULT_HOME_ENV=MYSQL_HOME -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX -DDEFAULT_SYSCONFDIR=\"/etc\" -DHAVE_CONFIG_H -I. -I../include -I../include -march=24kc -mtune=24kc -msoft-float -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUNIV_LINUX -MT thr_mutex.lo -MD -MP -MF .deps/thr_mutex.Tpo -c thr_mutex.c -o thr_mutex.o >/dev/null 2>&1
my_thr_init.c: In function 'my_thread_init':
my_thr_init.c:342:19: error: expected expression before 'long'
  STACK_DIRECTION (long)my_thread_stack_size;
                   ^
my_thr_init.c:342:18: error: called object is not a function or function pointer
  STACK_DIRECTION (long)my_thread_stack_size;
                  ^
my_thr_init.c:342:24: error: expected ';' before 'my_thread_stack_size'
  STACK_DIRECTION (long)my_thread_stack_size;
                        ^
make[2]: *** [my_thr_init.lo] Fehler 1
make[2]: *** Warte auf noch nicht beendete Prozesse...
mv -f .deps/thr_mutex.Tpo .deps/thr_mutex.Plo
make[2]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/mysys'
make[1]: *** [all-recursive] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz/trunk/source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha'

ERROR: Build failed.
make: *** [source/target-mips_gcc-4.8.4_uClibc-0.9.33.2-nptl/mysql-6.0.11-alpha/sql/mysqld] Fehler 1

Da ich leider kein Programmierer bin und nur die C Grundlagen (if/while/for) kenne, kann ich leider nicht viel mit dem Quellcode anfangen. Leider benötige ich für die Fritzbox dringend eine MySQL Datenbank, sonnst hätte ich SQLight genommen. Das die Quellen unbekannt sind weis ich, allerdings habe ich schon ziemlich alles abgegrasst und keine andere MySQL Source für Freetz gefunden. Deshalb wäre ich wirklich froh, wenn dies funktioniert, oder jemand eine bessere Quelle hat.

LG Pigro95
 
@Pigro95:
Was hat sich denn nun geändert? Wenn ich es richtig sehe ... nichts.

Also bleibt die Frage, was denn nun beim Patchen passiert ist - wo ist das Protokoll?

Wenn das geklappt hat, wie sieht dann das Ergebnis in den Zeilen 330-350 aus? Der Fehler ist jedenfalls noch derselbe.

@opto:
Das glaube ich Dir ja, ich hatte auch keine Lust, den tatsächlichen Urheber ausfindig zu machen. Ich glaube nicht, daß sf3978 den Unsinn (jedenfalls ist es nach meiner Meinung welcher) selbst verzapft hat. Dann stellt sich wieder die Frage, wo er das her hatte ... und so zieht sich das unendlich und der wahre Urheber ist nur schwer zu ermitteln.

Das ist am Ende sogar egal, wenn dann das Ergebnis stimmt ... wobei es zum guten Ton gehören sollte, nicht offensichtliche Patches (und das Entfernen des Sterns ist tatsächlich doppeldeutig, da mit einem Stern in C je nach Kontext eine arithmetische Multiplikation oder eine Pointer-Dereferenzierung ausgelöst wird) mit einem entsprechenden Kommentar zu versehen, denn selbst nach dem Entfernen der Multiplikation bleibt ja die Frage, warum dann STACK_DIRECTION nicht gleich mit entfernt wurde. Die naheliegende Erklärung wäre es für mich beim Finden solcher Stellen, daß der Urheber den Sinn des ursprünglichen Codes eigentlich nicht verstanden hatte und nur "irgendwie" auf eine Fehlermeldung des Compilers reagiert hat. Ob das am Ende so sinnvoll ist, wenn man Patches von so jemandem einsetzt (jeder Review hätte das Problem sofort feststellen sollen), muß wieder jeder selbst wissen. Vielleicht bin ja auch ich nur zu blöd, die Genialität dieser Art des Patchens zu erkennen.
 
@Pigro95:
Was hat sich denn nun geändert? Wenn ich es richtig sehe ... nichts.
Am besten sage ich einfach mal, wie ich vorgegangen bin. Falls ich dumme Fehler gemacht habe, verzeiht mir dies bitte.

1. mysql Source von opto entpackt und beim freetz-linux in den make Ordner kopiert.
2. Mit make menuconfig das MySQL Paket ausgewählt.
3. Patch in das Patchverzeichnis von dem mysqlpaket kopiert.

Nochmals vielen Dank für eure Hilfe.

LG Pigro95
 
@opto:
Wenn die Patches bei Dir gehen, kannst Du ja Pigro95 weiter helfen, warum der Patch bei ihm offenbar nicht funktioniert.

Wenn das tatsächlich der unveränderte Inhalt Deines tar-Files aus #8 ist und das bei Pigro95 nicht zum gewünschten Erfolg führt, kann es ja nur zwei (wesentliche) Ursachen haben:

1. Pigro95 macht es falsch.

2. Der Patch funktioniert eben nicht oder jedenfalls nicht immer (z.B. wenn man mit einem frischen Checkout startet oder woran das auch immer liegen mag).

Wenn man so einen Patch anhängt, sollte man vielleicht auch die "Vaterschaft" so ernst nehmen, daß man sich dafür verantwortlich fühlt (meine Meinung) oder man schreibt es ganz deutlich dazu, damit Nachnutzer genau wissen, worauf sie sich einlassen.

Selbst wenn Du am Ende der Meinung bist, daß das Anhängen Deinerseits nur als nette Geste gemeint war und es "nur" eine Anpassung eines alten Patches an neue Versionen war, dann sollte man das vielleicht noch einmal ganz ganz deutlich dazuschreiben ... schon alleine deshalb, damit man nicht irrtümlich am Ende als Urheber angesehen ("verdächtigt") wird.

Daß der Patch noch nicht so richtig komplett ist (offenbar wird ja eine Abhängigkeit der STDCXXLIB noch nicht richtig aufgelöst, wenn Du die von Hand kopieren mußt), ist Dir ja sicherlich bewußt.

@Pigro95:
Das Auspacken des tar-Files nach "make" sollte schon ausreichend sein für das Anwenden der Patches. Das Kopieren in den Source-Ordner von MySQL ist nicht notwendig, die fliegen ohnehin irgendwann weg. Ich würde erst mal ein "distclean/dirclean" vorschlagen und dann ein gezieltes "make precompiled" für das Paket. Dann bleibt das Protokoll schön kurz.
EDIT: Falls das unklar blieb, auch die Clean-Calls würde ich nur für das Paket machen, wenn keine Gründe für zusätzliche Aktionen vorliegen.
 
Zuletzt bearbeitet:
@Pigro95:
Das Auspacken des tar-Files nach "make" sollte schon ausreichend sein für das Anwenden der Patches. Das Kopieren in den Source-Ordner von MySQL ist nicht notwendig, die fliegen ohnehin irgendwann weg. Ich würde erst mal ein "distclean/dirclean" vorschlagen und dann ein gezieltes "make precompiled" für das Paket. Dann bleibt das Protokoll schön kurz.

EDIT: Falls das unklar blieb, auch die Clean-Calls würde ich nur für das Paket machen, wenn keine Gründe für zusätzliche Aktionen vorliegen.

Vielen Dank für die kleine Anleitung.

Jedoch bin ich jetzt nicht ganz sicher, was ich machen soll.

Du schreibst ja, dass ich nach dem make das .tar Archiv entpacken soll. Allerdings habe ich doch nach dem make schon das fertige Freetz-Image? Heisst das, dass ich nach dem make das mysql Archiv in das make-Verzeichnis legen soll und dann make precompiled ausführen soll? Bekomme ich dann ein Freetzimage oder muss ich dann nochmals make ausführen?

LG Pigro95
 
Das tar-Archiv soll in das Verzeichnis "make" ausgepackt werden. Das hat nichts mit der Reihenfolge irgendwelcher Kommandos zu tun ... mir war nicht einmal aufgefallen, daß die zu kurze Formulierung mißverständlich war.
 
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.