LAMPS Tutorial 2.0 (v2.0.6)

Dies ist ein deutschsprachiges Tutorial zum Kompilieren, Installieren und Konfigurieren eines LAMPS Servers.

Falls das Tutorial Fehler enthält, bin ich für eine Mail an stengel@eFactory.de dankbar.

Neuerungen:
Neue Apache, MySQL und PHP Versionen.


1. Inhalt LAMPS Tutorial

1. Inhalt LAMPS Tutorial

2. Die Zutaten und wo man sie bekommt


2. Die Zutaten und wo man sie bekommt


Linux



Es ist grundsätzlich gleichgültig, welche Linux-Distribution verwendet wird. Ich habe das HowTo mit Mandrake 7.2 geschrieben und mit RedHat 7.0, 7.2, 7.3, 9.0 und Debian 3.0 verifiziert.

Die Installation erkläre ich hier nicht, da dies den Rahmen sprengen würde. In den meisten Fällen reicht ein einfaches "durchklicken". Es sollten jedoch die Entwicklungswerkzeuge (gcc, make, etc.) mit angewählt werden. Sollte man etwas vergessen haben, kann man das Paket später noch nachinstallieren.

Linux Distributionen auf Tucows
www.mandrake.com
www.redhat.de
www.debian.de

Nach oben


Apache 2.0.52



In jedem Fall benötigt wird der Apache Webserver. Zu dem Zeitpunkt, als ich dieses Tutorial geschrieben habe, war für den Apache 2 die Version 2.0.50 aktuell. Alternativ gibt es immernoch den 1.3.x Apache der inzwischen fast komplett bugfrei sein sollte. Ältere Versionen sollten auf keinen Fall verwendet werden, da diese bis 1.3.26 und 2.0.39 eine Sicherheitslücke beinhalten.

Apache Website
Download Apache Httpd 2.0.52

Nach oben


MySQL 4.0.21



Die MySQL Version, die ich momentan verwende, ist 4.0.21. Sollte eine aktuellere Version verwendet werden, könnte es beim Konfigurieren zu Problemen kommen. Ein Blick in die README oder INSTALL Datei könnte dann weiterhelfen.

Hinweis: MySQL muß auch nicht zwingend kompiliert werden, sondern kann auch als RPM oder Binary installiert sein. Dann ist allerdings beim kompilieren von PHP der MySQL-Pfad zu ändern.

MySQL Website
Download MySQL 4.0.21

Nach oben


PHP 4.3.9



Mit das Wichtigste ist die aktuelle Version von PHP. Seit neustem verfügbar ist die 4.3.9, und die verwenden wir auch.

PHP Website
Download PHP 4.3.9

Nach oben


mod_perl 1.99_16



Da ich auch auf Perl basierende Seiten im Netz habe, installiere ich das Apache Perl-Modul gleich mit. Voraussetzung hierfür ist, dass Perl installiert ist. Dies wird jedoch meist mit der Distribution automatisch mitinstalliert. Für Apache 2.x wird übrigens eine andere mod_perl Version benötigt als für Apache 1.x


Mod-Perl Website
Download mod_perl 1.99_16

Nach oben


OpenSSL 0.9.7d



Um Apache mit SSL laufen zu lassen, wird OpenSSL benötigt, damit das mod_ssl Modul kompiliert werden kann. Ich verwende die OpenSSL Version 0.9.7d.

OpenSSL Website
Download OpenSSL 0.9.7d

Nach oben


PDFLib-Lite 6.0.0 p1



PDFLib ermöglicht es, von PHP aus PDF-Dateien dynamisch zu erstellen. Dies ist sehr praktisch um z.B. formatierte Vorlagen oder Belege zum Ausdrucken für einen Kunden zu erzeugen.

PDFLib Homepage
Download PDFlib-Lite 6.0.0p1

Nach oben



3. Das Auspacken

Bevor es richtig los geht, müssen alle tar.gz Dateien zunächst einmal entpackt werden. Es ist erforderlich, sich als Root auf dem Rechner einzuloggen und alle Dateien nach /usr/local/src/lamps zu kopieren. Es ist natürlich auch möglich, die Dateien in einen anderen Ordner zu kopieren, aber das Tutorial wird im folgenden nur diesen Pfad verwenden.

cd /usr/local/src/lamps
for i in `ls *.gz`; do tar zxf $i; done;


