FastCGI has failed to remain running for 30 seconds

Nach der Installation von FastCGI und dem ersten Test mit einem CGI-Skript sind folgende Fehlermeldungen im error_log vom Apache zu finden:

[error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/var/www/localhost/cgi-bin/hello.fcgi"

und mehrfach

[warn] FastCGI: (dynamic) server "/var/www/localhost/cgi-bin/hello.fcgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds

Mögliche Ursachen sind der vorangegangene Versuch ein gewöhnliches CGI-Skript mit FastCGI auszuführen und die Tatsache, dass das Perl-Modul FCGI nicht (in einem @INC-Pfad) installiert ist.

Gentoo Linux auf STRATO PowerServer-S installieren

Die folgende Anleitung beschreibt die Installation von Gentoo Linux auf einem STRATO PowerServer-S. Die Installation orientiert sich an der empfohlenen Vorgehensweise aus dem Gentoo Linux x86 Handbuch. Daher werden nur die von der Standardinstallation abweichenden, STRATO-spezifischen Schritte detailliert beschrieben. Für eine Erklärung der Installation im Einzelnen sei auf das Gentoo Linux x86 Handbuch verwiesen.

Vorbereitung

Rettungssystem starten

Bevor Sie mit der Installation loslegen, müssen noch ein paar Dinge erledigt werden. Um die Installation durchführen zu können, müssen Sie das Rettungssystem starten. Die Wahl des Bootmodus treffen Sie im Kundenservicebereich unter Serverkonfiguration > RecoveryManager. Dort wird der Bootmodus “Starten im Rettungssystem” und “Maschine resetten” ausgewählt und mit dem Button “Weiter” bestätigt. Nach ein paar Minuten steht das Rettungssystem für Sie bereit.

Hardware erkennen

Melden Sie sich auf dem Server an. Eine ausführliche Anleitung, wie Sie sich mit SSH (PuTTY) auf dem Server anmelden, finden Sie im FAQ-Bereich von STRATO.

~ $ ssh root@h913533.serverkompetenz.net

Nachdem Sie sich auf dem Server angemeldet haben, sollten Sie zuerst ein paar Information zur vorhandenen Hardware sammeln. Das ist wichtig, um später die Unterstützung für diese Hardwarekomponenten im Kernel zu aktivieren.

~# cat /proc/cpuinfo | grep “model name”
model name : Intel(R) Celeron(R) CPU 2.40GHz

~# lspci
00:00.0 Host bridge: Intel Corp. 82845 845 (Brookdale) Chipset Host Bridge (rev 04)
00:01.0 PCI bridge: Intel Corp. 82845 845 (Brookdale) Chipset AGP Bridge (rev 04)
00:1e.0 PCI bridge: Intel Corp. 82801BA/CA/DB PCI Bridge (rev 05)
00:1f.0 ISA bridge: Intel Corp. 82801BA ISA Bridge (LPC) (rev 05)
00:1f.1 IDE interface: Intel Corp. 82801BA IDE U100 (rev 05)
00:1f.3 SMBus: Intel Corp. 82801BA/BAM SMBus (rev 05)
02:06.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
02:07.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
02:08.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27)

Installation

Da das Rettungssystem bereits konfiguriert ist und eine Netzwerkanbindung bereitstellt, können Sie die Installation im Kapitel 4 des Gentoo Linux x86 Handbuchs starten.

Vorbereiten der Festplatte

Sehen Sie sich die Partitionierung der Festplatte an.

~# fdisk -l

Disk /dev/hda: 61.4 GB, 61492838400 bytes
255 heads, 63 sectors/track, 7476 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System  
/dev/hda1   *           1           7       56196   83  Linux  
/dev/hda2               8         138     1052257+  82  Linux swap / Solaris  
/dev/hda3             139        7476    58942485   83  Linux 

Im Beispiel haben wir uns entscheiden, keine Veränderungen an den Partitionen der Festplatte vorzunehmen.
Im nächsten Schritt formatieren Sie die Partitionen und legen die Dateisysteme an.

~# mke2fs /dev/hda1
~# mke2fs -j /dev/hda3
~# mkswap /dev/hda2

Nachdem die Dateisysteme angelegt sind, mounten Sie die Partitionen.

