TÍTULO: La receta de PHP4
VERSIÓN LFS: 2.4
AUTOR: J. Jones <jdj@darkside.dynup.net>
TRADUCTOR: Proyecto LFS-ES
SINOPSIS:
Esta receta debería lograr tener apache y PHP listos y funcionando, con la mayoría
de las características de PHP habilitadas. Los métudos aquí usados parecen ser
(para mí) el balance perfecto entre rendimiento y el uso eficiente de recursos. PHP
será compilado estáticamente dentro de apache, lo cual da el mejor rendimiento, la
mayoría de los extras de PHP serán construidos como módulos compartidos,
dejando así el binario httpd bonito y pequeño (léase sexy).
RECETA:
Versión: 1.0-test1
Tengo que asumir muchas de las opciones de configuración en esta receta,
así que si eres de los que se pone a jorungar (principalmente los --prefix's)
¡pon atención! :)
=====================================
Programas usados/mencionados/etc en esta receta.
Apache
http://httpd.apache.org/dist/
PHP
http://php.net/downloads.php
MySQL
Al parecer el servidor SQL libre más popular
http://www.mysql.com/downloads/
PostGreSQL
Excelente servidor SQL libre
http://postgresql.readysetnet.com/sites.html
Berkeley DB3
Patea al SQL, ¡úsalo!
http://www.sleepycat.com/download.html
GD - 1.8.4 en este momento es la versión recomendada.
Creación de imágenes al vuelo
http://www.boutell.com/gd/
zlib
Librería de compresión
ftp://ftp.freesoftware.com/pub/infozip/zlib/
libjpeg
Librería Jpeg
ftp://ftp.uu.net/graphics/jpeg/
libpng
Librería PNG
ftp://ftp.libpng.org/pub/png/src/
libungif
Librería GIF libre de patentes
ftp://prtr-13.ucsc.edu/pub/libungif/
libttf/libfreetype
Librería de fuentes de tipo verdadero (o TrueType, ¡QUERRÁS ESTO!)
http://freetype.sourceforge.net/
OpenSSL
Maravillosa librería de encriptación
http://www.openssl.org/
mhash
Provee acceso a gran cantidad de algoritmos de arreglos asociativos (hashing)
http://mhash.sourceforge.net/dl
(lib)mcrypt
Provee acceso a gran cantidad de esquemas de encriptación
http://mcrypt.hellug.gr/
readline
GNU readline (Esto es lo que hace a bash tan fresco)
ftp://ftp.gnu.org/gnu/readline/
pspell
La nueva API de aspell/ispell
http://pspell.sourceforge.net/
Imap - 2000c por favor, no la última beta que ellos quisieran que tu tuvieras :)
la librería imap de WU
ftp://ftp.cac.washington.edu/imap/old/imap-2000c.tar.Z
Curl
Librería de Cliente URL
http://curl.haxx.se/download.html
libxml
Librería de XML DOM, no debe ser confundida con la expat de apache,
usada por el analizador sintáctico para xml de php.
http://www.xmlsoft.org/#Downloads
LDAP
Servidor y librería LDAP
http://www.openldap.org/software/download/
zziplib
La zlib de archivos zip
http://zziplib.sourceforge.net/
=====================================
Dónde comenzar...
----------------
APACHE
Extrae los fuentes de apache. Mueve este directorio a
/usr/local/apache (mv ./apache_1.3.17 /usr/local/apache).
Accede a /usr/local/apache.
Edita el fichero config.layout para satisfacer tus gustos. Luego, ejecuta
./configure \
--with-perl=/usr/bin/perl \
--enable-module=all \
--enable-shared=max \
--disable-module=proxy \
--disable-module=usertrack \
--disable-module=auth_anon \
--disable-module=auth_db \
--disable-module=auth_dbm
Esto hará que apache construya todos sus módulos como DSO's (u Objetos
Dinámicos Compartidos, por sus siglas en inglés), reduciendo así el tamaño
del binario httpd. Así es como yo lo hago, siéntete libre de jorungar tanto
como quieras. No afectará nada más. El permitir a algunos de estos módulos
ser compilados estáticamente podría incrementar el rendimiento, pero eso
es para otra receta. ;) ¡SIÉNTETE LIBRE PARA MEJORAR ESTA RECETA!
Volveremos con apache más tarde.
----------------
GD
Todas las librerías de las que depende este paquete son sencillas de instalar.
No ahondaremos en ellas. Asumiré un prefijo --prefix=/usr en los tres primeros
(jpeg, ungif y png) y un prefijo --prefix=/usr/X11R6 en los dos últimos
(ttf/freetype, t1). Compila estas librerías en el orden que han sido listadas,
especialmente las dos últimas.
Extrae los fuentes de gd-1.8.4. Descarga el parche (construirá un .so para
tí :) de ^^^^GD-URL^^^^. Aplicar este parche debe ser tan simple como:
zcat gd-1.8.4-shared.patch.gz | patch -p0
Edita el Makefile hasta que veas que se ajusta a tus necesidades (prefijos de
instalación, posible remoción de las banderas de freetype, lo cual no recomiendo
en absoluto). El Makefile leerá la variable de entorno $CFLAGS, así que no te
preocupes por ésta.
make all install
----------------
Imap
Las librerías c-lient de imap son muy beta. Recomiendo quedarse con la
última liberación (release) estable, 2000c. De todas maneras, mi parche no
funciona en nada más sin algo de hackeo. ;)
Extrae el paquete imap-2000c, descarga el parche (que también creará un .so
para tí :) de ^^^^IMAP-URL^^^^. Aplícalo con:
zcat imap-2000c-shared.patch.gz | patch -p0
Accede al directorio imap-2000c, y ejecuta los siguientes comandos:
chmod a+x Build-me
./Build-me
Esto debería ser todo lo necesario. Este árbol de fuentes en mi opinión es algo
sucio, así que si la construcción te falla, pégame una grito. Envíame por correo
el fichero WU-imap.sucks (WU-imap.apesta) que se crea así:
make clean
./Build-me >WU-imap.sucks 2>&1
y veré qué puedo hacer.
----------------
PHP
Básicamente lo que yo hago es quitarle todo al intérprete php, dejando lo
mínimo necesario, lo compilo estáticamente en apache, luego construyo los
extras de php como objetos compartidos que pueden ser cargados por guiones
(o al inicio en el php.ini).
El módulo estático para apache de PHP:
Extrae los fuentes de php. Entra en el directorio. Escribe lo siguiente,
nota que también debes cambiar las rutaaaaaas:
./configure \
--prefix=/ruta/al/apache \
--with-config-file-path=/ruta/a/los/ficheros/de/conf/de/apache \
--with-apache=/ruta/al/apache \
--disable-pear \
--without-mysql \
--disable-xml \
--without-pcre-regex \
--disable-posix \
--with-openssl=/ruta/al/openssl \
--enable-trans-sid
make all install
Desafortunadamente el openssl no te permitirá (o no es capaz de) ser construido
como un objeto compartido, así que si lo quieres tendrás que agregarlo ahora.
Ya he intentado hackearlo exitosamente para construirlo como un .so; si alguien
lo ha logrado, ¡déjenmelo saber! :) (Incluso la versión CVS actual no lo permite).
Ahora, volvamos al apache. Ejecuta los mismos comandos de configuración
que usaste anteriormene para el mismo apache, agregándole la siguiente
línea:
--activate-module=src/modules/php4/libphp4.a
Puedes ahora ejecutar make all install en apache.
You can now make all install on apache.
Intérprete CGI de PHP.
Esto es completamente opcional, pero es algo agradable de tener, en mi opinión.
Esto creará un intñerprete binario de php, el cual podrás usar justo como
perl o sh. NO lo uses para páginas web.
en el directorio de fuentes de php, haz lo siguiente:
make distclean
./configure \
--prefix=/usr/local \
--with-config-file-path=/usr/local/etc \
--enable-force-cgi-redirect \
--enable-discard-path \
--disable-pear \
--without-mysql \
--disable-session \
--without-pcre-regex \
--disable-posix \
--disable-xml \
--with-openssl=/ruta/al/openssl
make all install
Ahora tendrás un intérprete de la línea de comandos en /usr/local/bin/php.
Extras de PHP:
Ahora, la parte divertida. Haz un make distclean en el árbol de fuentes de php.
NOTAS: PHP viene con una versión integrada de la líbrería cliente de mysql, así
que no requiere un mysql instalado para soportarlo. Si estás usando pspell,
necesitas el parche de ^^^^PSPELL-PATCH^^^^ para que php compile exitosamente.
Esta librería fué actualizada recientemente, y cambió un poco su api. El
parche arreglará el soporte a pspell de php. DOM XML (libxml) requiere tanto
a libxml-1.* como a libxml2-* para ser instalado.
./configure options
--with-apache=/usr/local/apache == Ruta al árbol de
fuentes de apache, contruye como módulos de apache
Cuestiones de las bases de datos...
Para soportar MySQL...
--with-mysql=shared,/opcional/ruta/al/mysql (lee la nota de arriba)
== Incluye el cliente para mysql.
Para soportar PostGreSQL...
--with-pgsql=shared,/prefijo/de/instalación/de/pgsql == Incluye el
cliente para pg, prefijo de la instalación de postgres
Para soportar DB3(¡TIENES QUE PROBARLO! ¡ESTO SUPERA A LOS *SQL!)
--enable-dba=shared == habilita la capa de abstracción de la db
--with-db3=/usr == ¡agrega el soporte a db3!
Para soportar GD...
--with-gd=shared,/usr/X11R6 == utiliza gd, prefijo de la instalación de gd
--with-jpeg-dir=/usr == las librerías jpeg están prefijadas aquí
--with-xpm-dir=/usr/X11R6 == las librerías xpm libs están prefijadas aquí
--with-ttf=/usr/X11R6 == utiliza ttf, y está prefijada aquí
--with-t1lib=/usr/X11R6 == Usa las fuentes tipo 1 (type 1),
y el prefijo está aquí
--enable-gd-imgstrttf
--enable-gd-native-ttf
Cuestiones de encriptación y compresión...
Para mhash...
--with-mhash=shared,/usr == utiliza mhash, está prefijada aquí
Para mcrypt...
--with-mcrypt=shared,/usr == utiliza mcrypt, está prefijada aquí
Para zlib...
--with-zlib=shared,/usr == utiliza las funciones de zlib, y está prefijada aquí
Para bzip2...
--with-bz2=shared,/usr == bzip2!
Para zziplib
--with-zziplib=shared,/usr == zzip!
Soporte imap...
--with-imap=shared,/prefijo/al/imap/ == habilita las funciones imap
--with-imap-ssl=/ruta/al/openssl == ¡agrega soporte ssl!
Misceláneos...
--with-pcre-regex=shared == ¡Expresiones Regulares Compatibles con Perl! (incorporado)
--with-pspell=shared,/ruta/al/pspell == Soporte a pspell
--with-curl=shared,/ruta/al/curl == ¡utiliza curl!
--with-ldap=shared,/ruta/al/openldap == habilita las funciones ldap
--with-gettext=shared,/usr == ¡Soporte a GNU gettext!
--with-readline=shared,/usr == ¡Soporte a GNU Readline!
--enable-bcmath=shared == cálculos de precisión bcmath (incorporado)
--with-gmp=shared == librería de presición matemática de GNU (incorporado)
--enable-posix=shared == funciones posix (incorporado)
--enable-calendar=shared == conversión de calendarios (incorporado)
--enable-ctype=shared == funciones de tipos de caracteres (incorporado)
--enable-filepro=shared == soporte integrado a filepro (incorporado)
--enable-shmop=shared == soporte a shmop (incorporado)
--enable-sysvsem=shared == funciones de semáforo SystemV (incorporado)
--enable-sysvshm=shared == funciones de compartición de memoria SystemV (incorporado)
--with-xml=shared == soporte al análisis sintáctico de XML (incorporado)
--enable-wddx=shared == material de XML wddx (incorporado)
--with-domxml=shared,/ruta/al/libxml == material DOM XML
--enable-ftp=shared == habilita las funciones ftp (incorporado)
--enable-sockets=shared == habilita las funciones de conexiones (sockets) de redes
(incorporado)
--enable-yp=shared == soporte a yp (incorporado)
--enable-dbase=shared == soporte de sólo lectura para dbase (incorporado)
--enable-exif=shared == soporte a exif (incorporado)
La opción =shared (compratido) crea una librería compartida que cargará php,
permitiéndote actualizar uno o más módulos/características, sin necesidad de
recompilar apache y php.
Aquí está el comando ./configure, con todas las opciones mostradas anteriormente.
Asegúrate de arreglar las rutas. ;)
./configure \
--with-apache=/usr/local/apache \
--with-mysql=shared,/opcional/ruta/al/mysql \
--with-pgsql=shared,/prefijo/de/instalación/de/pgsql \
--enable-dba=shared \
--with-db3=/usr \
--with-gd=shared,/usr/X11R6 \
--with-jpeg-dir=/usr \
--with-xpm-dir=/usr/X11R6 \
--with-ttf=/usr/X11R6 \
--with-t1lib=/usr/X11R6 \
--enable-gd-imgstrttf \
--enable-gd-native-ttf \
--with-mhash=shared,/usr \
--with-mcrypt=shared,/usr \
--with-zlib=shared,/usr \
--with-bz2=shared,/usr \
--with-zziplib=shared,/usr \
--with-imap=shared,/prefijo/al/imap/ \
--with-imap-ssl=/ruta/al/openssl \
--with-pcre-regex=shared \
--with-pspell=shared,/ruta/al/pspell \
--with-curl=shared,/ruta/al/curl \
--with-ldap=shared,/ruta/al/openldap \
--with-gettext=shared,/usr \
--with-readline=shared,/usr \
--enable-bcmath=shared \
--with-gmp=shared \
--enable-posix=shared \
--enable-calendar=shared \
--enable-ctype=shared \
--enable-filepro=shared \
--enable-shmop=shared \
--enable-sysvsem=shared \
--enable-sysvshm=shared \
--with-xml=shared \
--enable-wddx=shared \
--with-domxml=shared,/ruta/al/libxml \
--enable-ftp=shared \
--enable-sockets=shared \
--enable-yp=shared \
--enable-dbase=shared \
--enable-exif=shared \
--disable-nls \
| tee ~/php-config.log
este guión tiende a ser suficientemente rápido.. así que verifica el ~/php-config.log
para obtener los resultados.
El guión de configuración de PHP no parece manejar sus -L's e -I's muy bien. Si
obtienes cualquier error fatal, verifica el config.log. Mi arreglo temporal para
esto es añadir lo siguiente al inicio de la línea del ./configure:
CFLAGS=$CFLAGS\ -L/usr/local/lib\ -L/usr/X11R6/lib\ -I/usr/local/include\
-I/usr/X11R6/include <el comando de configuración anterior>
Tengo la esperanza que esto sea arreglado en un futuro.
Una vez que todo se luzca bien, ejecuta un make. Una vez completado, escoje
la ubicación en donde mantener los .so's, como /usr/local/lib/php, accede al
directorio de los módulos (modules) y cp *.so /usr/local/lib/php/. Probablemente
también desees hacer un strip -g a estos módulos.
Ahora, la llave aquí es tu php.ini. Copia el fichero php.ini-dist del
directorio de fuentes a
/la/ruta/del/fichero/de/configuración/que/escogiste/cuando/construiste/el/módulo/apache/php.ini.
En este fichero, cambia el extension_dir a la /ruta/donde/copiaste/los/*.so's.
Si deseas que php cargue cualquiera de éstos al inicio, agrega
extension=nombre.so en el php.ini. Para cargarlos en tiempo de ejecución,
esta parece ser la manera más efectiva.
Digamos que necesito el soporte para mysql. Al inicio de mi guión, debería
tener esto:
if(!function_defined('mysql_query')) {dl('mysql.so'); }
Por favor, date cuenta del ! :)
Tal vez desees hacer un ldd a todos estos .so's.. ellos matarán al httpd hijo
si son llamados con dl() y no consiguen alguna librería que necesiten (sin
embargo, es mejor que matar todo el apache, ¿eh?).
Siéntete libre para enviarme correos (N. del T. En inglés) con preguntas respecto
a este proceso o sobre el uso de los objetos compartidos. Tambien Agradezco
cualquier sugerencia para mejorar esta receta.
----------------
|