Die Archiv-Dateien werden nun nicht mehr gebraucht. Ich würde dennoch empfehlen, sie zu speichern oder auf CD zu brennen, eventuell zusammen mit diesem Tutorial als Backup.

Nach oben



4. Das Backen - kompilieren und installieren


MySQL



Die folgenden Zeilen installieren MySQL. --prefix gibt dabei den Installationsordner an, --localstatedir den Ordner der Datenbanken (wichtig z.B. für spätere Backups). Wurde MySQL als RPM oder DEB installiert, kann dieser Teil natürlich übersprungen werden.

Hinweis: Nach der Eingabe von make ist reichlich Zeit für den einen oder anderen Kaffee. Also nicht verzweifeln.

cd /usr/local/src/lamps/mysql-4.0.21/
./configure --prefix=/usr/local/mysql \
--localstatedir=/home/mysql/data --with-innodb
make
make install

Hinweis: Erscheint eine Fehlermeldung in der "gethostbyname_r" vorkommt fehlt vermutlich noch das g++ paket.
Als nächstes wird - falls noch nicht vorhanden - der MySQL-User erzeugt, die Standard-Datenbank installiert und zum Schluss noch das Root-Passwort geändert. Für 'geheim' sollte natürlich ein eigenes gewählt werden.

mkdir /home/mysql
/usr/sbin/groupadd mysql
/usr/sbin/useradd mysql -g mysql -s /bin/false -d /home/mysql
scripts/mysql_install_db
chown -R mysql:mysql /home/mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 744 /etc/rc.d/init.d/mysqld
/etc/rc.d/init.d/mysqld start
/usr/local/mysql/bin/mysqladmin -u root password 'geheim'

Inzwischen bereitete mir auch einmal eine alte my.cnf in /etc/ Probleme, die dann dazu führte, dass mysql_install_db die Datenbank nach /var/lib/mysql/data statt nach /home/myqsl/data installiert hat und MySQL dann auch nicht lief. Sollte dies der Fall sein, ist die my.cnf Datei zu löschen oder umzubenennen.

Worauf ich zusätzlich immer wieder hereinfalle, ist zu versäumen, die MySQL-Libraries nicht in den Lib-Pfad einzutragen. Das erkennt man daran, wenn beim Start von Apache später eine Fehlermeldung ausgegeben wird, dass die Datei libmysqlclient.so.10 nicht gefunden wurde. Sollte dieses Problem auftreten, ist die Datei /etc/ld.so.conf zu öffnen und am Ende /usr/local/mysql/lib/mysql einzufügen. Danach ist folgendes auszuführen:

/sbin/ldconfig

Jetzt müsste es geklappt haben. Damit MySQL beim Starten des Systems mit hochläuft, fehlen noch die folgenden Zeilen:

cd /etc/rc.d/rc3.d
ln -s ../init.d/mysqld S20mysqld
ln -s ../init.d/mysqld K20mysqld

Hinweis: Eventuell benutzt die verwendete Distribution einen anderen Runlevel als rc3. Den aktuellen Runlevel bekommt man heraus, indem man /sbin/runlevel in der Konsole eingibt.

Tipp: Um nicht immer umständich über den langen Pfad auf mysql, mysqldump etc. zuzugreifen, lohnt es sich einige Links zu den Programmen anzulegen.

ln -s /usr/local/mysql/bin/mysql \
/usr/local/bin/mysql
ln -s /usr/local/mysql/bin/mysqladmin \
/usr/local/bin/mysqladmin
ln -s /usr/local/mysql/bin/mysqldump \
/usr/local/bin/mysqldump
ln -s /usr/local/mysql/bin/mysqlshow \
/usr/local/bin/mysqlshow

Tipp: Sollte Webmin verwendet werden, muss in der Modulkonfiguration noch einiges geändert werden, zum Beispiel der Pfad zu den Datenbanken.

Nach oben


OpenSSL



Die Installation von OpenSSL gestaltet sich relativ einfach. Auch hier wird mit --prefix der Zielordner angegeben.

cd /usr/local/src/lamps/openssl-0.9.7d
./config --prefix=/usr/local/openssl
make
make test
make install
ln -s /usr/local/openssl/bin/openssl /usr/local/bin/openssl

Hat alles geklappt? Ein kleiner Hinweis am Rande: Zuviel Kaffee ist ungesund. Aber wir haben ja schon ein Drittel geschafft.