~# swapon /dev/hda2
~# mkdir /mnt/gentoo
~# mount /dev/hda3 /mnt/gentoo
~# mkdir /mnt/gentoo/boot
~# mount /dev/hda1 /mnt/gentoo/boot

Die Festplatte ist nun vorbereitet und Sie können zu Kapitel 5 im Gentoo Linux x86 Handbuch übergehen.

Installation der Gentoo Installationsdateien

Das Gentoo Linux x86 Handbuch sieht vor, die benötigten Dateien mit dem Programm links zu suchen und herunterzuladen. Das STRATO Rettungssystem hat links nicht installiert, weshalb hier auf wget zurückgegriffen wird. Suchen Sie auf den Mirror-Servern nach den benötigten Installationsdateien und laden Sie sie mit wget herunter:

~# cd /mnt/gentoo
/mnt/gentoo# wget ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo/releases/x86/current/stages/stage3-i686-2006.0.tar.bz2
/mnt/gentoo# wget ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo/releases/x86/current/stages/stage3-i686-2006.0.tar.bz2.DIGESTS
/mnt/gentoo# md5sum -c stage3-i686-2006.0.tar.bz2.DIGESTS

Nun entpacken Sie die Installationsdateien.

/mnt/gentoo# tar xvjpf stage3-i686-2006.0.tar.bz2

Als Nächstes werden die Dateien für Portage benötigt. Sie gehen hier wie schon bei den Installationsdateien vor.

/mnt/gentoo# wget ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo/snapshots/portage-latest.tar.bz2
/mnt/gentoo# wget ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo/snapshots/portage-latest.tar.bz2.md5sum
/mnt/gentoo# md5sum -c portage-latest.tar.bz2.md5sum
/mnt/gentoo# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr/

Führen Sie eine Konfiguration der Compiler-Optionen durch.

/mnt/gentoo# vi /mnt/gentoo/etc/make.conf

Der Inhalt der Datei /etc/make.conf könnte beispielsweise so aussehen:

USE=”-X -gnome -kde -gtk -qt -doc -ipv6″
CFLAGS=”-O2 -march=pentium4 -pipe”
CHOST=”i686-pc-linux-gnu”
CXXFLAGS=”${CFLAGS}”

Es befinden sich nun die Installationsdateien auf dem Server und Sie können mit dem nächsten Kapitel des Gentoo Linux x86 Handbuchs fortfahren.

Installation des Gentoo Basissystems

Bevor Sie gleich in die chroot-Umgebung wechseln, kopieren Sie noch die Nameserver-Informationen und mounten Sie die Pseudo-Dateisysteme /proc und /dev.

/mnt/gentoo# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
/mnt/gentoo# mount -t proc none /mnt/gentoo/proc
/mnt/gentoo# mount -o bind /dev /mnt/gentoo/dev

Bauen Sie die chroot-Umgebung auf.

/mnt/gentoo# chroot /mnt/gentoo /bin/bash
/ # env-update
>>> Regenerating /etc/ld.so.cache…
/ # source /etc/profile
/ # export PS1=”(chroot) $PS1″

Als erstes führen Sie ein Update des Portage-Tree durch.

/ # emerge –sync

Die Standardinstallation von Gentoo Linux sieht vor nano als Texteditor zu verwenden. Damit weiterhin vi zur Verfügung steht, muß es installiert werden.

/ # emerge vim

Konfiguration des Kernels

Stellen Sie die Zeitzone für den Server ein.

/ # cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Nun laden Sie die Quelltexte für den Linux-Kernel herunter. Danach beginnen Sie mit der Konfiguration.

/ # USE=”-doc symlink” emerge gentoo-sources
/ # cd /usr/src/linux
linux # make menuconfig

Aktivieren Sie die benötigten Kernelmodule. Beachten Sie hierbei unbedingt auch die Hinweise im Gentoo Linux x86 Handbuch. Jetzt kommen auch die eingangs gesammelten Informationen zur Hardware zum tragen. Aktivieren Sie das Modul für die Netzwerkkarte. Im Beispiel ist das Intel Ethernet Pro 100.

-> Device Drivers
  -> Network device support
    -> Ethernet (10 or 100Mbit)
      -> EISA, VLB, PCI and on board controllers
        -> Intel(R) PRO/100+ support (CONFIG_E100=y)

