Huiswerk Linux: Installatie PHP PHP is de meest gebruikte programmeertaal voor het maken van websites. Als je PHP met Apache gebruikt, dan wordt het mogelijk om zogenaamde Content Management Systems (CMS) te gebruiken, zoals WordPress, Joomla en Drupal. Het huiswerk voor deze week is: installeer de PHP scripting taal. Over PHP PHP is bedacht door Rasmus Lerdorf uit Groenland. De oorspronkelijke betekenis van de letters PHP is Personal Home Page, maar dat werd vrij snel veranderd in PHP Hypertext Preprocessor. Hoewel PHP zuigt (zie: Apache front-end), is het een zeer populaire scripting-taal. Dit komt voornamelijk omdat bijna alle Content Management Systems (CMS), zoals WordPress, Joomla, Drupal en Zend de taal gebruiken. PHP wordt met Apache meegecompileerd. Dat wil zeggen: we moeten eerst de PHP shared module compileren. Daarna moeten we Apache opnieuw compileren zodat Apache de nieuwe module kan gebruiken. Het sudo mechanisme Het compileren en installeren van de PHP software doen we namens de root gebruiker. Hierdoor worden automatisch de juiste toegangsrechten op de bestanden toegepast. Cygwin gebruikers Sudo voor Cygwin gebruikers: rechts-klik op het icoon van de Cygwin terminal, en kies voor Als administrator uitvoeren. PHP gaat ervan uit dat minimaal de volgende pakketten op je systeem aanwezig zijn. Deze moeten we dus eerst nog installeren. apt-get install libxml2-devel libjpeg-devel libpng-devel libmysqlclient-devel Het pakket libxml2 is een verzameling functies waarmee XML (Extended Markup Language) documenten kunnen worden gemaakt en gelezen. Met de pakketten libjpeg en libpng kunnen afbeeldingen in het PNG 1 en JPEG 2 formaat worden bewerkt. Andere Linux gebruikers Gebruikers van andere Linux distributies (Ubuntu, Debian, Suze, OSX, etc.) starten een terminal met de toetsencombinatie <Ctrl><Alt>-T. We gebruiken het commando sudo om in te loggen met het su (become Super User) commando. Daardoor blijven we ingelogd: sudo su PHP gaat ervan uit dat minimaal de volgende pakketten met shared libraries op je systeem aanwezig zijn. Deze moeten we dus eerst installeren. apt-get install libxml2-dev libjpeg-dev libpng-dev libmysqlclient-dev Raspbian-gebruikers (Raspberry PI) moeten er rekening mee houden dat hun software voor de ARM chip gecompileerd gaat worden. De loadable modules staan op een andere plek dan waar PHP ze verwacht. Daarom moeten de Raspbian gebruikers volgende symbolic links aanmaken: ln -s /usr/lib/arm-linux linux-gnueabihf/libjpeg.a /usr/lib/ ln -s /usr/lib/arm-linux linux-gnueabihf/libpng.a /usr/lib/ 1 Portable Network Graphics 2 Joint Photographic Experts Group
Broncode neerladen en uitpakken We gaan eerst de broncode voor PHP neerladen. Ga in de directory voor broncode staan. Dit doen we met het commando cd (change directory): cd /usr/local/src Nu kunnen we de broncode voor PHP neerladen. Dit doen we met het wget (www get document) programma: wget -N http://www.commandlinerevolution.nl/source/php-5.2.17.tar.gz Het programma wget maakt een kopie van het neergeladen bestand met een volgnummer als het bestand al een keer is neergeladen. Dit is niet handig. Via de optie N (newer) geven we aan dat wget het eventueel bestaande bestand vervangt als het nieuwer is. De broncode is ingepakt in het tar (tape archive, in Linux slang: tarball) formaat. Pak het bestand uit middels het tar commando: tar -xf php-5.2.17.tar.gz Let op: het zijn nogal veel bestanden, dus het duurt even voordat tar klaar is. Met de optie x (extract) geven we aan dat we het bestand willen uitpakken. Met optie f (file) geven we aan dat het om een bestand gaat. De bestanden worden uitgepakt naar de map php-5.2.17. Wacht tot dit klaar is. Broncode patchen PHP maakt gebruik van de XML library (bibliotheek met functies voor het bewerken van XML). Deze verschilt sterk in versie per Linux systeem. Om ervoor te zorgen dat de PHP code op alle systemen gecompileerd kan worden, gaan we de broncode oplappen (patchen). Ga allereerst in de zoëven aangemaakte directory staan. Dit doen we met het commando cd (change directory): cd php-5.2.17 Nu gaan we de het patch-bestand neerladen. Dit doen we ook weer met het wget programma: wget -N http://www.commandlinerevolution.nl/source/php-5.2.17 5.2.17-libxml2 libxml2-2.9.2.patch 2.9.2.patch Tot slot kunnen we de patch uitvoeren. Dit doen we met het patch programma: patch -p0 < php-5.2.17 5.2.17-libxml2 libxml2-2.9.2.patch 2.9.2.patch Middels de optie p (path) geven we aan welk deel van de in het patch-bestandje genoemde directory relatief is aan de map waarin de broncode van PHP staat. Met het omgekeerde redirection-symbool ( < ) geven we aan dat het hele bestand als input moet worden genomen. De output moet er alsvolgt uitzien: patching file configure patching file ext/dom/node.c patching file ext/dom/documenttype.c patching file ext/simplexml/simplexml.c Broncode compileren Zoals eerder besproken bestaat het uitvoeren van locale installaties uit drie stappen: configureren, compileren en installeren (zie ook: Linux Huiswerksysteem). PHP configureren Omdat PHP, net als alle Linux-software, is geschreven als platform-onafhankelijke software, moeten er extra tests op je systeem worden uitgevoerd. Het configure script is een zogenaamd shell script waarmee deze tests worden uitgevoerd. Dit script wordt in alle software-distributies meegeleverd. Je kunt het script alsvolgt starten:./configure --with with-apache=../apache_1.3.29 --without without-iconv iconv \ --with with-gd --enable enable-mbstring Zoals je ziet is het commando over meerdere regels verdeeld. Dit moest omdat de complete regel niet op de pagina paste. Je kunt gerust het hele blokje tekst copiëeren en in de terminal plakken. De afgebroken regels zijn namelijk beëindigd met een backslash ( \ ) character. Dit zorgt ervoor dat de terminal de regels ziet als één commando.
Via de optie -with-apache geven we aan waar PHP de extra broncode moet plaatsen, waarmee we straks Apache kunnen hercompileren. Met de optie - without-iconv geven we aan dat de iconv 3 bibliotheken niet gebruikt moeten worden. Met - with-gd compileren we de GD 4 broncode mee. Met de optie -enable-mbstring (multi-byte strings) geven we aan dat we unicode strings, zoals UTF-8, willen gebruiken. De output ziet er ongeveer alsvolgt uit: Generating files creating./config.status creating php5.spec creating main/build-defs.h creating scripts/phpize creating scripts/man1/phpize.1 creating scripts/php-config creating scripts/man1/php-config.1 creating sapi/apache/libphp5.module creating sapi/cli/php.1 creating main/php_config.h creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ License: This software is subject to the PHP License, available in this distribution in the file LICENSE. By continuing this installation process, you are bound by the terms of this license agreement. If you do not agree with the terms of this license, you must abort the installation process at this point. +--------------------------------------------------------------------+ Thank you for using PHP. Remember to check the platform specific part of the reference manual for hints about installing MySQL on your platform. Also have a look at the files in the Docs directory. PHP compileren Nadat PHP de systeemvereisten heeft gecontroleerd, kan de broncode gecompileerd worden. Dit doen we met het make programma: make We kijgen nu de output van het compileer-proces te zien. Deze bestaat voornamelijk uit het herhaaldelijk uitvoeren van het GNU compiler programma gcc. De output van een succesvolle compilatie ziet er alsvolgt uit: Build complete. Don't forget to run 'make test'. Let op: voer make test niet uit. Het compileer-proces duurt toch al vrij lang. Op mijn machine (3Ghz/500Mb) duurde het drie kwartier. Op mijn Raspberry PI (500Mhz/500Mb) zelfs 1,5 uur. PHP module installeren We hebben nu een aantal zogenaamde binaries (uitvoerbare programma s) gemaakt. De binaries, inclusief help- en loadable modules, moeten nu in de juiste locaties geïnstalleerd worden: Type bestanden binaries (programma s) man pages (help-bestanden) libraries (loadable modules) includes (broncode) Apache PHP modules locatie /usr/local/bin /usr/local/man /usr/local/lib/php /usr/local/include/php /usr/local/src/apache_1.3.29/src/modules/php5/ Dit kunnen we automatisch doen via het commando install van het make programma: make install 3 De iconv software converteert van de ene teken-set naar de andere, bijvoorbeeld ASCII of UTF-8. PHP heeft een bepaalde versie nodig welke in veel Linux systemen niet ondersteund wordt. Om conflicten te voorkomen, compileren we de iconv broncode niet mee. 4 GD staat voor Graphics Draw. Een framework, bedoeld voor web-programmeurs om afbeeldingen te bewerken. Zie voor meer info: http://www.boutell.com/gd/
De bestanden worden nu gekopieerd naar de juiste locaties en voorzien van de juiste toegangsrechten. Ook dit duurt vrij lang: ongeveer 5 minuten. Wacht rustig af. De output ziet er alsvolgt uit: Installing PHP SAPI module: apache Installing PHP CLI binary: /usr/local/bin/ Installing PHP CLI man page: /usr/local/man/man1/ Installing build environment: /usr/local/lib/php/build/ Installing header files: /usr/local/include/php/ Installing helper programs: /usr/local/bin/ program: phpize program: php-config Installing man pages: /usr/local/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/lib/php/ [PEAR] Archive_Tar - installed: 1.3.7 [PEAR] Console_Getopt - installed: 1.2.3 [PEAR] Structures_Graph- installed: 1.0.3 [PEAR] XML_Util - installed: 1.2.1 [PEAR] PEAR - installed: 1.9.1 Wrote PEAR system config file at: /usr/local/etc/pear.conf You may want to add: /usr/local/lib/php to your php.ini include_path Installing PDO headers: /usr/local/include/php/ext/pdo/ Apache hercompileren In de vorige stap hebben we de PHP-module gecompileerd, zodat er extra broncode wordt toegevoegd aan de map voor de Apache broncode. Deze extra broncode moet nu worden meegecompileerd. Ga allereerst terug naar de map voor de Apache broncode. Dit doen we met het commando cd: cd../apache_1.3.29 Zoals we eerder hebben gezien (zie: Apache Installatie), installeren we Apache in drie stappen: configureren, compileren en installeren. Apache configureren Het configure-script kunnen we alsvolgt starten: bash./configure --activate activate-module=src/modules/php5/libphp5.a Normaal zou het commando./configure voldoende zijn, maar in sommige Linux versies zoals Debian, wordt standaard niet bash als commando-interpreter gebruikt maar dash, een variant op het bash programma. De Apache scripting benodigt bash. Met de optie -activate-module geven we aan dat de PHP module moet worden meegecompileerd. Configuring for Apache, Version 1.3.29 + using installation path layout: Apache (config.layout) + activated php5 module (modules/php5/libphp5.a) + Warning: no Perl interpreter detected for support scripts. + Perhaps you need to specify one with --with-perl=file. Creating Makefile Creating Configuration.apaci in src Creating Makefile in src + configured for Cygwin platform + setting C compiler to gcc + setting C pre-processor to gcc -E + using "tr [a-z] [A-Z]" to uppercase + checking for system header files + adding selected modules o php5_module uses ConfigStart/End + using builtin Expat + checking sizeof various data types + doing sanity check on compiler and options Creating Makefile in src/support Creating Makefile in src/os/cygwin Creating Makefile in src/ap Creating Makefile in src/main Creating Makefile in src/lib/expat-lite Creating Makefile in src/modules/standard Creating Makefile in src/modules/php5 Apache compileren Nu kan het hercompileren van Apache worden gestart. Dit doen we met het make programma:
make We kijgen nu de output van het compileer-proces te zien. Deze bestaat voornamelijk uit het herhaaldelijk uitvoeren van het GNU compiler programma gcc. De output van een succesvolle compilatie ziet er alsvolgt uit: gcc -c -I../os/cygwin -I../include -DCYGWIN -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite - DNO_DL_NEEDED `../apaci` checkgid.c gcc -DCYGWIN -DUSE_HSREGEX -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED `../apaci` -o checkgid - L../os/cygwin -L../ap checkgid.o -lm -lap -los -lcrypt -lgdbm make[2]: Map '/usr/local/src/apache_1.3.29/src/support' wordt verlaten <=== src/support make[1]: Map '/usr/local/src/apache_1.3.29' wordt verlaten make[1]: Map '/usr/local/src/apache_1.3.29' wordt binnengegaan make[1]: Map '/usr/local/src/apache_1.3.29' wordt verlaten <=== src Apache installeren We hebben nu een aantal zogenaamde binaries (uitvoerbare programma s) gemaakt. De binaries, inclusief help- en configuratiebestand moeten nu in de juiste locaties geïnstalleerd worden. Dit doen we opnieuw met het make programma: make install i De bestanden worden geïnstalleeerd. De output ziet er alsvolgt uit: +--------------------------------------------------------+ You now have successfully built and installed the Apache 1.3 HTTP server. To verify that Apache actually works correctly you now should first check the (initially created or preserved) configuration files /usr/local/apache/conf/httpd.conf and then you should be able to immediately fire up Apache the first time by running: /usr/local/apache/bin/apachectl start Thanks for using Apache. The Apache Group http://www.apache.org/ +--------------------------------------------------------+ Het hoera-moment We hebben de PHP module met Apache meegecompileerd. Dit betekent dat Apache nu beschikking heeft over de PHP scripting taal. Om te controleren of de PHP module aan Apache is toegevoegd kunnen we het volgende commando gebruiken: /usr/local/apache/bin/httpd -l De (ingekorte) output moet er alsvolgt uitzien. Als het goed gegaan is heb je nu de module mod_php5.c meegecompileerd: Compiled-in modules: http_core.c mod_env.c mod_log_config.c mod_mime.c mod_negotiation.c mod_status.c mod_userdir.c mod_alias.c mod_access.c mod_auth.c mod_setenvif.c mod_php5.c suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
Huiswerk opsturen Teken de opdracht af door mij jouw command history te sturen. Dit doe je met een pijpleiding tussen de commando s history en email. Zorg dat het onderwerp van de e-mail tussen aanhalingstekens staat: history email -s "PHP installatie" daniel@smtp.boland.nl Administrator uitloggen We hebben Apache opnieuw gecompileerd met de PHP module, maar we zijn nog steeds ingelogd als Administrator (root). Geef tot slot <Ctrl>-D om de Administrator uit te loggen.