Nach oben


Apache 2



Nun bauen wir Apache mit SSL. Dabei wird nun Apache als DSO-Version kompiliert. Das heißt, Module wie PHP etc. können dynamisch geladen werden. Das Patchen wie bei Apache 1.3.x entällt bei Apache 2.0.x.

cd /usr/local/src/lamps/httpd-2.0.52/
./configure --prefix=/usr/local/httpd \
--enable-modules=all \
--enable-ssl \
--with-ssl=/usr/local/openssl \
--enable-so
make
make install

Damit Apache auch beim Booten startet, kopieren wir noch das Startskript und erstellen den Link für dem Runlevel drei.

cp /usr/local/httpd/bin/apachectl \
/etc/rc.d/init.d/httpd
cd /etc/rc.d/rc3.d
ln -s ../init.d/httpd S20httpd
ln -s ../init.d/httpd K20httpd

Als nächstes werden die Zertifikate erzeugt. Dies geht nicht mehr so einfach wie bei Apache 1.3.x - falls doch wäre ich um einen Hinweis sehr dankbar.

Zum Testen generieren wir uns erst einmal eine CA. Im Livebetrieb wäre dann Thawte oder Verisign die Certification Authority, die unser Serverzertifikat unterzeichnet.

Hinweis: Zur Software-Entwicklung wird SSL oft nicht benötigt und man kann diesen Bereich überspringen und mit PHP weitermachen.

cd /usr/local/httpd/conf/
openssl genrsa -des3 -out ca.key 1024

Es muss zweimal ein Passwort eingegeben werden. Beim nächsten Befehl muss das eben gewählte Passwort wieder eingegeben werden. Danach werden Daten der CA abgefragt um das CA-Zertifikat zu erstellen.

openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Country Name: DE
State or Province: NRW
Localty Name: Duesseldorf
Organization Name: Meinefirma
Organizational Unit Name: CA
Common Name: www.meinefirma.de
Email Address: ca@meinefirma.de

Nun wird der Serverkey erzeugt. Hier ist wiederum ein Passwort erforderlich. Wir machen noch vom Key ein Backup und entschlüsseln den Key damit Apache nicht bei jedem Start nach dem Passwort verlangt.

openssl genrsa -des3 -out server.key 1024
mv server.key server.key.secure
openssl rsa -in server.key.secure -out server.key

Nun müssen wir das Server-Zertifikat erzeugen. Das läuft ähnlich wie beim CA-Zertifikat ab, nur wird hier wird kein Passwort verlangt, da wir den Key bereits entschlüsselt haben.

Hinweis: Für den Livebetrieb muss der "Common Name" mit der Host-Adresse des Servers übereinstimmen.

openssl req -new -days 365 -key server.key -out server.csr

Country Name: DE
State or Province: NRW
Localty Name: Duesseldorf
Organization Name: Meinefirma
Organizational Unit Name: webteam
Common Name: www.meinefirma.de
Email Address: webmaster@meinefirma.de
A challenge password:
An optional company name:

Nun wird das Zertifikat noch von unserer Selfmade-CA unterschrieben und die Keys werden in eigene Ordner kopiert. Dazu verwenden wir ein Bash-Skript von Ralf S. Engelschall das hier heruntergeladen werden kann. Das Skript ist am besten in /usr/local/bin zu speichern und mit chmod 744 ausführbar zu machen.

Es wird das CA-Passwort verlangt und es muss zweimal mit y bestätigt werden.

sign.sh server.csr
mkdir ssl.crt ssl.key
cp server.crt ssl.crt
cp server.key ssl.key

Um Apache immer mit SSL zu starten, muss die /etc/rc.d/init.d/httpd editiert und an einer Stelle abgeändert werden.

# the path to your httpd binary, including options if necessary
# Original HTTPD='/usr/local/httpd/bin/httpd'
HTTPD='/usr/local/httpd/bin/httpd -DSSL'

Ich setze jetzt noch alle Dateien im htdocs-Ordner auf Benutzer nobody und Gruppe nobody, weil es sonst Probleme geben kann, dass z.B. PHP/Perl keine Dateien schreiben kann.

chown -R nobody:nobody /usr/local/httpd/htdocs/

Als nächstes machen wir uns daran, die Module zu kompilieren.

