Actualizando PHP
1.
Introducción
En el pasado han existido muchas peticiones sobre por qué PHP5 dentro
de Portage no está marcado todavía como estable. El problema no es el
propio paquete de PHP5, el principal motivo por el que PHP5 no estaba
marcado como aún estable es que existen diversas aplicaciones,
extensiones de PHP y otros paquetes en Portage, que no funcionan con
PHP5, y no hay nada que se pueda hacer al respecto. PHP5 no es 100%
retro-compatible con PHP4, y no todo programa PHP4 puede ser o será
portado a PHP5. Muchos usuarios van a seguir necesitando soporte para
PHP4 durante un tiempo.
La solución para solucionar todos estos problemas es proporcionar un
entorno mixto PHP4 / PHP5 en el mismo sistema y al mismo tiempo. Pero
esto no era posible con el esquema actual de paquetes PHP y eclasses,
de ahí la necesidad de hacer un gran esfuerzo en un nuevo esquema,
nuevas eclasses y nuevos ebuilds.
Este documento explica con detalle como actualizar tu sistema sin
destrozarlo.
Nota:
Los nuevos paquetes de PHP requieren el nuevo esquema de Apache, así
que échale un vistazo a Actualizando Apache si no
has actualizado todavía.
|
2.
Cambios
Paquetes básicos de PHP consolidados
Todos los ebuilds PHP dev-php/php, dev-php/php-cgi y
dev-php/mod_php han sido unidos en un solo ebuild:
dev-lang/php.
Para escoger el SAPI que quieres, usa los siguientes USE flags,
-
cgi - compila y instala /usr/bin/php-cgi
-
cli - compila y instala /usr/bin/php
-
apache - compila y instala mod_php for Apache 1.3 (
nuevo esquema)
-
apache2 - compila y instala mod_php for Apache 2.0
(nuevo esquema)
Puedes usar y combinar cualquiera de estas USE flags; con la excepción
de usar simultáneamenteapache y apache2.
El principal objetivo de estos ebuilds es que puedas tener instalados
al mismo tiempo PHP4 y PHP5:
Listado de Código 2.1: instalando PHP |
USE="cli apache2" emerge 'dev-lang/php'
USE="cli apache2" emerge '=dev-lang/php-4*'
USE="cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
|
Nota:
Los parámetros USE no deberían utilizarse de esta forma, por favor,
usa /etc/portage/package.use como te explicamos después.
|
Nuevas categorías en Portage
Los nuevos ebuilds de PHP se han movido de dev-php a
dev-lang/php. Para hacer posible la instalación independiente
de paquetes para PHP4 y PHP5, se han creado dos nuevas categorías de
portage: dev-php4 y dev-php5. Estas categorías son
usadas principalmente pro paquetes PECL como pecl-pdo,
pecl-apc, php-java-bridge o xdebug.
Para instalar pecl-apc:
Listado de Código 2.2: instalar una extension PHP como PECL::APC (ejemplo) |
emerge dev-php4/pecl-apc
emerge dev-php5/pecl-apc
emerge dev-php4/pecl-apc dev-php5/pecl-apc
|
Nuevos directorios
-
Estos nuevos ebuilds instalan sus contenidos en
/usr/lib/php4 y /usr/lib/php5 (los
módulos Apache van al lugar adecuado para Apache).
-
Los paquetes PEAR se instalan en /usr/share/php
(antes /usr/lib/php ), si usas pear como USE
flag.
-
Los paquetes PECL no volverán a añadir directivas de configuración
al archivo de configuración php.ini, a partir de
ahora lo harán en archivos del tipo [PACKAGE].ini en
la ruta /etc/php/[SAPI]/ext.
Enlaces simbólicos de los binarios de PHP
Si instalas más de una versión de PHP, p.ej.:
Listado de Código 2.3: emerge PHP4 y PHP5 |
USE="cgi cli apache2" emerge '=dev-lang/php-4*' '=dev-lang/php-5*'
|
Los ebuilds crearán enlaces simbólicos en /usr/bin para
la última versión de PHP que hayas instalado, en este caso PHP5 ya que
se instaló después de PHP4. Si quieres que /usr/bin/php
o /usr/bin/php-cgi apunten a PHP4 o uno a PHP4 y otro a
PHP5, etc. puedes usar la herramienta
php-select del ebuild
app-admin/php-toolkit. php-select simplifica crear
enlaces simbólicos de los binarios adecuados.
3.
Instrucciones para la actualización
Encontrar los paquetes a actualizar
Lo primero que necesitarás saber es que paquetes adicionales necesitas
actualizar. Puedes averiguar esto usando la herramienta equery,
parte del paquete app-portage/gentoolkit:
Listado de Código 3.1: Lista los paquetes instalados en dev-php |
$ equery list 'dev-php/'
[ Searching for all packages in 'dev-php' among: ]
* installed packages
[I--] [ ] dev-php/php-4.4.0 (0)
[I--] [ ] dev-php/mod_php-4.4.0 (1)
[I--] [ ] dev-php/smarty-2.6.10 (0)
[I--] [ ] dev-php/PEAR-PEAR-1.3.5-r1 (0)
[I--] [ ] dev-php/PEAR-Mail-1.1.6 (0)
[I--] [ ] dev-php/PEAR-MDB-1.3.0 (0)
[I--] [ ] dev-php/PECL-apc-3.0.6 (0)
[I--] [ ] dev-php/PECL-imagick-0.9.11 (0)
[I--] [ ] dev-php/xdebug-2.0.0_beta3 (0)
|
Importante:
Los paquetes que puedas tener instalados son muy diferentes, asegurate
de que ejecutas este comando por ti mismo. Deberías también tomar nota
de la lista que genere dicho comando, para poder asegurarte de que
actualizas todos los paquetes.
|
Nota:
Algunas webapps no se ven afectadas, dado que muchas de ellas usan la
eclass webapp que se encarga de instalarlas correctamente. Seguramente
quieras comprobar si hay alguna nueva revisión.
|
Las extensiones PHP, como por ejemplo
- PECL-apc
- PECL-imagick
- xdebug
Se han dividido en 2 categorías separadas de portage: dev-php4
y dev-php5, para permitir usarlas independientemente en ambas
versiones. Adicionalemente, muchos de estos paquetes han sido
renombrados:
Ejemplos de nuevos directorios y cambios de nombre:
| Extensión PHP |
viejo |
nuevo en PHP4 |
nuevo en PHP5 |
| APC |
dev-php/PECL-apc |
dev-php4/pecl-apc |
dev-php5/pecl-apc |
| Imagick |
dev-php/PECL-imagick |
dev-php4/pecl-imagick |
dev-php5/pecl-imagick |
| Xdebug |
dev-php/xdebug |
dev-php4/xdebug |
dev-php5/xdebug |
Nota:
Antes de emerger estas extensiones de nuevo, deberías buscar en
/usr/portage como se han renombrado los paquetes.
|
Eliminar los viejos paquetes
Hemos hecho diversos cambios en como PHP trabaja dentro de
Gentoo. Debes eliminar todos tus antiguos paquetes de PHP antes de
empezar a instalar los nuevos:
Listado de Código 3.2: eliminando los paquetes viejos (ejemplo) |
emerge --unmerge php mod_php
emerge --unmerge PECL-apc PECL-imagick xdebug
emerge --unmerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
Configurar los USE flags
Dado que se han añadido nuevas USE flags, posiblemente quieras
revisarlas y añadir las lineas apropiadas en
/etc/portage/package.use (deberás crearlo si no existe).
Nota:
/etc/portage/package.use establecerá y recordará las USE
flags para tu instalación de PHP sin tener que añadirlas de forma
global en make.conf.
|
Por favor, configura las USE flags de acuerdo con lo que quieras que
tu instalación soporte (se recomienda como mínimo configurar la USE
flag cli):
Listado de Código 3.3: USE flags para dev-lang/php (ejemplo) |
dev-lang/php -* cli apache2 ctype gd jpeg mysql pcre png session truetype xml xsl zlib
|
Nota:
-* desactivará todas las USE flags (incluyendo funcionalidad
básica PHP como Session-, PCRE-, gd- y el soporte para MySQL-!), así
que tendrás que especificar cada USE flag para cada
extensión/funcionalidad que quieras usar. Visita
Managing Extensions para obtener detalles. Debes poner la USE
flag pcre como se indica arriba si quieres usar funciones
preg_* o session si quieres usar
Funciones de gestión de sesión.
|
Si quieres instalar PHP4 y PHP5 en paralelo, puedes indicar diferentes
parámetros USE para cada versión:
Listado de Código 3.4: diferentes USE flags para PHP4 y PHP5 (ejemplo) |
=dev-lang/php-4* -* cgi cli ctype gd jpeg mysql pcre pear png session truetype xml xsl zlib
=dev-lang/php-5* -* cli apache2 ctype gd jpeg mysql pcre pdo-external pear png session simplexml soap sqlite truetype xml xsl zlib
|
Nota:
Para una lista de los parámetros USE recomendadas, échale un vistazo a
USE flags recomendadas. Para una lista de los parámetros USE
disponibles para PHP mira la Tabla de
USE flags en el overlay del wiki.
|
Emergiendo PHP
Ahora tienes la opción de instalar sólo PHP4, sólo PHP5 o ambos en
paralelo. Para instalar PHP4 solo tienes que hacer un emerge
=dev-lang/php-4*, para instalar PHP5 (la versión más reciente)
puedes usar dev-lang/php, y para instalar ambas en paralelo,
tienes que emerger =dev-lang/php-4* y =dev-lang/php-5*.
Comprobar la configuración de los parámetros USE:
Listado de Código 3.5: Comprobar parámetros USE (ejemplo) |
emerge --pretend --verbose '=dev-lang/php-4*'
emerge --pretend --verbose '=dev-lang/php-5*'
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick
emerge --pretend --verbose PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
Emerge PHP si todo está correcto:
Listado de Código 3.6: emerger nuevos paquetes (ejemplo) |
emerge '=dev-lang/php-4*'
emerge '=dev-lang/php-5*'
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug
emerge dev-php5/pecl-apc dev-php5/pecl-imagick
emerge PEAR-PEAR PEAR-Mail PEAR-MDB smarty
|
PHP4 y PHP5 en paralelo: escoger que binario cli/cgi va a
usarse
Después de hacer el emerge, tendrás binarios para cli y/o
cgi en /usr/lib/php4/bin y/o
/usr/lib/php5/bin. Si has instalado ambos, PHP4 y PHP5,
portage no podrá decidir por ti que versión se usará por defecto y
establecerá el enlace simbólico a aquel que se haya instalado último
en /usr/bin. Así que si instalaste por último PHP5, verás
un enlace simbólico de /usr/bin/php a
/usr/lib/php5/bin/php. De esta forma, un binario
cli y/o un cgi además de php-devel (responsable
de construir extensiones PHP usando phpize y php-config)
debe ser enlazado simbólicamente (en /usr/bin), cosa que
se puede hacer con mayor facilidad usando php-select, que forma
parte de app-admin/php-toolkit.
Nota:
Los paquetes dev-lang/php dependen de
app-admin/php-toolkit para que php-select esté
disponible automáticamente después de emerger los nuevos paquetes de
php.
|
Suponiendo que hayas emergido tanto =dev-lang/php-4* como
=dev-lang/php-5*, introduce los siguientes comandos
php-select para ver que versiones de php están actualmente
seleccionadas:
Listado de Código 3.7: muestra las versiones actualmente seleccionadas de PHP |
php-select php
php-select php-cgi
php-select php-devel
|
Deberías ver algo parecido a:
Listado de Código 3.8: ejemplo de salida del comando php-select |
# php-select php
/usr/bin/php is set to /usr/lib/php5/bin/php
|
Que significa que la ruta por defecto al binario cli de PHP
/usr/bin/php esta enlazada al binario PHP5
/usr/lib/php5/bin/php. Así que los scripts que usen
/usr/bin/php serán ejecutados por PHP5.
Usar php-select para cambiar la versión de PHP usada por
defecto
Si no estás conforme con la configuración por defecto que has
encontrado en el punto anterior, puedes usar php-select de
nuevo para cambiar a la versión que tu quieras:
Listado de Código 3.9: seleccionar la versión deseada |
php-select php php4
php-select php-cgi php5
php-select php-devel php5
|
Nota:
Por favor teclea php-select -h para saber que es lo que
php-select puede hacer.
|
Comprueba los enlaces:
Listado de Código 3.10: Comprobando enlaces |
# stat /usr/bin/php /usr/bin/php-cgi /usr/bin/phpize /usr/bin/php-config | grep File
File: `/usr/bin/php' -> `/usr/lib/php4/bin/php'
File: `/usr/bin/php-cgi' -> `/usr/lib/php5/bin/php-cgi'
File: `/usr/bin/phpize' -> `/usr/lib/php5/bin/phpize'
File: `/usr/bin/php-config' -> `/usr/lib/php5/bin/php-config'
|
Nota:
Ten en cuenta que php-select solo cambia las versiones por
defecto. Si tienes instalados tanto PHP4 como PHP5 cli/cgi siempre
puedes usar rutas directas como por ejemplo
/usr/lib/php4/bin/php y
/usr/lib/php5/bin/php para ejecutar un script PHP con una
versión específica. Puedes usar tanto los cgis de PHP4 y PHP5 en la
misma instancia de Apache, pero no puedes usar dos módulos Apache PHP
diferentes en una misma instancia Apache, échale un vistazo a Guia de configuración
PHP4 y PHP5 para conocer los detalles.
|
4.
Migración de los archivos de configuración
El paquete Gentoo PHP almacena la configuración en
/etc/php, que contiene un subdirectorio para cada SAPI de
cada versión de PHP:
Listado de Código 4.1: lista de los directorios de configuración PHP |
$ ls -1 /etc/php
apache2-php4
apache2-php5
cli-php4
cli-php5
|
Cada subdirectorio contiene su propio php.ini, como los
paquetes antiguos.
Cambios en php.ini
Tendrías que usar etc-update o dispatch-conf para
arreglar las diferencias entre tus opciones viejas y nuevas en
php.ini. Dos directivas que debes comprobar son
include_path y extension_dir. Pero ojo,
extension_dir es diferente para cada versión de PHP (¡también
entre las versiones 5.0 y 5.1!).
Ejemplo para PHP 5.1 en /etc/php/apache2-php5/php.ini y
/etc/php/cli-php5/php.ini:
Listado de Código 4.2: antigua configuración en php.ini |
include_path = ".:/usr/lib/php"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20050617/"
|
Listado de Código 4.3: nueva configuración en php.ini |
include_path = ".:/usr/share/php"
extension_dir = "/usr/lib/php5/lib/php/extensions/no-debug-non-zts-20050617/"
|
Aviso:
Asegurate de usar etc-update o dispatch-conf para
comprobar las configuraciones correctas de cada archivo.
|
Cambios en la configuración de las extensiones PHP
El nuevo paquete PHP ya no almacena las directivas de configuración
para las extensiones externas (compartidas) de PHP en
php.ini. Estas directivas tienen su configuración en su
archivo de configuración específico dentro de los directorios
/etc/php/*/ext. Para activar/desactivar las extensiones
compartidas, se usan enlaces simbólicos hacia
/etc/php/*/ext-active. Si quieres activar una extensión,
crea un enlace en /etc/php/*/ext-active que apunte hacia
el correspondiente archivo [EXTENSION].ini en
/etc/php/*/ext/. Si quieres deshabilitar una extensión,
elimina el enlace simbólico correspondiente.
Si tenías instalado anteriormente dev-php/PECL-apc, la
configuración APC se guarda en tu php.ini. Si reemerges
el nuevo paquete dev-php5/pecl-apc, la configuración por
defecto para APC se almacenará en
/etc/php/*5/ext/apc.ini.
De esta forma, tienes que mover tus directivas de configuración de APC
de /etc/php/*5/php.ini a
/etc/php/*5/ext/apc.ini y crear un symlink desde
/etc/php/*5/ext-active/apc.ini a
/etc/php/*5/ext/apc.ini.
Nota:
Si instalaste PHP como módulo de Apache, asegurate de reiniciar Apache
después de la instalación y configuración de PHP.
|
5.
Configurar Apache para trabajar con PHP4 y PHP5
Hay muchas formas de hacer trabajar a Apache con dos versiones de PHP
en paralelo. La forma más simple es usar PHP4 y PHP5 como cgi binario,
o usar PHP4 como cgi y PHP5 como módulo (o al revés).
Hemos creado una Guía i de
configuración PHP4 y PHP5 que explica algunas de las posibles
soluciones.
6.
Soporte / Obteniendo Ayuda
Si tienes problemas con los nuevos paquetes Gentoo PHP, puedes
conseguir ayuda a través de los siguientes recursos:
-
Preguntas frecuentes sobre PHP en Gentoo
- Página de los
desarrolladores del PHP Overlay
- #gentoo-php en irc.freenode.net; éste es el canal de chat donde
los autores del nuevo esquema suelen estar. ¡Nos encantará verte
aquí!
-
Foros Gentoo es un
sitio popular donde acudir en busca de ayuda. Hay un montón de
usuarios de Gentoo leyéndolos de forma simultánea, haciendo posible
que puedas obtener ayuda en un momento.
Para detalles acerca de la implementación de los nuevos paquetes,
puedes leer a Stuarts
enviando correos a gentoo-dev. Tambien puede encontrar
interesante el
Stuart's PHP Blog.
En la Página de
desarrollo puedes encontrar mucha documentación y ebuilds más
recientes, que pueden ser movidos al árbol oficial de portage
posteriormente.
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|