FastCGI PHP und Apache im Chroot

Apache, Lighttpd, nginx, Cherokee
hasch
Posts: 99
Joined: 2007-03-09 15:23

FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 10:38

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?

sledge0303
Posts: 695
Joined: 2005-09-16 00:06
Location: Berlin-Reinickendorf

Re: FastCGI PHP und Apache im Chroot

Post by sledge0303 » 2007-05-21 11:24

Es willst erstmal alle Abhängigkeiten in das Chroot kopieren.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 13:38

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?

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 16:15

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???

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: FastCGI PHP und Apache im Chroot

Post by daemotron » 2007-05-21 16:29

/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.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 16:42

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 :)

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: FastCGI PHP und Apache im Chroot

Post by kase » 2007-05-21 16:51

Was sagt denn

Code: Select all

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

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 16:52

Das gleiche, nix... Der lädt und lädt und lädt :)

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: FastCGI PHP und Apache im Chroot

Post by kase » 2007-05-21 17:36

Leg mal eine /etc/resolv.conf in deinem chroot an.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 17:40

War angelegt, gleiches "Spiel" :)

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: FastCGI PHP und Apache im Chroot

Post by kase » 2007-05-21 18:37

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.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 18:45

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!?

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: FastCGI PHP und Apache im Chroot

Post by kase » 2007-05-21 19:39

Logs? (error,access,suexec)

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 20:07

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)... :)

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: FastCGI PHP und Apache im Chroot

Post by oxygen » 2007-05-21 20:31

bau PHP, Apache etc doch mal statisch.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 20:43

Wie statisch??? :)

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: FastCGI PHP und Apache im Chroot

Post by Roger Wilco » 2007-05-21 20:59

Ohne Abhängigkeiten auf dynamisch hinzulinkbare Bibliotheken...

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 21:33

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??? :)

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: FastCGI PHP und Apache im Chroot

Post by Roger Wilco » 2007-05-21 22:01

Code: Select all

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

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: FastCGI PHP und Apache im Chroot

Post by hasch » 2007-05-21 22:49

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... :)