Nach oben


PHP



Machen wir uns nun daran, PHP zu kompilieren und zu installieren. Ganz am Schluss wird der Config-Pfad auf /etc/ gelegt. Darin wird nachher auch die php.ini gespeichert.

Wenn MySQL nicht installiert wird, ist die entsprechenden Zeilen in der configure-Anweisung einfach wegzulassen.

Die letzte Zeile für GD-Support kann ebenfalls weggelassen werden. Allerdings ist das GD-Modul sehr nützlich zur dynamischen Erstellung von Grafiken mit PHP. Dabei ist zu beachten, dass noch einige zusätzliche Pakete installiert sein müssen. (Bei Redhat 7.3 z.B.: gd*.rpm, libjpeg*.rpm, libtiff*.rpm, freetype*.rpm und libpng*.rpm) In den meisten Fällen sollten die Pakete allerdings schon installiert sein. Prüfbar ist dies z.B. mit rpm -qa | grep libjpeg. Nach diesem Befehl sollten zwei Zeilen erscheinen, von denen in einer "devel" steht.

Nun gehts ans kompilieren:

cd /usr/local/src/lamps/php-4.3.9
./configure \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-zlib-dir=/usr/lib/ \
--enable-versioning \
--enable-track-vars=yes \
--enable-url-includes \
--enable-sysvshm=yes \
--enable-sysvsem=yes \
--enable-ftp \
--enable-calendar \
--with-config-file-path=/etc \
--with-gd
make
make install

Um später PDFLIb zu compilieren müssen noch einige zusätzliche Dateien nach /usr/local/include/php kopieren werden. Dieser Schritt kann übersprungen werden, soll PDFLib nicht installiert werden.

mkdir /usr/local/include/php/ext/gd
mkdir /usr/local/include/php/ext/gd/libgd
cp ext/gd/php_gd.h /usr/local/include/php/ext/gd
cp ext/gd/libgd/gd.h /usr/local/include/php/ext/gd/libgd
cp ext/gd/libgd/gd_io.h /usr/local/include/php/ext/gd/libgd

Damit PHP mit Apache funktioniert, muss noch in der /usr/local/httpd/conf/httpd.conf dafür gesorgt werden, dass die PHP-Endungen mit dem Modul verknüpft sind. Dazu müssen folgende Zeilen eingefügt werden.

AddType application/x-httpd-php php
AddType application/x-httpd-php-source phps

Jetzt nur noch die php.ini kopieren, und das war's dann schon.

cp /usr/local/src/lamp/php-4.3.9/php.ini-dist /etc/php.ini

Nach oben


PDFLib



Die Installation von PDFLib gestaltet sich auch relativ einfach. Sie besteht nur aus drei Zeilen. Wie oben bereits angemerkt, kann dieser Teil weggelassen werden, falls PDFLib nicht benötigt wird.

cd /usr/local/src/lamps/PDFlib-Lite-6.0.0p1/
./configure
make
make install

PDFLib ist nun installiert. Damit PDFLib auch gefunden wird, fehlt wiederum ein Eintrag in der ld.so.conf-Datei. Deshalb ist diese zu öffnen und - falls noch nicht vorhanden - eine Zeile mit /usr/local/lib hinzuzufügen. Anschließend wird /sbin/ldconfig ausgeführt.

Um die PDF Unterstützung in PHP zu aktivieren müssen wir nun das PHP PDF-Modul erstellen. Damit dies funktioniert müssen die Packete automake und libtool vorhanden sein. Die Frage nach dem Pfad wärend des compilierens kann mit return (autodetect) übersprungen werden.

pear install bind/pdflib/php/pecl/pdflib-2.0.tgz
cd /usr/local/lib/php/extensions
mv no-debug-non-zts-20020429/pdf.so .

Nun sollte im Ordner /usr/local/lib/php/extensions die datei pdf.so existieren. Eventuell muss der Ordner no-debug-non-zts-20020429 erst erstellt werden.
Wir editieren nun noch /etc/php.ini fügen eine neue "extension"-Zeile ein und ändern noch den extension_dir Eintrag ab.
Hint: In einem fall musste ich in /usr/local/lib/php/ die Ordner extensions und extensions/no-debug-non-zts-20020429 erst erstellen vor pear install erfolgreich war.

extension_dir="/usr/local/lib/php/extensions/"

...
extension=pdf.so

Nach oben


mod_perl



Mod_Perl zu konfigurieren ist simpel. Voraussetzung ist dabei, dass Perl in Version 5.6.0 oder später installiert ist. Dazu genügt die RPM der jeweiligen Distribution. Getestet werden kann dies, indem

perl -v

eingegeben wird. Dabei müsste ein kurzer Text ausgegeben werden. Der Rest ist dann ganz einfach:

cd /usr/local/src/lamps/mod_perl-1.99_16
perl Makefile.PL \
MP_AP_PREFIX=/usr/local/httpd/ \
MP_INST_APACHE2=1

make
make install

Falls eine Meldung erscheint mit "/usr/bin/ld: cannot find -lperl" fehlt noch das libperl-dev Paket.
Damit Apache das Perl-Modul auch lädt fügen wir in /usr/local/httpd/conf/httpd.conf folgende Zeile hinzu, falls sie nicht schon existiert.

LoadModule perl_module modules/mod_perl.so

Mod_perl ist nun installiert.

Nach oben


Sonstiges und Konfiguration



Apache

Damit als Indexfile nicht nur HTML-Dateien möglich sind, ist nach folgender Zeile zu suchen:

DirectoryIndex index.html

Dieser sind weitere Indexseiten durch Leerzeichen getrennt hinzuzufügen, wie z.B. index.php, index.php4 oder default.htm, je nach Belieben.

Nun kann Apache gestartet werden. Und zwar mit:

/etc/rc.d/init.d/httpd start

PHP

PHP lässt sich gut testen, wenn man in /usr/local/httpd/htdocs/ z.B. eine info.php mit folgendem Inhalt erzeugt:

<?php
phpinfo();
?>

Ruft man diese über Lynx oder einen anderen Browser auf, sollte man eine Statusseite mit allen Modulen und sonstigen Parametern von PHP angezeigt bekommen. Hier sieht man auch gleich, ob das eine oder andere Modul gegebenenfalls nicht kompiliert wurde.

PDFLib

PDFLib kann man auch relativ einfach mit einem kleinen PHP-Skript testen. Wichtig ist, dass der User Nobody in dem Ordner, in dem das Skript läuft, Schreibrechte hat.

<?PHP
$dokument = pdf_new();
pdf_open_file($dokument,"php.pdf");
$font=pdf_findfont($dokument, "Times-Roman", "winansi", 0);
pdf_begin_page($dokument,200,100);
pdf_setfont($dokument,$font,14);
pdf_set_text_pos($dokument,20,50);
pdf_show($dokument,"PDFLib is working");
pdf_end_page($dokument);
$dokument = pdf_close($dokument);
header("location:php.pdf\n\n");
?>

Sonstiges

Zum Abschluss kann noch getestet werden ob SSL läuft, indem man https://localhost über Lynx oder seinen Browser aufruft.

Um mit anderen Distributionen konformer zu sein erzeuge ich noch einen Ordner /etc/httpd und einen Link zum conf sowie zum logs Ordner von Apache.

mkdir /etc/httpd
ln -s /usr/local/httpd/conf /etc/httpd/conf
ln -s /usr/local/httpd/logs /etc/httpd/logs

Das LAMPS-System ist soweit fertig!

Ich möchte noch empfehlen, die Kiste einmal neu zu starten, um zu schauen, ob Apache und MySQL automatisch anlaufen.

Tipp: Sollte zum Beispiel SSL nicht funktionieren obwohl Apache läuft, kann man versuchen die Firewall herunterzufahren um festzustellen ob eventuell der SSL-Port gesperrt ist.

/etc/rc.d/init.d/ipchains stop

Für iptables gilt das gleiche. Es sollte nicht vergessen werden, die Firewall mit dem Parameter start wieder hochzufahren, sobald der TCP-Port 443 freigeschaltet ist.

Nach oben

Disclaimer









Sämtliche Inhalte dieser Website können im WWW wiedergegeben werden, sofern im unmittelbaren Zusammenhang Angaben zum Copyright erfolgen und ein direkter HTML-Link auf die entsprechende Seite unter lamps.efactory.de gesetzt wird.

eFactory
GmbH & Co. KG
stengel@eFactoryy.de

Goethestraße 75
40237 Düsseldorf

Tel.: 0211 44 03 97-0
Fax: 0211 44 03 97-40