PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LAMP unter Debian Woody -Schritt für Schritt



DJEddy
12.04.03, 21:18
Hallo zusammen,
diese step-by-step-Anleitung, wie man ein LAMP-System unter Debian Woody aufsetzt, entstand, als ich mein bereits bestehendes LAMP an ein paar Ecken bearbeiten wollte, und da irgend etwas schiefging :(- jedenfalls war nach diesem Versuch ein komplettes Neuaufsetzen angesagt. Und da ich bei der ersten Installation den Fehler machte, sie nicht zu dokumentieren, musste
ich wieder komplett bei Null anfangen.

Sie kann und soll die exzellenten Tut's von Baach (http://www.baach.de) und efactory
(http://lamps.efactory.de/lamps-2-0.shtml) nicht ersetzen- die beiden sind vielmehr Grundlage für diesen Text. Weil es aber mit keiner der beiden ganz problemlos ablief, habe ich den Installations-Vorgang noch einmal selbst step-by-step dokumentiert, um später nicht wieder vor längst Gelöstem zu stehen und von vorne anfangen zu müssen.

Einleitung und kurze Beschreibung, worum es geht:
LAMP: Akronym für 'Linux Apache MySQL PHP'- also Betriebssystem, Webserver, Datenbank und Skriptsprachen (PHP und Perl)- was man so braucht für den lokalen Webauftritt und mehr dafür. Nach Ende dieser Anleitung beherbergt Euer Debian Woody diese vier Anwendungen in aktuellen Versionen und ein paar kleinere Sachen. Es wird unter PHP Truetype-Support geben und die Erzeugung der wichtigsten Grafikformate wird möglich sein. PostgreSQL und MySQL werden jeweils mit Unterstützung für SSL 'configure'd.

(Fast) alles selbst kompiliert, also dem eigenen Rechner angepasst.

Auf die Installation von Debian werde ich nicht weiter eingehen.
Ein lauffähig installiertes System mit bei Erstsetup im tasksel ausgewähltem C/C++ und German Environment ist das Grundsystem, das wir brauchen.

-->Hinweis: mit dem German Environment kommt die Bibliothek gettext (http://www.gnu.org/software/gettext/) ins System.

Zusätzlich nach Installation des Grundsystems werden noch ein paar einzelne Debian-Pakete benötigt, per apt-get zu beziehen:
# apt-get install libncurses5-dev libgdbmg1-dev libperl-dev libwww-perl
python-dev libttf-dev

Sie werden später beim Kompilieren einzelner Programme gebraucht. (Dependencies)

Wer das bz2-Archivformat dem traditionellen tar.gz vorzieht, installiert den Archivierer durch Anhängen von bzip2 an die Apt-get-Anweisung gleich mit.

Archiv-Operationen lassen sich mit dem Midnight Commander erheblich effizienter erledigen. Ein Programm im Norton Commander-Style, das auch sonst bei der täglichen Arbeit auf der Shell gute Dienste leistet. Anhängen von mc installiert es auf dem System.


Individuelles in dieser Anleitung:
1. Die Hauptanwendungen Apache, MySQL, PHP, PostgreSQL und OpenSSL landen unterhalb von /usr/local/lamp.
2. die Datenbank-Verzeichnisse von MySQL und PostgreSQL unterhalb /home/lampdata

Teil 1/5


Danke an Schirmi und DarkSorcerer für ihre Hinweise

DJEddy
12.04.03, 21:19
zlib, readline, OpenSSL
---------------------------------------------------------------------------------------------------------
zlib (v1.1.4) (http://www.gzip.org/zlib/)

# ./configure
# make
# make test
# make install

--------------------------------------------------------------------------------------------------------
Readline (v4.3) (ftp://ftp.gnu.org/gnu/readline/) (Dep für
PostgreSQL)

# ./configure
# make
# make install

--------------------------------------------------------------------------------------------------------
OpenSSL (v0.9.7a) (http://www.openssl.org/source/)

# ./config --prefix=/usr/local/lamp/openssl/0.9.7a
# make
# make test
# make install

Um später leichter updaten zu können, das Versions-Verzeichnis, in dem OpenSSL von --prefix definiert und nach make install gelandet ist, auf current linken:
# ln -s /usr/local/lamp/openssl/0.9.7a/usr/local/lamp/openssl/current

current wird im folgenden von den Programmen, in die SSL-Unterstützung
einkompiliert wird, verwendet.
----------------------------------------------------------------------------------------------------------

Teil 2/5

DJEddy
12.04.03, 21:24
MySQL 4

MySQL (4.0.12) mit SSL-Support
(http://www.mysql.com/downloads/index.html)

Hinweis: Für SSL werden Header-und Library-Dateien von OpenSSL benötigt, allerdings unter /usr/include bzw. /usr/lib erwartet. Also müssen einige Links gesetzt werden, damit das ./configure-Skript sie findet:
# ln -s /usr/local/lamp/openssl/current/include/openssl /usr/include/openssl
# ln -s /usr/local/lamp/openssl/current/lib/libcrypto.a /usr/lib/libcrypto.a
# ln -s /usr/local/lamp/openssl/current/lib/libssl.a /usr/lib/libssl.a

configure-Aufruf, kompilieren, installieren:
# ./configure --prefix=/usr/local/lamp/mysql/4.0.12 \
--localstatedir=/home/lampdata/mysql/data \
--enable-thread-safe-client \
--enable-assembler \
--with-comment \
--with-vio \
--with-extra-charsets=all \

# make
# make test
# make install

Wieder ein current-Link auf das Versions-Verzeichnis:
# ln -s /usr/local/lamp/mysql/4.0.12 /usr/local/lamp/mysql/current

Das übergeordnete LAMP-Datenverzeichnis und die Datenbank-Verzeichnisse für MySQL erstellen:
# mkdir /home/lampdata
# mkdir /home/lampdata/mysql
# mkdir /home/lampdata/mysql/data

--> die folgenden Schritte genau beachten, sonst klappt der MySQL-Start wegen inkorrekter Zugriffsrechte nicht!

Eine allgemeine User-Gruppe für Datenbanken und den MySQL-Systemuser mysql erstellen. Ihm die Datenbank-Verzeichnisse als Eigentümer übergeben.
# groupadd database
# useradd -g database mysql
# chown mysql.database /home/lampdata/mysql/ -Rv

Nach Ende des Kompilierens die Standard-Datenbank erstellen. Dazu im MySQL-Sourcen- Verzeichnis nach scripts wechseln:
# cd scripts
# ./mysql_install_db

die danach unter /home/lampdata/mysql entstandenen Dateien dem User mysql und Gruppe database zuordnen:
# chown mysql.database /home/lampdata/mysql/ -Rv

Den MySQL-Server starten:
# /usr/local/lamp/mysql/current/bin/mysqld_safe

Auf diesen Aufruf hin darf jetzt nichts auftauchen in der Art 'mysql ended' oder so, in diesem Fall hat es nicht geklappt- dann überprüfen, ob /home/lampdata/mysql selbst und alles darunter wirklich dem User mysql und der Gruppe database gehören (ls -la). Dann die letzten Schritte noch einmal durchgehen und ggf. Korrekturen vornehmen.

Auf eine neue Konsole (Alt-Fx) wechseln, und das root-Passwort für MySQL setzen:
# /usr/local/lamp/mysql/current/bin/mysqladmin -u root password geheim

Damit der Server auch beim Systemstart hochläuft, das im Sourcenverzeichnis unter ./support-files mitgelieferte MySQL-Startscript in die init-Umgebung kopieren. Nach Setzung passender Zugriffsrechte in die Runlevel 2 (/etc/rc2.d) und 6 (/etc/rc6.d) linken:

# cd support-files
# cp mysql.server /etc/init.d/
# chmod 744 /etc/init.d/mysql.server
# ln -s /etc/init.d/mysql.server /etc/rc2.d/S21mysql.server
# ln -s /etc/init.d/mysql.server /etc/rc6.d/K21mysql.server


Zum Abschluss der MySQL-Installation ein Reboot, um zu sehen, ob alles geklappt hat:

# reboot

Nach dem Neustart sollte jetzt in der letzten Zeile vor dem Login etwas in der Art: 'starting mysqld with databases from /home/lampdata/mysql/data' stehen.

Teil 3/5

DJEddy
12.04.03, 21:38
Apache, mod_perl, PostgreSQL

Apache (v2.0.45) (http://www.apache.de/dist/httpd/)

#./configure --prefix=/usr/local/lamp/apache/2.0.44 \
--enable-modules=all \
--enable-ssl \
--with-ssl=/usr/local/lamp/openssl/current \
--enable-so

# make
# make install
# ln -s /usr/local/lamp/apache/2.0.45 /usr/local/lamp/apache/current/


das Konfigurations-Verzeichnis des Apache nach /etc linken:
# ln -s /usr/local/lamp/apache/current/conf/ /etc/apache

Integration in die Startumgebung
# cp /usr/local/lamp/apache/current/bin/apachectl /etc/init.d
# ln -s /etc/init.d/apachectl /etc/rc2.d/S20apachectl
# ln -s /etc/init.d/apachectl /etc/rc6.d/K20apachectl

Zugriffsrechte auf einige Standardverzeichnisse des Apache und ihren Inhalt ändern: htdocs, cgi-bin und icons, die Verzeichnisse für die späteren Webseiten, Grafiken und Skripte in eine spezielle, bereits existierende Gruppe namens www-data verlegen, ihren Besitzer root aber beibehalten:
# cd /usr/local/lamp/apache/current
# chown root.www-data htdocs/ cgi-bin/ icons/ -Rv

Zum Abschluss ein Reboot, ob alles geklappt hat.
# reboot

Der Start des Apache wird beim Hochlaufen des Systems nicht angezeigt. Testen mit Browser von einem anderen Rechner aus im Netzwerk (http://IP_des_LAMP-Rechners). Die Apache- Startseite sollte nun angezeigt werden.

Hinweis: die Beschreibung, wie man dem Apachen beibringt, auf SSL (443) zu laufen, habe ich an dieser Stelle rausgenommen- für den lokalen Betrieb und Entwicklung ist es nicht notwendig- gleichwohl wurde SSL für alle Fälle aber mit einkompiliert.

-------------------------------------------------------------------------
Mod_Perl2 (1.99.08) (http://perl.apache.org/download/index.html)

Einige dafür zusätzlich benötigte Pakete -libgdbmg1-dev libperl-dev libwww-perl- wurden bereits ganz zu Anfang per apt-get installiert

Kompilieren/installieren
# perl Makefile.PL MP_AP_PREFIX=/usr/local/lamp/apache/current MP_INST_APACHE2=1
# make
# make test
# make install

Integration in Apache
in /etc/apache/httpd.conf eintragen:
#----------------------------------------------------
LoadModule perl_module modules/mod_perl.so
#----------------------------------------------------

Apache mit der geänderten Konfiguration neu initialisieren
# /etc/init.d/apachectl restart

Perl testen
Ein paar Test-Skripte liegen/werden ausgeführt unter <Apachedir>/cgi-bin/ . Deren Rechte auf 755 erweitern.
# chmod 755 <ApacheDir>/cgi-bin/*

Eigenes Testskript perltest.pl

--schnipp
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "OK, Perl funktioniert auf diesem Server\n\n";
--schnapp

Nach Eingabe von http://IP_des_Lamp-Rechners/cgi-bin/perltest.pl sollte der Text hinter dem zweiten print-Befehl im Browser ausgegeben werden

Hinweis: Im printenv-Skript, Zeile 1 den Pfad zum Perl-Interpreter von /usr/local/bin auf /usr/bin anpassen, sonst funktioniert es nicht.
------------------------------------------------------------------------------------

PostgreSQL 7.3.2 (http://www.postgresql.org/mirrors-ftp.html)

# ./configure
--prefix=/usr/local/lamp/pgsql/7.3.2 \
--with-perl \
--with-openssl=/usr/local/lamp/openssl/current \
--enable-nls=de \

# make
# make install
# ln -s /usr/local/lamp/pgsql/7.3.2 /usr/local/lamp/pgsql/current

DB-Verzeichnisse anlegen, DB-Systemuser pgsql erstellen, ihm die DB-Verzeichnisse übergeben.
# mkdir /home/lampdata/pgsql
# mkdir /home/lampdata/pgsql/data

# useradd -g database -d /home/lampdata/pgsql/data pgsql
# passwd pgsql

# chown pgsql.database /home/lampdata/pgsql/ -Rv

Als User pgsql einloggen und die Datenbank initialisieren
# /usr/local/lamp/pgsql/current/bin/initdb -D /home/lampdata/pgsql/data/

Integration in die Startumgebung
Im Sourcenverzeichnis unter ./contrib/start-scripts das linux-Skript nach /etc/init.d kopieren. Rechte und Links in die Runlevel setzen:
# cp <Sourcenverzeichnis>/contrib/start-scripts/linux /etc/init.d/pgsql
# chmod 744 /etc/init.d/pgsql
# ln -s /etc/init.d/pgsql /etc/rc2.d/S20pgsql
# ln -s /etc/init.d/pgsql /etc/rc6.d/K20pgsql

Das Startskript /etc/init.d/pgsql modifizieren

Zeile 32: auf 'prefix=/usr/local/lamp/pgsql/current' ->Installationsverzeichnis
Zeile 35: auf 'PGDATA=/home/lampdata/pgsql/data' ->Datenbank-Verzeichnis
Zeile 38: auf 'PGUSER=pgsql' ->PgSQL-Systemuser

# reboot

Wenn PostgreSQL läuft, kann man sich jetzt als User pgsql einloggen und eine Testdatenbank erzeugen:
# /usr/local/lamp/pgsql/current/bin/createdb test -Upgsql

und mal hineinschauen:
#/usr/local/lamp/pgsql/curren/bin/psql test -U pgsql (Ausstieg mit \q)


Teil 4/5

DJEddy
12.04.03, 21:50
Einige Dinge für PHP: LibPng, Jpegsrc, GD-Library. Und PHP selbst
-------------------------------------------------------------------------------
LibPNG (v1.2.5) (http://www.libpng.org/pub/png/libpng.html)
(Unterstützung für PNG-Grafiken)

configure gibt's hier nicht, nur ein Dummy-File mit Hinweis. Dafür im Sourcenverzeichnis unter ./scripts/ Makefiles für die verschiedenen Betriebssysteme im Format makefile.(OS). Das passende makefile.linux kopieren:

# cp (Sourcenverzeichnis)/scripts/makefile.linux ../Makefile
# make
# make test
# make install

-------------------------------------------------------------------------------
Jpegsrc (v6b) (http://www.ijg.org/)
(Unterstützung für Jpeg-Grafiken)

# ./configure --prefix=/usr/local --enable-shared --enable-static
# make
# make test

--> unter /usr/local/man ein Verzeichnis namens 'man1' anlegen, da der make install Vorgang sonst abbricht
# mkdir /usr/local/man/man1

# make install

------------------------------------------------------------------------------
Freetype
(mit apt-get libttf-dev bereits installiert)

------------------------------------------------------------------------------
GD-Library (v1.8.4)

Download: http://downloads.rhyme.com.au/gd/gd-1.8.4amgif.tar.gz

Hinweis: ./configure erwartet für Truetype-Unterstützung die freetype-Headerdateien in /usr/local/include, statt in aktuell /usr/include. Linken des Verzeichnisses /usr/include/freetype bringt nichts. Also kopieren:
# cp /usr/include/freetype/* /usr/local/include

# ./configure --prefix=/usr/local --enable-freetype --enable-jpeg
# make
# make install

-------------------------------------------------------------------------------
13. PHP (v4.3.1)(http://www.php.net/downloads.php)

# ./configure \
--with-apxs2=/usr/local/lamp/apache2/current/bin/apxs \
--with-mysql=/usr/local/lamp/mysql/current \
--with-pgsql=/usr/local/lamp/pgsql/current \
--with-openssl=/usr/local/lamp/openssl/current \
--with-zlib-dir=/usr/lib/ \
--enable-versioning \
--enable-track-vars=yes \
--enable-url-includes \
--enable-sysvshm=yes \
--enable-sysvsem=yes \
--enable-ftp \
--with-config-file-path=/etc \
--with-gd=/usr/local \
--with-ttf=/usr/local

# make
# make install

Die php.ini.dist nach /etc/php.ini kopieren
# cp <Sourcenverzeichnis>/php.ini-dist /etc/php.ini

Integration in Apache
1. Das folgende in die httpd.conf einfügen:
#
-----------------------------------------------------------------------------------
LoadModule php4_module modules/libphp4.so # --> PHP-Modul laden
#
-----------------------------------------------------------------------------------

#------------------------------------------------------------------------------------
Files *.php
SetOutputFilter PHP
SetInputFilter PHP
/Files

# mit dem PHP-Modul verknüpfen
#------------------------------------------------------------------------------------

(Files *.php und /Files jeweils in spitze Klammern einschliessen)

Punkt 'DirectoryIndex' in der httpd.conf suchen und dort 'index.php' hinzufügen

# reboot

Mit dem phpinfo()-Aufruf kann das Funktionieren von PHP getestet werden.


Soweit mal, wie es bei mir nun Schritt für Schritt auf dem oben genannten Debian Woody funktioniert hat. Vielleicht hilft es dem einen oder anderen.

Mit Dank an die Autoren der Tutorials von lamps.efactory.de und www.baach.de, sowie exlooser (exi), der mir bei der etwas widerspenstigen Kombination GD-Library/Freetype den entscheidenden Tip gab, so dass man in keinem Makefile an diversen Pfaden herumexperimentieren musste.


Gruss DJEddy

Teil 5/5