Damit Sie sich im Notfall später auch über die Serielle Konsole anmelden können, ist es erforderlich, die dafür notwendigen Kernelmodule zu aktivieren.

-> Device Drivers
  -> Character devices
    -> Serial drivers
      -> 8250/16550 and compatible serial support (CONFIG_SERIAL_8250=y)
        -> Console on 8250/16550 and compatible serial port (CONFIG_SERIAL_8250_CONSOLE=y)

Kompilieren Sie den Kernel und kopieren Sie das Kernelimage ins Verzeichnis /boot. Im Beispiel wurde ein monolithischer Kernel ohne Module konfiguriert.

linux # make
cp arch/i386/boot/bzImage /boot/kernel-2.6.16-gentoo-r7

Konfiguration des Systems

Tragen Sie alle für das System notwendigen Partitionen in der Datei /etc/fstab ein.

linux # vi /etc/fstab
# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>
/dev/hda1               /boot           ext2            noauto,noatime  1 2
/dev/hda3               /               ext3            noatime         0 1
/dev/hda2               none            swap            sw              0 0
proc                    /proc           proc            defaults        0 0
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec    0 0

Konfigurieren Sie Host- und Domainnamen.

linux # vi /etc/conf.d/hostname
HOSTNAME=”h913533″

linux # vi /etc/conf.d/domainname
DNSDOMAIN=”serverkompetenz.net”

Aktivieren Sie DHCP für die Netzwerkkarte.

linux # vi /etc/conf.d/net

config_eth0=( “dhcp” )
dhcp_eth0=”nodns nontp nonis”

Sorgen Sie dafür, dass die Netzwerkkarte beim Systemstart aktiviert wird.

linux # rc-update add net.eth0 default

Informieren Sie das System über die Netzwerkumgebung.

linux # vi /etc/hosts

127.0.0.1 localhost
81.169.155.197 h913533.serverkompetenz.net h913533

Setzen Sie das root-Passwort.

linux # passwd

Danach konfigurien Sie noch ein paar Umgebungsvariablen.

linux # vi /etc/rc.conf
linux # vi /etc/conf.d/keymaps

Konfiguration der RemoteConsole

Damit es dem Benutzer root erlaubt ist, sich über die RemoteConsole einzuloggen, muß in der Datei /etc/securetty “ttyS0″ eingetragen sein. Prüfen Sie, ob der Eintrag vorhandeln ist und fügen Sie ihn gegebenenfalls ein.

linux # vi /etc/securetty

ttyS0

Damit der Server Systemausgaben, beispielsweise die Bootmeldungen, an die RemoteConsole sendet, tragen Sie bitte die folgende Zeile in der Datei /etc/inittab ein.

linux # vi /etc/inittab

s0:12345:respawn:/sbin/agetty 57600 /dev/ttyS0 vt102

Die Konfiguration des System ist somit abschlossen und Sie können im nächsten Kapitel des Gentoo Linux x86 Handbuchs mit der Installation der System-Tools weitermachen.

Installation der benötigten Systemtools

Installieren und aktivieren Sie syslog-ng, vixie-cron und slocate.

linux # emerge syslog-ng
linux # rc-update add syslog-ng default
linux # emerge vixie-cron
linux # rc-update add vixie-cron default
linux # emerge slocate

Damit beim Systemstart auch ein DHCP-Client verfügbar ist, installieren Sie noch dhcpcd.

linux # emerge dhcpcd

Konfiguration des Bootloaders

Installalieren und konfigurieren Sie den Bootloader.

linux # emerge grub
linux # cp /boot/grub/grub.conf.sample /boot/grub/grub.conf
linux # vi /boot/grub/grub.conf

Der Inhalt der Datei /boot/grub/grub.conf könnte beispielsweise wie folgt aussehen.

timeout 5
default 0
serial –unit=0 –speed=57600
terminal serial

# For booting GNU/Linux
title GNU/Linux
root (hd0,0)
kernel /kernel-2.6.16-gentoo-r7 root=/dev/hda3 console=tty0 console=ttyS0,57600

