Hlavní navigace

Kompilace Apache, PHP a MySQL na Linuxu ze zdroje

Radek Hulán 29. 9. 2004

Dnes, kdy téměř každá distribuce Linuxu obsahuje i binární formu Apache, PHP a MySQL, se může zdát, že je zbytečné se zabývat tím, jak uvedené celky zkompilovat a konfigurovat. Pokud ovšem chcete systém přesně podle vašich potřeb, nebo máte požadavky na specifické moduly (curl, iconv, ssl), potom v řadě případů binární forma (rpm, deb) vůbec neexistuje a do kompilace se pustit musíte.

Ke kompilaci ze zdroje je vhodné přistoupit i tehdy, pokud chcete výkon systému optimalizovat pro váš hardware.

Předpokladem ke kompilaci je funkční gcc, gcc-c++ a další základní programy, které jsou popsány v samostatném článku (většina distribucí je obsahuje již v základu).

Kompilaci můžete přízpůsobit řadou parametrů předaných gcc, a celý systém tak optimalizovat pro váš hardware. Pro Intel P-IV je vhodná například tato sestava parametrů:

export CFLAGS="-march=pentium4 -mfpmath=sse -msse2 -O2 -pipe -s -fomit-frame-pointer" 

Popis veškerých parametrů pro gcc vhodných pro váš systém naleznete na gcc.gnu.org.

Dále uvedené skripty byly otestovány na SuSE 9.1 s kernelem 2.6.5 a gcc 3.3.3, budou ale funkční na libovolné distribuci (pouze s nutností použití jiných vhodných rpm či deb balíčků).

Základní popis systému

PHP 5.0.1 bude kompilováno s podporou: bz2, cpdf, ctype, curl, dom, ftp, gd2, freetype2, gettext, iconv, libxml, mbstring, mysql, openssl, pcre, posix, session, SimpleXML, SPL, SQLite, tokenizer, xml, xsl, a zlib.

Apache 2.0.51 bude kompilován s podporou mod_access, mod_auth, mod_auth_digest, mod_deflate, mod_env, mod_headers, mod_setenvif, mod_ssl, mod_mime, mod_imap, mod_alias a mod_rewrite.

Pokud není uvedeno jinak, předpokládám, že veškeré zdrojové soubory jsou umístěny v adresáři  /usr/local/src.

Kompilace (open) SSL

Kompilace OpenSSL je následovná:

cd /usr/local/src
tar -zxvf openssl-0.9.7d.tar.gz
cd openssl-0.9.7d
./config --prefix=/usr/local
make
make install

Vygenerování privátního klíče do adresáře /home/ssl:

mkdir /home/ssl
cd /home/ssl
/usr/local/bin/openssl genrsa -des3 -rand \
  nějaký_velký_soubor_1 : \
  nějaký_velký_soubor_2 : \
  nějaký_velký_soubor_3 \
  -out localhost.key 1024

Následně si vygenerujeme privátní klíč bez pass-phrase, je to sice méně bezpečné, ale zase nás to zbaví povinnosti zadávat pass-phrase při každém bootupu serveru:

/usr/local/bin/openssl rsa \
  -in localhost.key \
  -out localhost.key.unsecure

A rovněž vytvoříme požadavek na certifikační autoritu ( localhost.key.csr), která náš klíč autorizuje (pokud nemáme klíč jen na lokální testování):

/usr/local/bin/openssl req -new \
  -key localhost.key \
  -out localhost.key.csr

Mezitím, co čekáme na certifikační autoritu, si můžeme si vytvořit pro svoje testování vlastní, provizorní podpis certifikátu, v tomto případě s platností 30 dní:

/usr/local/bin/openssl x509 -req \
  -days 30 \
  -in localhost.key.csr \
  -signkey localhost.key \
  -out localhost.cert
chmod 400 localhost.cert
chmod 400 localhost.key
chmod 400 localhost.key.unsecure

Kompilace Apache 2.0.51 web serveru

