====== [HOWTO] Build PHP (like a redhat) ======
====== Descripción de servicio ======
Php compilado de las fuentes oficiales
====== Requerimientos de ejemplo de cualquier cliente ======
|bz2||Calendar||ctype||Curl||Date||Wddx
|dom||Exif||Filter||ftp||Eaccelertor 0.9.5.3||tokenizer
|Gd||Gettext||gmp||Hash||Zlib||sysvmsg
|Iconv||imagick (v2.2.1)||Imap||Json||Zip||ssh2
|libxml||Mbstring||mcrypt||memcache||zend optimiser (v3.3.3)||spl
|Mysql||Mysqli||xsl||Xmlwriter||xml||xmlreader
|pdo / pdo_mysql / pdo_sqlite||posix||pspell||Reflection||Pcre
|session||shmop||Simplexml||sockets||openssl
Las extensiones:
* [[http://fr3.php.net/manual/en/datetime.installation.php|datetime]]
* [[http://fr3.php.net/manual/en/filter.installation.php|filter]]
Forman parte del "core" de php desde la 5.2.0
====== Dependencias habituales ======
Estas dependencias están tomadas para RedHat Enterprise Linux usando la rhn:
yum install ImageMagick ImageMagick-devel gd gd-devel
libxslt libxslt-devel libc-client-devel libpng-devel
mysql-devel mysql httpd-devel aspell aspell-devel
Hay varias dependencias que hay que bajarse de [[http://dag.wieers.com/rpm/FAQ.php#B2|DAG]]
rpm -Uhv paquete_de_dag.rpm
yum install libmcrypt libmcrypt-devel libssh2 libssh2-devel
rpm -e rpmforge-release
|Asegurarse de eliminar el respositorio de dag (rpmforge) |
===== Dependencias para Oracle (oci8) =====
Si vamos a instalar soporte oracle:
Para el oracle client, ademas de los pasos anteriores, el installer necesita ciertas librerías que no es habitual tener de base en el sistema:
* RHEL4 xorg-x11-deprecated-libs
* RHEL5 yum install libXp libXtst
Paradogicamente usan las libs de 32bits aunque el installer sea el de 64bits ¿?
===== Codigo fuente =====
En mi caso este es el último código fuente disponible, siempre es conveniente usar la ultima revision de php (diferente a version, que ya no es tan conveniente, a no ser que la aplicación esté preparada):
cd /apps/software
wget "http://fr3.php.net/get/php-5.2.9.tar.bz2/from/fr.php.net/mirror"
tar xjfv php-5.2.9.tar.bz2
====== Extensiones ======
Las extensiones [[http://pecl.php.net/|PECL]] se pueden añadir antes o después de compilar el PHP.
===== Extensiones habituales =====
Las extensiones:
* [[http://pecl.php.net/package/memcache|memcache]]
* [[http://pecl.php.net/package/ssh2|ssh2]]
* [[http://pecl.php.net/package/imagick|imagick]] (extension de php para ImageMagick)
Se tienen que descargar aparte:
wget http://pecl.php.net/get/ssh2-0.11.0.tgz
wget http://pecl.php.net/get/memcache-2.2.5.tgz
wget wget http://pecl.php.net/get/imagick-2.3.0b1.tgz
mv imagick-2.3.0b1.tgz php-imagick-2.3.0b1.tgz
mv ssh2-0.11.0.tgz php-ssh2-0.11.0.tgz
mv memcache-2.2.5.tgz php-memcache-2.2.5.tgz
Hay varias formas de compilarlas, las 2 recomendables son con "phpize" una vez que está compilado el php o insertandolas en el php antes de compilarlas.
|He tenido que usar la version *BETA* (imagick-2.3.0b1) de la extensión por problemas de compilación que solo se resolvían con esta versión. |
==== Compilación built-in ====
**RECOMENDADA**, Añadir las extensiones al codigo fuente:
cd /apps/software
for i in php-imagick-2.3.0b1.tgz php-memcache-2.2.5.tgz php-ssh2-0.11.0.tgz ; do tar xzfv $i ; done
ll
mv imagick-2.3.0b1/ php-5.2.9/ext/imagick
mv memcache-2.2.5/ php-5.2.9/ext/memcache
mv ssh2-0.11.0/ php-5.2.9/ext/ssh2
cd php-5.2.9/
mv configure configure.old
./buildconf --force
./configure --help | egrep -i "imagick|memcache|ssh2"
Debería mostrar algo como esto:
[[root@eul2400246|php-5.2.9]]# ./configure --help | egrep -i "imagick|memcache|ssh2"
--enable-memcache Enable memcache support
--disable-memcache-session Disable memcache session handler support
--with-imagick=DIR Enables the imagick extension. DIR is the prefix to Imagemagick installation directory.
--with-imagick-gm=DIR GraphicsMagick backend. NO LONGER SUPPORTED!
--with-ssh2=DIR Include ssh2 support
--with-zlib-dir=DIR memcache: Set the path to ZLIB install prefix.
==== Compilación phpize ====
Este modo lo que hace es compilar la librería como "dll" para cargarla mediante php.ini.
Recomendado cuando se quiere añadir una nueva extensión sin recompilar el php, *hace falta tenerlo compilado previamente*.
Esta opción se tiene que usar para el eaccelerator, por eso la pongo como ejemplo:
cd /apps/software/
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xjfv eaccelerator-0.9.5.3.tar.bz2
mv eaccelerator-0.9.5.3 php-5.2.9/ext/eaccelerator
cd php-5.2.9/ext/eaccelerator
/apps/php5/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/apps/php5/bin/php-config
make
make install
mkdir /apps/php5/ext ; find /apps/php-5.2.9/lib/php/extensions -name eaccelerator.so -exec mv {} /apps/php5/ext/ ;
Post install:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
|En este caso habrá que añadir al //php.ini// la opción típica: extension=eaccelerator.so
|
===== Oci8 (extension oracle) =====
==== Oracle client ====
Lo recomendable es usar el "client" (si, el tocho), php 5.0 **NO** se puede compilar con soporte oracle con el instant client, el 5.2 en teoría, sí, pero mejor evitar problemas...
* client 11g i686
http://download.oracle.com/otn/linux/oracle11g/linux_11gR1_database_1013.zip
* client 11g x86_64
links http://download.oracle.com/otn/linux/oracle11g/linux_x86_11gR1_client.zip
* client 10g i686
links http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.zip
* client 10g x86_64
links http://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gz
gunzip 10201_client_linux_x86_64.cpio.gz
cpio -idmv < 10201_client_linux_x86_64.cpio.gz
//Uso links por que pide login en la OTN//
Dar de alta el usuario de oracle:
groupadd -g 10000 oinstall
groupadd -g 10001 dba
adduser -u 10000 -g oinstall -G dba -d /oracle -s /bin/bash -c "Usuario software Oracle" -m oracle
mkdir /oracle/10.2.0
chown oracle:oinstall -R /oracle/10.2.0
Y añadir las variables de entorno de oracle en caso que sean necesarias:
su - oracle
vi ora10.env
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/10.2.0/client
ORACLE_SID=
ORACLE_TERM=xterm
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_TERM NLS_LANG PATH LD_LIBRARY_PATH
Editar el profile:
vi .bash_profile
Añadir:
. ~/ora10.env
Capturas de la instalación:
| {{ php:php_full_compile_howto:oracle_client01.jpg?200 |}} | Seleccionar path (por defecto ok) |
| {{ php:php_full_compile_howto:oracle_client02.jpg?200 |}} | bastan las runtime |
| {{ php:php_full_compile_howto:oracle_client03.jpg?200 |}} | Ok por defecto |
| {{ php:php_full_compile_howto:oracle_client04.jpg?200 |}} | Next |
| {{ php:php_full_compile_howto:oracle_client05.jpg?200 |}} | Install |
| {{ php:php_full_compile_howto:oracle_client06.jpg?200 |}} | Wait |
| {{ php:php_full_compile_howto:oracle_client07.jpg?200 |}} | En la ventana adicional, next |
| {{ php:php_full_compile_howto:oracle_client08.jpg?200 |}} | Finish |
| {{ php:php_full_compile_howto:oracle_client09.jpg?200 |}} | Ejecutar como root los scripts: /oracle/oraInventory/orainstRoot.sh
/oracle/10.2.0/client/root.sh
|
| {{ php:php_full_compile_howto:oracle_client10.jpg?200 |}} | Finalizar instalación |
Antes de comenzar con la compilación es necesario inicializar varias variables de oracle, basta con usar el _ora10.env_:
. /oracle/ora10.env
===== Imap =====
La extensión imap, es para mí la extensión más difícil de compilar. Por el simple motivo que primero hay que compilar el propio imap. Y es un software bastante críptico.
Podéis ver las versiones [[ftp://ftp.cac.washington.edu/imap/|disponibles aquí]].
En mi caso la única que he conseguido compilar (y que después funcione el PHP) es la //imap-2007a1.tar.Z//:
cd /apps/software
wget ftp://ftp.cac.washington.edu/imap/imap-2007a1.tar.Z
tar xzfv imap-2007a1.tar.Z
cd imap-2007a
make lrh
Como véis no tiene configure, la documentación es poco menos que imposible de digerir y para colmo en algunas ocasiones compila pero el php NO, en ese caso, se debería compilar en otra máquina.
Las Opciones a añadir en el configure son:
--with-imap=/apps/software/imap-2007a
--with-imap-ssl
====== Compilación ======
===== Configure =====
./configure --enable-memcache
--with-imagick
--with-ssh2
--with-bz2
--with-curl
--enable-calendar
--enable-exif
--enable-ftp
--with-gd
--with-gettext
--with-gmp
--with-imap
--enable-mbstring
--with-mcrypt
--with-mysql
--with-mysqli
--with-openssl
--with-pdo-mysql
--with-pspell
--enable-shmop
--enable-sockets
--enable-sysvmsg
--enable-wddx
--with-xsl
--enable-zip
--with-zlib
--with-kerberos
--with-imap-ssl
--with-apxs2
--with-libdir=lib64
--with-oci8=shared
--prefix=/apps/php5
===== Compilación =====
make
make install
cd /apps
ln -s /etc/php.ini /apps/php5/lib/php.ini
===== Comprobar correcto funcionamiento =====
/apps/php5/bin/php -i
====== Opciones adicionales ======
===== Zend Optimizer =====
En caso de que sea necesario el Optimizador de Zend3, por que el cliente tenga los php's compilados, es necesario descargar e instalar.
Normalmente el cliente debería proveer del paquete ya que hay que registrarse en la página para obtenerlo, pero sino es un momento.
==== Instalación de Zend ====
Descargarlo y moverlo a la hubicación habitual
mv ZendOptimizer-3.3.3-linux-glibc23* /apps/software
cd /apps/software
tar xzfv ZendOptimizer-3.3.3-linux-glibc23*targz
cd ZendOptimizer-3.3.3-linux-glibc23*
./install
Seguir las instrucciones y añadir como path de instalación:
/apps/ZendOptimizer-3.3.3
Y como path para php.ini:
/etc
O dondde esté el php.ini usado por la máquina. El propio installer hace una copia del mismo.
Una vez que esté instalado, lo adecuamos a nuestras instalaciones:
ln -s /apps/ZendOptimizer-3.3.3 /apps/zend3
Borramos el enlace simbólico que crea el propio instalador y restauramos el que teníamos previamente:
rm -fv /etc/php.ini
mv /etc/php.ini-zend_optimizer.bak /etc/php.ini
Y añadimos las siguientes lineas al php.ini:
[[Zend]]
zend_extension_manager.optimizer=/apps/zend3/lib/Optimizer-3.3.3
zend_extension_manager.optimizer_ts=/apps/zend3/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.3
zend_extension=/apps/zend3/lib/ZendExtensionManager.so
zend_extension_ts=/apps/zend3/lib/ZendExtensionManager_TS.so
Comprobamos que el cli de php ha cojido el cambio:
php -i | grep -i optimizer
Que debería dar como resultado algo como:
[[root@htsphp1|buscador_domus]]# php -i | grep -i optimizer
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
===== Eaccelerator =====
Si queréis el panel de control de eaccelerator, hay que copiar el fichero "control.php" del código del eaccelerator a algún sitio donde apache pueda ejecutarlo y añadir la siguiente linea al php.ini:
eaccelerator.allowed_admin_path = "/var/www/html"
====== Ficheros auxiliares para las comprobaciones ======
Se puede colocar en el directorio del *default* virtualhost.
===== php =====
vi my_info.php
phpinfo(); ?>
===== php+mysql =====
vi my_test.php
";
print_r($row);
echo "";
?>
===== php+oracle =====
Logicamente hay que cambiar las opciones del oci_connect
vi my_test.php