Portál AbcLinuxu, 30. dubna 2025 10:17
Zatoužil jsem po vlastní kompilaci PHP 5 - potřebuji totiž několik rozšíření, z nichž některá dostat do Kubuntu 5.10 z existujících balíčků asi moc dobře nejde. Rozhodl jsem se proto kompilovat, vzít to z gruntu i s Apachem a své zážitky z tohoto dobrodružství si poznamenat. Předesílám, že tento postup ještě není kompletní.
Konkrétní rozšíření, které mi chybí, je mysqli - v (k)ubuntu repozitářích prostě php5-mysqli není. Když jsem tuhle extension našel v neoficiálních archivech, měl jsem velkou radost, která ale netrvala dlouho - dostal jsem ultimátum: buď mysqli, nebo xsl (které potřebuji taky).
Vedle toho, že budu mít k dispozici všechna rozšíření, která potřebuji, vlastní kompilace PHP mi umožní pracovat s nejnovější verzí 5.1.1, kdežto v repozitářích je AFAIK jen 5.0.5. Vlastní kompilací se zároveň vyhnu problémům při přidávání nových rozšíření.
Instaluji do celkem čerstvého Kubuntu 5.10 (tak čerstvého, že v něm na začátku není ani gcc - čerstvostí mám na mysli množství apliakcí doinstalovaných pomocí apt-get a spol.) a budu instalovat Apache 1.3.34 a PHP 5.1.1 (zdroje obou jsou stažené přímo z oficiálních stránek projektů: http://httpd.apache.org a http://cz.php.net).
Nejdřív si nainstaluji chybějící nástroje pro kompilace (gcc a make) a při té příležitosti přidám i programy flex ("tool for generating programs that perform pattern-matching on text") a bison ("parser generator"), které jsou nezbytné pro kompilaci PHP:
sudo apt-get install gcc make flex bison
Spolu s těmito balíky se pro splnění závislostí nainstalují ještě binutils, gcc-4.0 a m4.
Pro kompilaci PHP je pak potřeba ještě balík libxml2-dev, se kterým se mi nainstalují také libc6-dev, linux-kernel-headers a zlib1g-dev.
sudo apt-get install libxml2-dev
Tenhle krok jsem původně chtěl provést až po instalaci Apache, ale skript ./configure neprošel přes test vhodnosti kompilátoru (s hlášením /usr/bin/ld: crt1.o: No such file: No such file or directory). Po instalaci libxml2-dev a závislostí je po problému.
Dál jedu podle návodu k instalaci PHP (soubor INSTALL z balíku se zdrojovými kódy) a občas nahlížím do instalačního návodu Apache:
tar -xvvzf apache_1.3.34.tar.gz
tar -xvvjf php-5.1.1.tar.bz2
cd apache_1.3.34
./configure --prefix=/usr/local/apache --enable-module=so
make
sudo make install
Nyní mám předkonfigurovaný Apache s podporou Dynamic Shared Objects (DSO) nainstalovaný v adresáři /usr/local/apache a můžu ho otestovat:
sudo /usr/local/apache/bin/apachectl start
Na http://localhost:8080 se mi zobrazí testovací stránka webserveru. Na portu 8080 je to proto, že jsem kompiloval jako běžný uživatel, což mělo vliv na předkonfiguraci. Stačí malý zásah do httpd.conf a vše poběží na portu 80 - vlastní konfiguraci si ale nechám až na konec. Teď se spokojím s tím, že to funguje.
Protože v PHP 5 budu chtít podporu CURL, musím mít v systému libcurl:
sudo apt-get install libcurl3 libcurl3-dev
Tímto krokem se nainstalují také libidn11-dev a libssl-dev.
Stejně tak, když chci podporu mysqli, musím mít nainstalovanou MySQL databázi:
sudo apt-get install mysql-server-4.1 mysql-client-4.1
Tímto krokem se nainstalují také balíčky libdbd-mysql-perl, libdbi-perl, liblockfile1, libnet-daemon-perl, libplrpc-perl, mailx a postfix. V konfiguračním dialogu pro postfix jsem vybral nastavení jen pro lokální doručování. Nyní je potřeba nainstalovat ještě libmysqlclient14-dev:
sudo apt-get install libmysqlclient14-dev
Poděkování: Bez libmysqlclient14-dev mi skript ./configure umřel s chybovým hlášením mysql_config not found. Protože se to stalo ve chvíli, kdy mě klátila únava (někdy po páté hodině ráno) a nemohl jsem už vymyslet nic rozumnějšího, než sudo apt-get install mysql_config (což - nečekaně - nezafungovalo), nechal jsem blogspot rozepsaný a požádal v něm čtenáře, kteří vědí, aby mi během mého bezstarostného spánku poradili. Za tipy, které se v diskusi sešly, všem děkuji a jsem za ně na uzel.
Abych mohl mít podporu XSL, potřebuji v systému ještě program xslt-config, který je v balíčku ??libxslt1-dev??, se kterým se nainstalují ještě libgcrypt11-dev a libgpg-error-dev:
sudo apt-get install libxslt1-dev
Teď už konečně samotné PHP 5:
cd ../php-5.1.1
./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysqli --with-xsl --with-curl
Dlužno podotknout, že ./configure testuje dlouhou řadu věcí a trvá docela dlouho, než proběhne, takže je dobré si předem ověřit, že v systému jsou všechny knihovny a programy, které budou pro kompilaci potřeba (např. libcurl pro instalaci CURL rozšíření apod.).
Nyní PHP zkompiluji a nainstaluji:
make
sudo make install
Zkopíruji výchozí soubor s konfigurací PHP na správné místo. Použiji soubor php.ini-dist, protože instalaci budu používat k vývojovým účelům:
sudo cp php.ini-dist /usr/local/lib/php.ini
Teď je třeba zkonfigurovat Apache, aby o PHP věděl a soubory .php jím zpracovával. Instalace PHP sama přidala do /usr/local/apache/conf/httpd.conf direktivu LoadModule, já teď musím přidat direktivu AddModule:
AddModule mod_php5.c
Aby Apache věděl, že PHP sobory má zpracovávat pomocí PHP modulu, musím přidat tento řádek (patří do části <IfModule mod_mime.c>):
AddType application/x-httpd-php .php
Nyní Apache spustím:
sudo /usr/local/apache/bin/apachectl start
a je hotovo. Samozřejmě je teď ještě potřeba upravit po svém soubory php.ini a httpd.conf, to už ale nemá co dělat se samotnou kompilací Apache a PHP ze zdroje.
Pokud nemáme v plánu provádět vlastní kompilace software nějak častěji (což já s Kubuntu opravdu nemám), odstraníme ze systému nepotřebné balíčky, hlavně vývojové knihovny (každý, ať si přebere sám, které balíčky potřebuje, a které ne):
sudo apt-get remove flex bison libxml2-dev libc6-dev linux-kernel-headers zlib1g-dev libcurl3-dev libmysqlclient14-dev libxslt1-dev libgcrypt11-dev libgpg-error-dev
Doufám, že tenhle text pomůže i někomu jinému, než jen mně, až se příště budu vztekat s nějakými rozšířeními . Každopádně, když najdete nějakou chybu nebo nepravdu, dejte vědět v diskusi.
Tiskni
Sdílej:
build-essential
, jehož závislosti jsou po instalaci ve /var/cache/apt/archives
. $ aptitude show build-essential ... Závisí na: libc6-dev | libc-dev, gcc (>= 4:4.0), g++ (>= 4:4.0), make, dpkg-dev (>= 1.13.5)
Přiznávám se, že jsem si akorát přečetl nadpis a závěr, ale pokud jste používal balíky z distribuce a vlastní binárky a vidím mysql_config not found
, napadá mě: Nemá synáček Debianu konfiguráky pro MySQL jinde než MySQLko normálně? Nevyřešil by to symlink?
Pokud tu melu úplný OT, sorry - fakt jsem to moc nečetl
USE="-apache apache2 -bcmath -berkdb bzip2 -calendar -cdb -cgi -cjk -cli -crypt -ctype curl curlwrappers -db2 -dba -dbase -debug -discard-path -doc exif -flatfile -force-cgi-redirect ftp gd -gd-external -gdbm -gmp -hardenedphp -hyperwave-api -iconv -imap -inifile -interbase -iodbc ipv6 -java-external -kerberos -ldap -libedit -mcve -memlimit -mhash ming -mnogosearch -msql -mssql mysql mysqli ncurses nls -oci8 -odbc -oracle7 -ovrimos pcntl pcre -pdo-external -pear pic posix -postgres -qdbm readline -recode -sapdb -sasl session -sharedext -sharedmem -simplexml -snmp -soap sockets -spell -spl sqlite ssl -sysvipc threads -tidy tiff -tokenizer truetype -wddx xml2 -xmlrpc xpm -xsl -yaz -zip zlib" emerge dev-lang/php
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.