Řada dnešních webhostingů stále používá Apache 1.3.x, nicméně doba problémů a nekompatibilit Apache 2.0 již, zdá se, pominula, proto je v tomto příkladu použit Apache 2.0.

Apache 2.0 bude zkompilován s podporou pro mod_ssl, mod_deflate, mod_rewrite, a pochopitelně mod_so.

Kompilace je pak následovná:

cd /usr/local/src
tar -zxvf httpd-2.0.51.tar.gz
cd httpd-2.0.51
./configure \
   --prefix=/usr/local/apache2 \
   --enable-so \
   --enable-auth-digest \
   --enable-rewrite \
   --enable-setenvif \
   --enable-mime \
   --enable-deflate \
   --enable-ssl \
   --with-ssl=/usr/local \
   --enable-headers
make
make install

Rovněž je nutné modifikovat (doplnit) konfigurační soubor Apache /usr/local/apache2/conf/httpd.conf (tento příklad předpokládá, že root web serveru je v  /home/www):

DocumentRoot "/home/www"

Doplnit PHP 5, které bude instalováno jako modul Apache 2 serveru:

LoadModule php5_module modules/libphp5.so
DirectoryIndex index.html index.htm index.php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

A doplníme rovněž základní pravidla pro mod_rewrite a znemožnění klientům přistupovat k souboru  .htaccess:

<Directory "/home/www">
 Options Indexes Includes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 Allow from all
</Directory>
<Files ~ "^.ht">
   Order allow,deny
   Deny from all
</Files>

Pro použití SSL (na standardním portu 443) změníme soubor /usr/local/apache2/conf/ssl.conf celý na:

Listen 443
<VirtualHost _default_:443>
 ServerName localhost
 SSLEngine on
 SSLCertificateFile /home/ssl/localhost.cert
 SSLCertificateKeyFile /home/ssl/localhost.key.unsecure
</VirtualHost>

Kompilace PHP 5.0.1

Pro kompilaci PHP budeme potřebovat následující zdroje:

Nejdříve zkompilujeme pomocné knihovny, začneme třeba libiconv:

cd /usr/local/src
tar -zxvf libiconv-1.9.1.tar.gz
cd libiconv-1.9.1
./configure --prefix=/usr/local
make
make install

Kompilace libjpeg:

cd /usr/local/src
tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --prefix=/usr/local
make
make install

Kompilace libpng:

cd /usr/local/src
tar -zxvf libpng-1.2.7.tar.gz
cd libpng-1.2.7
cp scripts/makefile.linux makefile
make
make install

Kompilace cpdflib:

cd /usr/local/src
tar -zxvf clibpdf110-7e.tar.gz
cd ClibPDF/source
cp Makefile.Linux makefile
make
make install

Kompilace CURL:

cd /usr/local/src
tar -zxvf curl-7.12.1.tar.gz
cd curl-7.12.1
./configure --prefix=/usr/local
make
make install

Kompilace Freetype 2:

cd /usr/local/src
tar -jxvf freetype-2.1.9.tar.bz2
cd freetype-2.1.9
./configure --prefix=/usr/local
make
make install

Kompilace GD 2:

cd /usr/local/src
tar -zxvf gd-2.0.28.tar.gz
cd gd-2.0.28
./configure --prefix=/usr/local
make
make install

A následuje kompilace PHP 5.0.1 s podporou pro MySQL, iconv, curl, zlib, gd, mbstring, SSL a řadu dalších modulů, včetně podpory pro debugger (třeba pro ladění s Quanta Plus, což je skvělý editor pro prostředí KDE 3.3.0):

