par Jean-Michel OLTRA
Il devient utile de compiler à partir des sources lorsque le rpm ne donne plus entière satisfaction. Personnellement j'aimerais utiliser les fonctions pdf de php. La version rpm que je possède ne le permet pas, car php n'a pas été compilé avec l'option '-with-pdf'. Si vous possédez déjà une version de php installée par rpm vous pouvez obtenir quelques info par un petit script :
<?
phpinfo();
?>
D'autre part la multiplication des dépendances dans l'installation avec rpm ne permet pas forcément une mise à jour aisée. Si je ne veux pas changer ma version de php mais que je veux mettre à jour MySQL, je devrais trouver tous les rpm compatibles avec ce que je veux faire.
Enfin, compiler est très formateur, surtout quand ça cafouille....
Avant de compiler il faut décompresser les sources dans le répertoire de votre choix, que j'appelerai DIR. Personnellement je fais ça dans /usr/local/src.
Généralement la compilation se fait par l'exécution du script 'configure', puis on appelle 'make', et enfin encore make avec 'make install'. Ces appels de fonctions se font dans le répertoire créé par la décompression.
Lisez les README et autres INSTALL.
'configure -help' donne les options que l'on peut passer à 'configure'.
C'est parfois le fichier dénommé makefile (ou Makefile) qu'il faut modifier pour faire une installation personnalisée.
Si un 'configure' foire lamentablement pensez à faire un 'rm config.cache' pour détruire le fichier de config avant de tenter un nouveau 'configure'.
Le prompt sera représenté par %.
Le prompt mysql sera représenté par >.
Une application ou bibliothèque sera écrite de la forme suivante : appli-version, car après tout,chacun compilera peut-être une version différente.
Les options que je vous passe sont celles que j'ai utilisées. Vous constaterez peut-être que certaines vous manquent ou que d'autres vous sont inutiles. Vous constaterez également que j'ai du passer beaucoup de drapeaux à gcc (problème de conflits ?, de gcc ?). Ceux ci seront peut-être inutiles dans votre configuration : vous pouvez faire un premier 'configure' sans drapeau et vou verrez ce que ça donne.
J'avais déjà le tryptique mysql-php-apache installé à partir de rpm sur ma Mandrake 7.1. J'ai pu aller jusqu'aux 'make install' sans désinstaller mes paquetages.
Je vais vous indiquer de décompresser, puis compiler des sources. Toute entrée dans un système d'exploitation est une intrusion potentiellement dangereuse. Si il n'y a pas de risque dans les sources issues des sites que j'ai indiqué, il convient d'être circonspect dans l'utilisation de programmes externes : tar -tvzf, Midnight Commander permettent de visualiser les archives, 'make install -n' permet de tester la commande 'make install'.
J'ai utilisé pdflib-3.03
% tar -xvzf pdflib-version.tar.gz
% cd pdflib-version/
% ./configure -enable-shared-pdflib
% make
% make install
% cp fonts/* /usr/local/fonts
PDFLIBRESOURCE=/usr/local/fonts
export PDFLIBRESOURCE
Vous compilerez si vous voulez utiliser les fonctions d'image de php. Sinon vous pouvez passer votre chemin...Installez avec les rpm, ou compilez, libjpeg et libpng avec les rpm 'devel'.
Personnellement, j'avais déjà installé les rpm freetype et xpm et j'ai compilé gd-1.8.4 avec la totale.
Vous allez me dire : ``mais j'ai un rpm gd qui est déjà installé...''. Personnellement je n'ai pas réussi à faire reconnaître gd-1.8.1 installé dans /usr/lib/ à mon 'configure' lors de la construction de php-4.0.5. Donc ça a été gd-1.8.4, et pas gd-2.0.1béta avec freetype2. Si freetype2 s'est laissée compiler sans chichi, je n'ai rien pu tirer de gd-2.0.1.
% tar -xvzf gd-1.8.4.tar.gz
% cd gd-1.8.4/
LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lttf
INCLUDEDIRS=-I. -I/usr/include/freetype -I/usr/include/X11 -I/usr/X11R6/include -I/usr/local/include
LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/XR/lib
INSTALL_LIB=/usr/local/lib/gd-1.8.4
INSTALL_INCLUDE=/usr/local/lib/gd-1.8.4
INSTALL_BIN=/usr/local/bin
Adaptez le Makefile à ce que vous avez et à ce que vous désirez.
% make
% make install
J'ai utilisé la 3.23.36, je l'avais en stock, mais la current release est, à l'heure où j'écris ces lignes, la 3.23.38.
Tant que j'y suis je ne saurais que trop vous conseiller le livre 'Mysql' de Paul DuBois chez CampusPress. Très bien écrit, extrêmement fonctionnel.
%tar -xvzf mysql-version.tar.gz
% cd mysql-version/
% CC=gcc CXX=gcc ./configure -prefix=/usr/local/mysql
Tel que je vous le dis, mysql installera son arborescence dans /usr/local/mysql. La source de donnée se trouvera dans /usr/local/mysql/var/ lorsque vous initialiserez les tables de permissions, avec mysql_install_db. Si ça ne vous convient pas, './configure -help' !
% make install
J'ai compilé apache_1.3.19, mais la 1.3.20 est sortie tout récemment.
% tar -xvzf apache-version.tar.gz
% cd apache-version/
% ./configure
Ma version est php-4.0.5
Le script 'configure' m'a demandé 'bison' et 'flex'. Je les ai installés en paquetage.
Pourquoi allégée ? Parce qu'on n'indique pas de chemin pour pdflib. Cette version a fonctionné sur une Mandrake 8 mais pas chez moi, sur la 7.1. Vous pouvez éventuellement commencer par là. Quand je dis qu'elle n'a pas fonctionné c'est qu'en fait je n'ai pas eu d'erreur sur la compilation elle-même mais que je ne pouvais pas utiliser de fonction pdf dans un script ! Cela se voyait sur la sortie de phpinfo() d'ailleurs :le support pdf n'était pas pris en compte.
% tar -xvzf php-version.tar.gz
% cd php-version/
% CPPFLAGS=''-I/usr/local/mysql/include/mysql -I/usr/local/include'' LDFLAGS=-L/usr/X11R6/lib ./configure -with-mysql=/usr/local/mysql -with-pdflib -with-apache=../apache-version -enable-track-vars -with-gd=/usr/local/lib/gd-1.8.4 -with-zlib-dir=/usr/lib -with-ttf=/usr/include/freetype -with-t1lib -enable-magic-quotes -with-jpeg-dir=/usr/lib -with-xpm-dir=/usr/X11R6/lib -with-tiff-dir=/usr/lib
Qui n'a pas fonctionné chez moi non plus...
Indiquer :
Pour que ça fonctionne il m'a fallu faire plus lourd. Mon cas n'est pas isolé : j'ai également vu dans les archives de la liste php-install des cas de pdf en théorie inclus dans php à la compil mais qui ne fonctionne pas au final.
J'ai créé un répertoire dans /usr/local/lib pour pdflib et un sous répertoire dans celui-ci pour les headers :
% mkdir /usr/local/lib/pdf3.03/include
'configure -help' peut vous donner les arguments à passer au script pour mettre les bibliothèques et les headers où vous voulez au 'make install'. Je ne l'ai pas fait car j'avais déjà les bibliothèques installées dans /usr/local/lib et /usr/local/include.
Dans le cas présent vous devez indiquer le chemin vers les bibliothèques pdf dans /etc/ld.so/conf et refaire un /sbin/ldconfig.
% make install
On revient ensuite vers Apache.
% cd apache-version
% LDFLAGS=-L/usr/X11R6/lib ./configure -activate-module=/src/modules/php/libphp4
% make install
On partira du principe que vous avez installé mysql dans PREFIX (chez moi, par conséquent, PREFIX=/usr/local/mysql/).
% ln -s /etc/rc.d/init.d/mysql /etc/rc.d/rc5.d/S99mysql
% ln -s /etc/rc.d/init.d/mysql /etc/rc.d/rc0.d/K99mysql
% ps -aux | grep 'mysql'
> update user set password = password(mot-de-passe-root) where user = 'root';
> flush privileges;
Je vous donne un exemple personnel d'une autre commande que vous adapterez à votre cas :
C'est fini. Il ne reste plus qu'à établir une politique pour les fichiers de log, et pour les sauvegardes, ainsi que pour les vérifications de l'intégrité des tables (ça je ne l'ai pas encore fait). J'ai demandé les sauvegardes dans un script appelé par la crontab de l'utilisateur mysql à qui j'ai donné les droits de 'select' et 'file'. Il y a surement d'autres choses à faire pour une administration fine mais je ne sais pas tout !
De la même manière, on partira du principe qu'Apache est installé dans PREFIX (chez moi PREFIX est donc /usr/local/apache)
% ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S85httpd
% ln -s /etc/rc.d/init.d/httpd /etc/rc.d/rc0.d/K85httpd
Il vous faut néanmoins renseigner la directive AddType ainsi :
% ps -aux | grep 'apache'
La fonction phpinfo() vous indiquera si vos supports gd et pdf sont activés (enabled).
Les scripts s'écrivent dans PREFIX/htdocs, ou dans un sous répertoire.
Un petit script pour vous donner une idée et vérifier que tout va bien. Ce script utilise des polices True Type. Et comble de bonheur pour vous, il est de moi...Ceux que la première ligne de texte aura déjà rebuté s'arrêteront là et finiront par imagepng() et imagedestroy(). Modifiez si nécéssaire le chemin vers vos polices True Type.
//testgd.php3 teste quelques fonctions images de php
header(``content-type:image/png'');
$im = imagecreate(500,160);
$bgcolor = imagecolorallocate($im,113,136,153);
$noir = imagecolorallocate($im,0,0,0);
$arc_color = imagecolorallocate($im,113,136,153);
$blanc = imagecolorallocate($im,255,255,255);
$my_color = imagecolorallocate($im,102,102,204);
imagearc($im,250,80,360,120,0,360,$arc_color);
imagefill($im,250,80,$my_color);
//1ère ligne de texte
$string = ``Linux Tarn'';
$font = ``/usr/share/fonts/ttf/western/babelfish.ttf;
$font_height = 50;
$ttfbox = imagettfbbox($font_height,0,$font,$string);
$start_x = 250 - (($ttfbox[0] + $ttfbox[2] + $ttfbox[4] + $ttfbox[6]) / 4);
$start _y = 80 - (($ttfbox[1] + $ttfbox[3] + $ttfbox[5] + $ttfbox[7]) / 4);
imagettftext($im,$font_height,0,$start_x,$start_y,$blanc,$font,$string);
//2ème ligne de texte
$vert = imagecolorallocate($im,51,204,51);
$str = ``http://www.linux-tarn.org'';
$font_height_str = 25;
$ttfbox_str = imagettfbbox($font_height_str,0,$font,$str);
$start_x = 250 - (($ttfbox_str[0] + $ttfbox_str[2] + $ttfbox_str[4] + $ttfbox_str[6]) / 4);
$start _y = 105 - (($ttfbox_str[1] + $ttfbox_str[3] + $ttfbox_str[5] + $ttfbox_str[7]) / 4);
imagettftext($im,$font_height_str,0,$start_x,$start_y,$vert,$font,$str);
imagepng($im);
imagedestroy($im);
?>
Encore un petit script pour tester les fonctions pdf. En revanche celui ci n'est pas de moi...
$file = fopen(``test.pdf'',''w'');
$pdf = pdf_open($file);
pdf_set_info($pdf,''Author'',''Uwe Steinmann'');
pdf_set_info($pdf,''Title'',''Test for php wrapper of pdflib 3.03'');
pdf_set_info($pdf,''Creator'',''See Author'');
pdf_set_info($pdf,''Subject'',''Testing'');
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, ``Page1'');
pdf_set_font($pdf,''Times-Roman'', 30, ''host'');
pdf_set_value($pdf,''textrendering'',1);
pdf_show_xy($pdf,''Times Roman outlined'', 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330,740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
echo ``P> ?>
This document was generated using the LaTeX2HTML translator Version 99.2beta6 (1.42)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -no_subdir -split 0 -show_section_numbers /home/oltra/documentation/docLyx/compiler_php-mysql-gd-pdf-apache.tex
The translation was initiated by oltra jean-michel on 2001-06-04