Die Angabe der Parameter console sorgt dafür, dass die Bootmeldungen auch auf der Seriellen Konsole ausgegeben werden.
Installieren Sie grub im Master Boot Record (MBR) der Festplatte Ihres Servers.

linux # grep -v rootfs /proc/mounts > /etc/mtab
linux # grub-install /dev/hda

Nun aktivieren Sie noch den SSH-Daemon, damit er nach einem Neustart automatisch geladen wird. Dann können Sie die chroot-Umgebung verlassen und die Partitionen unmounten.

linux # rc-update add sshd default
linux # exit
/mnt/gentoo# cd
~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo

Die Installation ist abgeschlossen und der Server kann neu gestartet werden. Damit nach dem Neustart nicht wieder das Rettungssystem geladen wird, müssen Sie im Kundenservicebereich unter Serverkonfiguration > RecoveryManager noch den Bootmodus “Normal Boot” auswählen und mit dem Button “Weiter” bestätigen. Die Option “Maschine resetten” aktivieren Sie bitte nicht. Sicherheitshalber führen Sie den Neustart manuell durch.

~# reboot

Jetzt steht Ihnen Gentoo Linux auf dem STRATO PowerServer zur Verfügung. Sie können sich mit SSH anmelden und weitere Dienste installieren.

~$ nmap h913533.serverkompetenz.net

Starting Nmap 4.03 ( http://www.insecure.org/nmap/ ) at 2006-05-29 08:16 CEST
Interesting ports on h913533.serverkompetenz.net (81.169.155.197):
(The 1672 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
22/tcp open ssh

Nmap finished: 1 IP address (1 host up) scanned in 0.281 seconds

RemoteConsole

Die STRATO RemoteConsole ist ein SSH-Server, der direkt mit Ihrem Server verbunden ist. Sie greifen per SSH-Programm auf die RemoteConsole zu und diese leitet Ihre Eingaben als Tastatureingabe über den seriellen Zugang an Ihren Server weiter.
Sie können bereits in dem Moment auf den Server zugreifen, wenn Linux gerade bootet und somit die Bootmeldungen mitlesen. Außerdem haben Sie mit der RemoteConsole auch dann noch Zugriff auf Ihren Server, wenn durch Arbeiten an einer Firewall oder an den Netzwerkdiensten keine Verbindung über die Netzwerkkarte möglich ist.
Eine ausführliche Anleitung, wie Sie mit der seriellen RemoteConsole eine Verbindung zu Ihrem Server herstellen, finden Sie im FAQ-Bereich von STRATO.

Wenn der Server nicht startet

Sollte der Server nach einem Neustart nicht verfügbar sein, empfielt es sich, den Bootvorgang mit Hilfe der Seriellen Konsole zu verfolgen. In der Regel läßt sich hierbei bereits die Ursache erkennen. Um Änderungen am System vornehmen zu können, starten Sie den Server mit dem Rettungssystem und bauen wie schon bei der Installation eine chroot-Umgebung auf.

~# swapon /dev/hda2
~# mkdir /mnt/gentoo
~# mount /dev/hda3 /mnt/gentoo
~# mount /dev/hda1 /mnt/gentoo/boot
~# mount -t proc none /mnt/gentoo/proc
~# mount -o bind /dev /mnt/gentoo/dev
~# chroot /mnt/gentoo /bin/bash
/ # env-update
/ # source /etc/profile
/ # export PS1=”(chroot) $PS1″

Nun können Sie das System wie gewohnt administrieren und Änderungen vornehmen. Haben Sie die Ursache für die Nichterreichbarkeit des Servers gefunden und behoben, beenden Sie die chroot-Umgebung und starten den Server neu.

/ # exit
~# cd
~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
~# reboot

Hello, world!

Eine alte, ungeschriebene Regel besagt, dass jede Schrift über eine Programmiersprache mit dem “Hello, world!”-Programm beginnen muß. Es wird in diesem Blog nicht allein um eine Programmiersprache gehen, sondern um viele Themenbereiche der Informatik und die praktische Anwendung von Unix-artigen Betriebssystemen. Trotzdem möchte ich es der eingangs beschriebenen Tradition folgend beginnen (mit einer Variante in Java):

class HelloWorld {
    public static void main( String[] args ) {
        System.out.println( "Hello, world!" );
    }
}