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
- Budeme potřebovat knihovnu OpenSSL: openssl-0.9.7d.tar.gz
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.
- Budeme potřebovat zdrojové kódy Apache 2.0.51 – httpd-2.0.51.tar.gz
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:
- Základní modul PHP 5.0.1 – php-5.0.1.tar.bz2
- CURL knihovna – curl-7.12.1.tar.gz
- libiconv knihovna – libiconv-1.9.1.tar.gz
- JPEG knihovna: jpegsrc.v6b.tar.gz
- PNG library: libpng-1.2.7.tar.gz
- cpdflib knihovna: clibpdf110–7e.tar.gz
- Freetype 2 knihovna: freetype-2.1.9.tar.bz2
- GD 2 knihovna: gd-2.0.28.tar.gz
- RPM: libxml2 knihovna – libxml2-devel-2.6.7–28.i586.rpm
- RPM: zlib knihovna – zlib-devel-1.2.1–70.i586.rpm
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í MySQL 4.0 databáze – mysql-4.0.21.tar.gz
- Instalujeme libtermcap knihovnu- libtermcap-2.0.8–35.i386.rpm
- A instalujeme libtermcap-devel knihovnu – libtermcap-devel-2.0.8–35.i386.rpm
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 2.6.0 – phpMyAdmin-2.6.0-rc2.tar.bz2
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”(spustitelný) 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.info/blog/.