Server Installation · 14 min read · Nov 05, 2025

ISPCP auf Ubuntu Lucid x86_64 installieren und Chroot pro virtuellen Host in Apache2 implementieren

ISPCP auf Ubuntu Lucid x86_64 installieren und Chroot pro virtuellen Host in Apache2 implementieren

Server installieren

Installieren Sie einen grundlegenden Ubuntu Lucid x86_64-Server, indem Sie die ersten beiden Seiten von The Perfect Server - Ubuntu Lucid Lynx (Ubuntu 10.04) [ISPConfig 2] howto befolgen.

ISPCP installieren

Laden Sie die ISPCP-Quellen von der offiziellen Download-Seite herunter. Dieser Leitfaden basiert auf 1.0.6. Entpacken Sie es und wechseln Sie in das entpackte Verzeichnis.

tar xf iscp-omega-1.0.6.tar.gz
cd ispcp-omega-1.0.6
cp docs/Ubuntu/ubuntu-packages-karmic docs/Ubuntu/ubuntu-packages-lucid

Bearbeiten Sie docs/Ubuntu/ubuntu-packages-lucid und ersetzen Sie diese Einträge:

libmd5-perl
libmysqlclient15off

durch diese:

libdigestmd5-perl
libmysqlclient16

Befolgen Sie die Installationsschritte, die in docs/Ubuntu/INSTALL beschrieben sind. Stellen Sie beim Ausführen von ispcp-setup sicher, dass Sie FastCGI auswählen. Ihr standardmäßiges ISPCP-System sollte zu diesem Zeitpunkt funktionieren, und die Ausgabe von ps auxf sollte sehr ähnlich aussehen wie diese:

root     25761  0.0  1.7 138304 36360 ?        Ss   10:56   0:00 /usr/sbin/apache2 -k start
root     25762  0.0  0.0   4096   580 ?        S    10:56   0:00  \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger -e
root     25764  0.0  0.7  62624 15416 ?        S    10:56   0:00  |   \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger -e
root     25763  0.0  0.0   4096   576 ?        S    10:56   0:00  \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger
root     25765  0.0  0.7  62624 15416 ?        S    10:56   0:00  |   \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger
www-data 25766  0.0  1.6 138004 34416 ?        S    10:56   0:00  \_ /usr/sbin/apache2 -k start
www-data 25767  0.0  1.6 138004 34372 ?        S    10:56   0:00  \_ /usr/sbin/fcgi-pm -k start
vu2000   25768  0.0  0.4 147120  8936 ?        Ss   10:56   0:00  |   \_ /usr/bin/php5-cgi
vu2000   25826  0.0  0.7 155448 15156 ?        S    10:56   0:00  |       \_ /usr/bin/php5-cgi
vu2000   25827  0.0  0.1 147120  3788 ?        S    10:56   0:00  |       \_ /usr/bin/php5-cgi
www-data 25769  0.0  1.8 427808 37468 ?        Sl   10:56   0:00  \_ /usr/sbin/apache2 -k start
www-data 25778  0.0  1.7 427688 36796 ?        Sl   10:56   0:00  \_ /usr/sbin/apache2 -k start

Benutzerdefinierten Suexec-Wraper kompilieren

Der größte Teil dieses Abschnitts basiert auf dem hervorragenden Beitrag bei metaclarity. Laden Sie die Apache HTTPd-Quellen von der offiziellen Download-Seite herunter. Dieser Leitfaden basiert auf 2.2.16.

tar xf httpd-2.2.16.tar.bz2
cd httpd-2.2.16/support

Wenden Sie die Patches an.

--- Makefile.in.old 2009-04-21 09:59:33.000000000 -0400
+++ Makefile.in 2009-04-21 10:04:11.000000000 -0400
@@ -59,9 +59,13 @@
    $(LINK) $(checkgid_LTFLAGS) $(checkgid_OBJECTS) $(PROGRAM_LDADD)
 
 suexec_OBJECTS = suexec.lo
-suexec: $(suexec_OBJECTS)
+suexec: $(suexec_OBJECTS) suexec-phpfcgi
    $(LINK) $(suexec_OBJECTS)
 