cd /usr/local/src
tar -jxvf php-5.0.1.tar.bz2
cd php-5.0.1
./configure \
  --with-apxs2=/usr/local/apache2/bin/apxs \
  --with-mysql  \
  --with-mysql-sock=/tmp/mysql.sock \
  --with-zlib \
  --with-zlib-dir \
  --with-bz2 \
  --with-gd=/usr/local \
  --enable-gd \
  --enable-gd-native-ttf \
  --with-jpeg-dir \
  --with-png-dir \
  --with-ttf \
  --with-freetype-dir \
  --with-iconv=/usr/local \
  --with-curl=/usr/local \
  --enable-track-vars \
  --with-gettext \
  --with-config-file-path=/usr/local/apache2/conf \
  --enable-trans-id \
  --enable-ftp \
  --with-cpdflib=/usr/local \
  --enable-mbstring \
  --enable-mbstring-encoding-translation \
  --with-openssl \
  --with-calendar \
  --with-xsl \
  --with-readline \
  --enable-debug=yes
make
make install
cp php.ini-dist /usr/local/apache2/conf/php.ini

Následně je nutné modifikovat soubor /usr/local/apache2/conf/php.ini, včetně základního zabezpečení:

mysql.default_socket = /tmp/mysql.sock
short_open_tag = Off
register_globals = Off
allow_url_fopen = Off

MySQL 4.0 databáze

MySQL databáze je použita ve verzi 4.0, postup pro verzi 4.1 by byl ovšem totožný.

Vlastní kompilace MySQL, včetně vytvoření skupiny a uživatele mysql:

cd /usr/local/src
tar -zxvf mysql-4.0.21.tar.gz
cd mysql-4.0.21
./configure --prefix=/usr/local/mysql
make
make install
groupadd mysql
useradd -g mysql mysql
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
chown -R root  .
chown -R mysql var
chgrp -R mysql .
bin/mysqld_safe --user=mysql

Soubor /etc/my.cnf může být pro malou zátěž MySQL databáze konfigurován například takto:

[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
net_buffer_length = 2K
thread_stack = 64K
skip-networking
server-id = 1
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout

phpMyAdmin

phpMyAdmin rozbalte pomocí příkazu tar -jxvf do /home/www. Za pomoci phpMyAdminu je možné spravovat MySQL databázi pomocí webového rozhraní.

Automatické spuštění Apache a MySQL

Zbývá poslední věc, a to zajistit automatické spouštění (a ukončení) Apache a MySQL při startu serveru. Zde vytvoříme (v případě SuSE 9.1, u jiných distribucí mohou být lokace odlišné) nový soubor /etc/init.d/web a nastavíme mu “executable”(spus­titelný) příznak:

#! /bin/sh
#
# /etc/init.d/web
#
# (c) Radek HULAN
# http://hulan.info/
#
### BEGIN INIT INFO
# Provides:       apache-mysql
# Default-Start:  5
# Default-Stop:   5
# Description:    Starts Apache2 and MySQL 4
### END INIT INFO

case "$1" in
        start)
        /usr/local/apache2/bin/apachectl start
        /usr/local/mysql/share/mysql/mysql.server start
                ;;
        stop)
        /usr/local/apache2/bin/apachectl stop
        /usr/local/mysql/share/mysql/mysql.server stop
                ;;
esac

Potom v YaSTu, v sekci Systém, pod-sekce Editor úrovní běhu, povolíme službu web (pro runlevel 5). Tím se Apache a MySQL automaticky spustí při startu serveru a vypne při jeho shutdownu.

Otestování instalace

Vytvořte soubor /home/www/index.php s tímto obsahem:

<html>
<head><title>PHP Test</title></head>
<body>
<?php phpinfo(); ?>
</body>
</html>

Ve vašem browseru napište http://localhost/ a potom rovněž https://localhost/, zobrazí se vám řada informací o PHP. Pokud napíšete do URL http://localhost/phpMyAdmin-2.6.0-rc2/, budete moci spravovat vaši MySQL databázi.


Autor, Radek Hulán, má vlastní odborný blog na adrese http://hulan.in­fo/blog/.

Našli jste v článku chybu?
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

Root.cz: 250 Mbit/s po telefonní lince, když máte štěstí

250 Mbit/s po telefonní lince, když máte štěstí

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube