Page 1 of 1

FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 10:38
by hasch
Nachdem alles perfekt lief, wollte ich den Apache samt PHP, MySQL usw. ins chroot stecken, nun funktioniert aber fastcgi im chroot nur noch mangelhaft, erst einmal dauert es minuten bis ein FastCGI Prozess erzeugt ist, manachmal erhalte ich dann eine HTTP 500 Nachricht usw.

Die Logs sagen folgendes:
[Mon May 21 08:23:15 2007] [notice] mod_fcgid: call /var/www/x.de/public/php.php with wrapper /var/www/x.de/cgi-bin/php5.fcgi
[Mon May 21 08:24:09 2007] [warn] mod_fcgid: process 3398 graceful kill fail, sending SIGKILL
[Mon May 21 08:24:15 2007] [notice] mod_fcgid: process /var/www/x.de/public/php.php(3398) exit(communication error), get stop signal 9


[Mon May 21 08:24:00 2007] [error] [client x] Premature end of script headers: php.php
Wrapper sieht aus wie immer und hat auch alles seine gleichen Berechtigungen, wie ohne chroot:

Code: Select all

#!/bin/sh

PHPRC="/usr/local/apache/php-ini/x.de"
export PHPRC

PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /usr/local/apache/php-binary/php5/bin/php
Hat jemand eine Idee, woran dies liegen kann?

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 11:24
by sledge0303
Es willst erstmal alle Abhängigkeiten in das Chroot kopieren.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 13:38
by hasch
Ja scheinbar liegts an PHP, also alle nötigen Libs, die ich über ldd pfadzuphp/bin/php bekommen konnte, hab ich ins chroot noch gesteckt...
Wie kann ich rausfinden, was noch fehlt?

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 16:15
by hasch
Niemand eine Idee? Ich habe php mal direkt aufgerufen, einmal als chroot und einmal normal...

strace im chroot (Ausschnitt):
execve("/usr/sbin/chroot", ["chroot", "/chroot", "/usr/local/apache/php-binary/php"..., "-f", "/php.php"], [/* 20 vars */]) = 0
uname({sys="Linux", node="www.x.de", ...}) = 0
brk(0) = 0x804c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=26545, ...}) = 0
old_mmap(NULL, 26545, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fe1000
close(3) = 0
open("/lib/tls/libc.so.6", O_RDONLY) = 3
read(3, "177ELF111\0\0\0\0\0\0\0\0\03\03\01\0\0\0320N1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1526108, ...}) = 0
old_mmap(NULL, 1227996, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7eb5000
old_mmap(0xb7fdb000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x125000) = 0xb7fdb000
old_mmap(0xb7fdf000, 7388, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fdf000
close(3) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7eb4000
mprotect(0xb7fdb000, 8192, PROT_READ) = 0
mprotect(0xb7ffe000, 4096, PROT_READ) = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7eb4aa0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7fe1000, 26545) = 0
brk(0) = 0x804c000
brk(0x806d000) = 0x806d000
chroot("/chroot") = 0
chdir("/") = 0
execve("/usr/local/apache/php-binary/php-5.2.2/bin/php", ["/usr/local/apache/php-binary/php"..., "-f", "/php.php"], [/* 20 vars */]) = 0
uname({sys="Linux", node="www.x.de", ...}) = 0
brk(0) = 0x85b7000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/sse2/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/sse2", 0xbfffd060) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686", 0xbfffd060) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/sse2/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/sse2", 0xbfffd060) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls", 0xbfffd060) = -1 ENOENT (No such file or directory)
strace normal (Ausschnitt):
execve("/chroot/usr/local/apache/php-binary/php-5.2.2/bin/php", ["/chroot/usr/local/apache/php-bin"..., "-f", "/php.php"], [/* 20 vars */]) = 0
uname({sys="Linux", node="www.x.de", ...}) = 0
brk(0) = 0x85b7000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/sse2/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/sse2", 0xbfffd050) = -1 ENOENT (No such file or directory)
open("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686/libcrypt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/local/apache/mysql-5.0.41/lib/mysql/tls/i686", 0xbfffd050) = -1 ENOENT (No such file or directory)
Ich werde leider nicht schlau, was da noch fehlt, sieht von euch jemand da etwas???

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 16:29
by daemotron
/lib/ld-linux.so.2 vielleicht vergessen? Die wird von ldd als Abhängigkeit meist nicht mit ausgegeben... Ansonsten schau doch mal hier - ist zwar auf Gentoo bezogen, aber so ähnlich müsste es mit anderen Distributionen auch funktionieren.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 16:42
by hasch
Danke dir, nein die Datei ist vorhanden, habe auch alle Libs mit ins chroot kopiert... Apache, MySQL usw. haben ja alle keine Probleme, nur der PHP Interpreter, der "hackt irgendwo", deshalb wollte ich ja schaun worans liegt mit "chroot /chroot /usr/local/apache/php-binary/php-5.2.2/bin/php -f /php.php" -> und genau da bekomme ich keine Ausgabe, siehe strace in meinem vorherigen Post :)
Das Tutorial behandelt ja nur Apache, nciht PHP im chroot :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 16:51
by kase
Was sagt denn

Code: Select all

chroot /chroot/ /usr/local/apache/php-binary/php-5.2.2/bin/php -v

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 16:52
by hasch
Das gleiche, nix... Der lädt und lädt und lädt :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 17:36
by kase
Leg mal eine /etc/resolv.conf in deinem chroot an.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 17:40
by hasch
War angelegt, gleiches "Spiel" :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 18:37
by kase
Also ich habe sonst keine Idee. PHP in ein Chroot zu stecken, war bisher immer total einfach. ld-linux.so kopieren und ein ldd auf das php-cgi, fertig. Eventuell hast du dir beim Bauen des php-bins etwas zerschossen. Benutz doch einfach mal das php-cgi deiner Distribution.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 18:45
by hasch
Ich hab jetzt einfach alle möglichen libexec, lib usw. mit ins chroot kopiert, jetzt kann ich auf PHP per Konsole chroot auch perfekt zugreifen, aber nun kommt per Fastcgi irgendetwas ins Rollen, wenn ich eine PHP Datei per Browser aufrufe, bekomme ich ein HTTP 500, wenn ich dann aber danach eine andere PHP Datei oder die gleiche per neuem Request aufrufe, geht es bestens für ein paar Sekunden, hat jemand eine Idee, was das sein könnte!?

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 19:39
by kase
Logs? (error,access,suexec)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 20:07
by hasch
Anscheinend doch wieder PHP, da bei PHP als chroot mit -v Ausgabe nix kommt, ka warum es vorhin kurz ging, hab es mit ner anderen php version getestet, die vorher funktionierte und auch da geht es nicht (Ausgaben siehe strace wie oben erwähnt)... :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 20:31
by oxygen
bau PHP, Apache etc doch mal statisch.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 20:43
by hasch
Wie statisch??? :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 20:59
by Roger Wilco
Ohne Abhängigkeiten auf dynamisch hinzulinkbare Bibliotheken...

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 21:33
by hasch
OK habe mal gegoogelt, leider nix zu php gefunden, apache brauch ich ja nich statisch, da dieser ja geht, liegt ja nur an php, könntest du mir noch nen tipp geben, wie man php statisch kompiliert??? :)

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 22:01
by Roger Wilco

Code: Select all

./configure --help|grep -E "static|shared"
Das im Verzeichnis mit dem PHP-Quellcode ausführen und die Ausgabe lesen.

Re: FastCGI PHP und Apache im Chroot

Posted: 2007-05-21 22:49
by hasch
Also ich habe php nun mit --enable-static=yes kompiliert, aber trotzdem werden mir mit ldd trotzdem noch Abhängigkeiten angegeben!? :)

EDIT: Ich habe jtzt vor Verzweiflung alle Dateien des normalen Linux ins chroot gepackt und dann gings, muss dann eben jetzt alle Dateien, die dort nix zu suchen haben manuell löschen... :)