+suexec-phpfcgi_OBJECTS = suexec-phpfcgi.lo
+suexec-phpfcgi: $(suexec-phpfcgi_OBJECTS)
+    $(LINK) $(suexec-phpfcgi_OBJECTS)
+
 htcacheclean_OBJECTS = htcacheclean.lo
 htcacheclean: $(htcacheclean_OBJECTS)
    $(LINK) $(htcacheclean_LTFLAGS) $(htcacheclean_OBJECTS) $(PROGRAM_LDADD) 
--- suexec.c    2010-07-12 11:26:29.000000000 +0200
+++ suexec-phpfcgi.c    2010-09-14 10:07:36.581742585 +0200
@@ -259,6 +259,7 @@
     char *cmd;              /* auszuführender Befehl    */
     char cwd[AP_MAXPATH];   /* aktuelles Arbeitsverzeichnis */
     char dwd[AP_MAXPATH];   /* docroot Arbeitsverzeichnis */
+    char nwd[AP_MAXPATH];   /* nach-chroot Arbeitsverzeichnis  */
     struct passwd *pw;      /* Passwort-Eintrag Halter     */
     struct group *gr;       /* Gruppen-Eintrag Halter        */
     struct stat dir_info;   /* Verzeichnisinfo Halter     */
@@ -456,7 +457,6 @@
         log_err("kann nicht als verbotene uid (%d/%s) ausgeführt werden\n", uid, cmd);
         exit(107);
     }
-
     /*
      * Fehler, wenn versucht wird, als Root-Gruppe oder als GID kleiner als AP_GID_MIN auszuführen.  Tsk tsk.
@@ -466,6 +466,42 @@
         exit(108);
     }
 
+
+    int striplen = strlen (target_homedir);
+
+    char* tlen = strchr(target_homedir, '/');
+    char* hlen = strchr(tlen+1, '/');
+    char* ulen = strchr(hlen+1, '/');
+    char* chroot_dir = strndup(target_homedir, striplen);
+    char* pt = getenv("PATH_TRANSLATED");
+    if (pt != 0) {
+      setenv("PATH_TRANSLATED", pt + (ulen - target_homedir), 1);
+    }
+
+    setenv("DOCUMENT_ROOT", "/", 1);
+
+    if (getcwd(nwd, AP_MAXPATH) == NULL) {
+        log_err("kann aktuelles Arbeitsverzeichnis (prechroot) nicht abrufen\n");
+        exit(111);
+    }
+
+    char* trunc_nwd = strndup("/fcgi", 5);
+
+    if (chdir(chroot_dir)) {
+        log_err("kritisch: kann nicht in chroot-Verzeichnis (%s) wechseln",chroot_dir);
+        exit(121);
+    }
+
+    if (chroot(chroot_dir) != 0) {
+      log_err("Notfall: chroot fehlgeschlagen (%s, %s)\n", chroot_dir, cmd);
+      exit(122);
+    }
+
+    if (chdir (trunc_nwd)) {
+        log_err("kritisch: kann nicht in %s innerhalb von chroot %s wechseln\n", trunc_nwd, chroot_dir);
+        exit(42);
+    }
+
     /*
      * UID/GID hier ändern, damit die folgenden Tests über NFS funktionieren.
      *
@@ -498,22 +534,11 @@
         exit(111);
     }
 
-    if (userdir) {
-        if (((chdir(target_homedir)) != 0) ||
-            ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("kann docroot-Informationen (%s) nicht abrufen", target_homedir);
-            exit(112);
-        }
-    }
-    else {
-        if (((chdir(AP_DOC_ROOT)) != 0) ||
-            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
-            ((chdir(cwd)) != 0)) {
-            log_err("kann docroot-Informationen (%s) nicht abrufen", AP_DOC_ROOT);
-            exit(113);
-        }
+    if (((chdir(getenv("DOCUMENT_ROOT"))) != 0) ||
+        ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
+        ((chdir(cwd)) != 0)) {
+        log_err("kann docroot-Informationen (%s) nicht abrufen", AP_DOC_ROOT);
+        exit(113);
     }
 
     if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
@@ -565,7 +590,7 @@
      * Fehler, wenn der Zielname/die Gruppe von
      * dem Namen/der Gruppe des cwd oder des Programms abweicht.
      */
-    if ((uid != dir_info.st_uid) ||
+/*    if ((uid != dir_info.st_uid) ||
         (gid != dir_info.st_gid) ||
         (uid != prg_info.st_uid) ||
         (gid != prg_info.st_gid)) {
@@ -575,7 +600,7 @@
                 dir_info.st_uid, dir_info.st_gid,
                 prg_info.st_uid, prg_info.st_gid);
         exit(120);
-    }
+    }*/
     /*
      * Fehler, wenn das Programm für den Benutzer nicht ausführbar ist.
      * Andernfalls findet sie keinen Fehler in den Protokollen, außer für 
patch -p0 < ../../makefile.diff
patch -p0 -o suexec-phpfcgi.c < ../../suexec-phpfcgi.diff

Bearbeiten Sie suexec.h:

AP_HTTPD_USER www-data
AP_UID_MIN 2000
AP_GID_MIN 2000
AP_LOG_EXEC "/tmp/suexec.log"
AP_DOC_ROOT "/"
cd ..
configure --prefix=/usr/lib/apache2 --enable-suexec --enable-mods-shared=most --enable-so --with-mpm=worker --with-included-apr
cd support
make suexec

Installieren Sie den neuen suexec-Wraper.

cp suexec-phpfcgi /usr/lib/apache2
chown .www-data /usr/lib/apache2/suexec-phpfcgi
chmod 4751 /usr/lib/apache2/suexec-phpfcgi

Aktualisieren Sie /etc/apache2/modules-enables/fastcgi_ispcp.conf, um den neuen Wrapper zu verwenden:

FastCgiWrapper /usr/lib/apache2/suexec-phpfcgi

Chroot für virtuelle Hosts erstellen

Das Folgende ist ein ausreichendes Chroot. Ich habe meines in /usr/local/skel gelegt. Sie möchten möglicherweise weitere/andere Zeitzonen hinzufügen.

.
\__ bin -> chroot/bin
\__ chroot
|   \__ bin
|   |   \__ dash
|   |   \__ sh -> dash
|   \__ dev
|   |   \__ null
|   |   \__ urandom
|   |   \__ zero
|   \__ etc
|   |   \__ group
|   |   \__ host.conf
|   |   \__ hosts
|   |   \__ locale.alias
|   |   \__ localtime
|   |   \__ nsswitch.conf
|   |   \__ passwd
|   |   \__ php5
|   |   |   \__ cgi
|   |   |   |   \__ conf.d -> ../conf.d
|   |   |   |   \__ php.ini
|   |   |   \__ conf.d
|   |   |   |   \__ adodb.ini
|   |   |   |   \__ gd.ini
|   |   |   |   \__ mcrypt.ini
|   |   |   |   \__ mysqli.ini
|   |   |   |   \__ mysql.ini
|   |   |   |   \__ pdo.ini
|   |   |   |   \__ pdo_mysql.ini
|   |   |   \__ php.ini
|   |   \__ protocols
|   |   \__ resolv.conf
|   |   \__ services
|   \__ lib
|   |   \__ ld-2.11.1.so
|   |   \__ ld-linux-x86-64.so.2 -> ld-2.11.1.so
|   |   \__ libbz2.so.1 -> libbz2.so.1.0.4
|   |   \__ libbz2.so.1.0 -> libbz2.so.1.0.4
|   |   \__ libbz2.so.1.0.4
|   |   \__ libc-2.11.1.so
|   |   \__ libcom_err.so.2 -> libcom_err.so.2.1
|   |   \__ libcom_err.so.2.1
|   |   \__ libcrypt-2.11.1.so
|   |   \__ libcrypto.so.0.9.8
|   |   \__ libcrypt.so.1 -> libcrypt-2.11.1.so
|   |   \__ libc.so.6 -> libc-2.11.1.so
|   |   \__ libdl-2.11.1.so
|   |   \__ libdl.so.2 -> libdl-2.11.1.so
|   |   \__ libexpat.so.1 -> libexpat.so.1.5.2
|   |   \__ libexpat.so.1.5.2
|   |   \__ libgcc_s.so.1
|   |   \__ libkeyutils-1.2.so
|   |   \__ libkeyutils.so.1 -> libkeyutils-1.2.so
|   |   \__ libm-2.11.1.so
|   |   \__ libm.so.6 -> libm-2.11.1.so
|   |   \__ libncurses.so.5 -> libncurses.so.5.7
|   |   \__ libncurses.so.5.7
|   |   \__ libnsl-2.11.1.so
|   |   \__ libnsl.so.1 -> libnsl-2.11.1.so
|   |   \__ libnss_dns-2.11.1.so
|   |   \__ libnss_dns.so.2 -> libnss_dns-2.11.1.so
|   |   \__ libnss_files-2.11.1.so
|   |   \__ libnss_files.so.2 -> libnss_files-2.11.1.so
|   |   \__ libnss_nis-2.11.1.so
|   |   \__ libnss_nis.so.2 -> libnss_nis-2.11.1.so
|   |   \__ libpam.so.0 -> libpam.so.0.82.2
|   |   \__ libpam.so.0.82.2
|   |   \__ libpcre.so.3 -> libpcre.so.3.12.1
|   |   \__ libpcre.so.3.12.1
|   |   \__ libpng12.so.0 -> libpng12.so.0.42.0
|   |   \__ libpng12.so.0.42.0
|   |   \__ libpthread-2.11.1.so
|   |   \__ libpthread.so.0 -> libpthread-2.11.1.so
|   |   \__ libresolv-2.11.1.so
|   |   \__ libresolv.so.2 -> libresolv-2.11.1.so
|   |   \__ librt-2.11.1.so
|   |   \__ librt.so.1 -> librt-2.11.1.so
|   |   \__ libselinux.so.1
|   |   \__ libssl.so.0.9.8
|   |   \__ libz.so.1 -> libz.so.1.2.3.3
|   |   \__ libz.so.1.2.3.3
|   \__ lib64 -> lib
|   \__ usr
|       \__ bin
|       |   \__ php5-cgi
|       \__ lib
|       |   \__ apache2
|       |   |   \__ logs -> /var/log/apache2
|       |   \__ gconv
|       |   |   \__ gconv-modules
|       |   |   \__ gconv-modules.cache
|       |   \__ libdb-4.8.so
|       |   \__ libfontconfig.so.1 -> libfontconfig.so.1.4.4
|       |   \__ libfontconfig.so.1.4.4
|       |   \__ libfreetype.so.6 -> libfreetype.so.6.3.22
|       |   \__ libfreetype.so.6.3.22
|       |   \__ libgd.so.2 -> libgd.so.2.0.0
|       |   \__ libgd.so.2.0.0
|       |   \__ libgssapi_krb5.so.2 -> libgssapi_krb5.so.2.2
|       |   \__ libgssapi_krb5.so.2.2
|       |   \__ libjpeg.so.62 -> libjpeg.so.62.0.0
|       |   \__ libjpeg.so.62.0.0
|       |   \__ libk5crypto.so.3 -> libk5crypto.so.3.1
|       |   \__ libk5crypto.so.3.1
|       |   \__ libkrb5.so.3 -> libkrb5.so.3.3
|       |   \__ libkrb5.so.3.3
|       |   \__ libkrb5support.so.0 -> libkrb5support.so.0.1
|       |   \__ libkrb5support.so.0.1
|       |   \__ libmcrypt.so.4 -> libmcrypt.so.4.4.8
|       |   \__ libmcrypt.so.4.4.8
|       |   \__ libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
|       |   \__ libmysqlclient_r.so.16.0.0
|       |   \__ libt1.so.5 -> libt1.so.5.1.2
|       |   \__ libt1.so.5.1.2
|       |   \__ libX11.so.6 -> libX11.so.6.3.0
|       |   \__ libX11.so.6.3.0
|       |   \__ libXau.so.6 -> libXau.so.6.0.0
|       |   \__ libXau.so.6.0.0
|       |   \__ libxcb.so.1 -> libxcb.so.1.1.0
|       |   \__ libxcb.so.1.1.0
|       |   \__ libXdmcp.so.6 -> libXdmcp.so.6.0.0
|       |   \__ libXdmcp.so.6.0.0
|       |   \__ libxml2.so.2 -> libxml2.so.2.7.6
|       |   \__ libxml2.so.2.7.6
|       |   \__ libXpm.so.4 -> libXpm.so.4.11.0
|       |   \__ libXpm.so.4.11.0
|       |   \__ locale
|       |   |   \__ en_ZA.utf8
|       |   |   \__ LC_ADDRESS
|       |   |   \__ LC_COLLATE
|       |   |   \__ LC_CTYPE
|       |   |   \__ LC_IDENTIFICATION
|       |   |   \__ LC_MEASUREMENT
|       |   |   \__ LC_MESSAGES
|       |   |   |   \__ SYS_LC_MESSAGES
|       |   |   \__ LC_MONETARY
|       |   |   \__ LC_NAME
|       |   |   \__ LC_NUMERIC
|       |   |   \__ LC_PAPER
|       |   |   \__ LC_TELEPHONE
|       |   |   \__ LC_TIME
|       |   \__ php5
|       |   |   \__ 20090626
|       |   |   \__ adodb.so
|       |   |   \__ gd.so
|       |   |   \__ mcrypt.so
|       |   |   \__ mysqli.so
|       |   |   \__ mysql.so
|       |   |   \__ pdo_mysql.so
|       |   |   \__ pdo.so
|       |   \__ sendmail -> ../sbin/mini_sendmail
|       \__ lib64 -> lib
|       \__ sbin
|       |   \__ mini_sendmail
|       |   \__ sendmail -> mini_sendmail
|       \__ share
|           \__ locale
|           |   \__ locale.alias -> /etc/locale.alias
|           \__ zoneinfo
|               \__ Africa
|                   \__ Johannesburg
\__ dev -> chroot/dev
\__ etc -> chroot/etc
\__ fcgi
|   \__ php5-fcgi-starter
\__ lib -> chroot/lib
\__ lib64 -> chroot/lib64
\__ logs
\__ tmp
\__ usr -> chroot/usr
\__ var
    \__ lib
    |   \__ apache2
    |   \__ php5
    \__ log
    |   \__ apache2 -> /logs
    \__ www
        \__ virtual

Vollständiges Chroot

Für jeden erstellten virtuellen Host sollte das oben definierte Chroot in das Home-Verzeichnis des virtuellen Hosts kopiert werden. Zum Beispiel gilt für den virtuellen Host example.org, der als Benutzer vu2009 läuft:

cp -a /usr/local/skel/* ~vu2009/

Zusätzlich ist Folgendes erforderlich:

mkdir -p ~vu2009/var/www/virtual/example.org
cd ~vu2009/var/www/virtual/example.org && ln -s /htdocs htdocs

Erstellen Sie auch einen Link für jede Subdomain. Wenn Sie Subdomains one.example.org und two.example.org haben, tun Sie auch:

cd ~vu2009/var/www/virtual/example.org && ln -s /one one
cd ~vu2009/var/www/virtual/example.org && ln -s /two two

Beachten Sie, dass diese Symlinks beschädigt erscheinen. Sie funktionieren jedoch, wenn man bedenkt, dass ~vu2009 die Wurzel des chroot’ed Dateisystems ist.

ispcp.conf aktualisieren

Stellen Sie sicher, dass die Datenbank TCP (127.0.0.1) verwendet, nicht Sockets (localhost). Der chroot’ed vhost kann den MySQL-Socket, der sich in /var/run/mysqld/mysqld.sock befindet, nicht sehen.

DATABASE_HOST = 127.0.0.1

Master-Virtual-Host aktualisieren

Benötigen Sie ein wenig mehr Symlink-Magie.

cd /var/www/fcgi/master && ln -s / fcgi
cp -a /var/www/fcgi/master /var/www/ispcp/gui/var/www/fgci/master

Aktualisieren Sie /etc/passwd, ändern Sie das Home-Verzeichnis von vu2000 (Master-Benutzer) in /var/www/ispcp/gui. Das Kontrollpanel muss in der Lage sein, die Hauptkonfiguration zu lesen. Diese Datei ändert sich nie, daher ist eine direkte Kopie in Ordnung.

cp /etc/ispcp/ispcp.conf /var/www/ispcp/gui/etc/ispcp/
cd /var/www/ispcp/gui/var/www/ispcp/ && ln -s / gui

Apache2 chrooten

mkdir /var/www-jail

Aktualisieren Sie /etc/apache2/httpd.conf:

ChRootDir /var/www-jail
mkdir -p /var/www-jail/var/www
mount -o bind /var/www /var/www-jail/var/www

Sobald chroot’ed, müssen die FastCGI-Sockets den vhosts zur Verfügung stehen.

mount -o bind /var/lib/apache2/fastcgi /var/www-jail/var/lib/apache2/fastcgi

Machen Sie diese Mounts dauerhaft, indem Sie sie zu /etc/fstab hinzufügen:

/var/www /var/www-jail/var/www none bind
/var/lib/apache2/fastcgi /var/www-jail/var/lib/apache2/fastcgi none bind

Sendmail Mini

Postfix hat viele Abhängigkeiten, daher ist es vorzuziehen, es nicht in die chroots der vhosts aufzunehmen. Laden Sie stattdessen mini_sendmail von hier herunter und kompilieren Sie es. Es würde nicht statisch verlinkt funktionieren, benötigt jedoch keine weiteren Bibliotheken als die, die wir bereits in den chroots haben, also ist es in Ordnung. Bearbeiten Sie die Makefile:

CFLAGS =      -g
#LDFLAGS =    -s -static
LDFLAG =      -g

Wir geben dem Wrapper nicht annähernd genug Informationen, damit er zufrieden ist, also ändern wir es etwas:

--- mini_sendmail-1.3.6/mini_sendmail.c 2005-06-29 19:37:15.000000000 +0200
+++ mini_sendmail-1.3.6-mine/mini_sendmail.c    2010-10-01 15:12:40.947187053 +0200
@@ -30,7 +30,7 @@
  Wenn Sie die Funktionen nicht möchten, können Sie die Symbole undefinieren; einige von ihnen bedeuten
  eine erhebliche Einsparung bei der Größe der ausführbaren Datei.
 */
-#define DO_RECEIVED    /* ob einen "Received:"-Header hinzufügen */
+#undef DO_RECEIVED     /* ob einen "Received:"-Header hinzufügen */
 #define DO_GETPWUID    /* ob versucht werden soll, ein getpwuid() auszuführen, wenn getlogin() fehlschlägt */
 #define DO_MINUS_SP    /* ob die -s- und -p-Flags implementiert werden sollen */
 #define DO_DNS         /* ob eine Namenssuche bei -s durchgeführt werden soll oder nur IP# */
@@ -122,6 +122,8 @@
        {
        if ( strncmp( argv[argn], "-f", 2 ) == 0 && argv[argn][2] != '\0' )
            fake_from = &(argv[argn][2]);
+       else if ( strncmp( argv[argn], "-f", 2) == 0)
+           fake_from = &(argv[++argn][0]);
        else if ( strcmp( argv[argn], "-t" ) == 0 )
            parse_message = 1;
 #ifdef DO_MINUS_SP
@@ -145,33 +147,32 @@
        ++argn;
        }
-    username = getlogin();
-    if ( username == (char*) 0 )
-       {
+    if ( fake_from == (char*) 0 ) {
+       username = getlogin();
+       if ( username == (char*) 0 ) {
 #ifdef DO_GETPWUID
-       struct passwd* pw = getpwuid( getuid() );
-       if ( pw == (struct passwd*) 0 )
-           {
-           (void) fprintf( stderr, "%s: kann Benutzernamen nicht bestimmen\n", argv0 );
-           exit( 1 );
+           struct passwd* pw = getpwuid( getuid() );
+           if ( pw == (struct passwd*) 0 ) {
+               (void) fprintf( stderr, "%s: kann Benutzernamen nicht bestimmen\n", argv0 );
+               exit( 1 );
            }
-       username = pw->pw_name;
+           username = pw->pw_name;
 #else /* DO_GETPWUID */
-       (void) fprintf( stderr, "%s: kann Benutzernamen nicht bestimmen\n", argv0 );
-       exit( 1 );
+           (void) fprintf( stderr, "%s: kann Benutzernamen nicht bestimmen\n", argv0 );
+           exit( 1 );
 #endif /* DO_GETPWUID */
        }
-
-    if ( gethostname( hostname, sizeof(hostname) - 1 ) < 0 )
-       show_error( "gethostname" );
-
-    if ( fake_from == (char*) 0 )
        (void) snprintf( from, sizeof(from), "%s@%s", username, hostname );
-    else
+    } else {
        if ( strchr( fake_from, '@' ) == (char*) 0 )
            (void) snprintf( from, sizeof(from), "%s@%s", fake_from, hostname );
        else
            (void) snprintf( from, sizeof(from), "%s", fake_from );
+    }
+
+    if ( gethostname( hostname, sizeof(hostname) - 1 ) < 0 )
+       show_error( "gethostname" );
+
     /* Entfernen Sie alle spitzen Klammern in der Absenderadresse. */
     while ( from[0] == '<' )
make
mkdir -p /usr/local/skel/usr/sbin/
cp mini_sendmail /usr/local/skel/usr/sbin/
cd /usr/local/skel/usr/sbin/
ln -s mini_sendmail sendmail

Test

Erstellen Sie ein paar virtuelle Hosts und sehen Sie, ob PHP läuft. Wenn alles gut geht, sollte die Ausgabe von ps auxf sehr ähnlich aussehen wie:

root     25761  0.0  1.7 138304 36360 ?        Ss   10:56   0:00 /usr/sbin/apache2 -k start
root     25762  0.0  0.0   4096   580 ?        S    10:56   0:00  \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger -e
root     25764  0.0  0.7  62624 15424 ?        S    10:56   0:00  |   \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger -e
root     25763  0.0  0.0   4096   576 ?        S    10:56   0:00  \_ /bin/sh -c /var/www/ispcp/engine/ispcp-apache-logger
root     25765  0.0  0.7  62624 15452 ?        S    10:56   0:00  |   \_ /usr/bin/perl /var/www/ispcp/engine/ispcp-apache-logger
www-data 25766  0.0  1.6 138004 34416 ?        S    10:56   0:00  \_ /usr/sbin/apache2 -k start
www-data 25767  0.0  1.6 138004 34440 ?        S    10:56   0:00  \_ /usr/sbin/fcgi-pm -k start
vu2000   25768  0.0  0.4 147120  8936 ?        Ss   10:56   0:00  |   \_ /usr/bin/php5-cgi
vu2000   25826  0.0  0.7 155448 15332 ?        S    10:56   0:00  |   |   \_ /usr/bin/php5-cgi
vu2000   25827  0.0  0.7 155192 14984 ?        S    10:56   0:00  |   |   \_ /usr/bin/php5-cgi
vu2007   11282  0.0  0.3 124356  7968 ?        Ss   15:16   0:00  |   \_ /usr/bin/php5-cgi
vu2007   11284  0.1  0.5 129676 11560 ?        S    15:16   0:00  |   |   \_ /usr/bin/php5-cgi
vu2007   11285  0.1  0.5 131340 11756 ?        S    15:16   0:00  |   |   \_ /usr/bin/php5-cgi
vu2058   11292  1.0  0.3 124356  7972 ?        Ss   15:17   0:00  |   \_ /usr/bin/php5-cgi
vu2058   11294 13.0  1.3 145292 27836 ?        S    15:17   0:00  |       \_ /usr/bin/php5-cgi
vu2058   11295  0.0  0.1 124356  3512 ?        S    15:17   0:00  |       \_ /usr/bin/php5-cgi
www-data 25769  0.0  1.8 428520 38416 ?        Sl   10:56   0:00  \_ /usr/sbin/apache2 -k start
www-data 25778  0.0  1.8 428356 38008 ?        Sl   10:56   0:00  \_ /usr/sbin/apache2 -k start

Nützliche Debugging-Tools sind das strace’ing des FastCGI-Prozessmanagers (PID 25767 in der obigen Ausgabe), wenn der vhost nicht startet:

strace -ff -p 25767

Überprüfen Sie auch die Ausgabe in /tmp/suexec.log. Das Strace der eigenen Prozesse des vhosts ist nützlich, wenn sie starten, aber nicht das ausgeben, was Sie sehen möchten (z. B. für vu2058 in der obigen Ausgabe):

strace -ff -p 11292 -p 11294 -p 11295
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.