====== [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 ===== 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