Gentoo Logo

Actualizando PHP

Contenido:

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

(instala la última versión de PHP con CLI y el módulo para Apache2)

USE="cli apache2" emerge 'dev-lang/php'

(instala sólo PHP4)
USE="cli apache2" emerge '=dev-lang/php-4*'

(instalar ambos, PHP4 y PHP5)
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)

(instalar APC para PHP4 solamente)
emerge dev-php4/pecl-apc

(instalar APC para PHP5 solamente)
emerge dev-php5/pecl-apc

(instalar APC para ambos, PHP4 y PHP5)
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)

(desinstala los paquetes de PHP)
emerge --unmerge php mod_php

(desinstala las extensiones de PHP)
emerge --unmerge PECL-apc PECL-imagick xdebug

(desinstala las librerías/aplicaciones PHP)
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)

(comprobar para PHP4)
emerge --pretend --verbose '=dev-lang/php-4*'

(comprobar para PHP5)
emerge --pretend --verbose '=dev-lang/php-5*'

(comprobar extensiones para PHP4)
emerge --pretend --verbose dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(comprobar extensiones para PHP5)
emerge --pretend --verbose dev-php5/pecl-apc dev-php5/pecl-imagick

(comprobar librerías/aplicaciones PHP)
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)

(emerger el paquete PHP4)
emerge '=dev-lang/php-4*'

(emerger el paquete PHP5)
emerge '=dev-lang/php-5*'

(emerger las extensiones PHP para PHP4)
emerge dev-php4/pecl-apc dev-php4/pecl-imagick dev-php4/xdebug

(emerger las extensiones PHP para PHP5)
emerge dev-php5/pecl-apc dev-php5/pecl-imagick

(emerger las librerías/aplicaciones PHP)
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

(para el cli)
php-select php

(para cgi)
php-select php-cgi

(para phpize, php-config)
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

(para cli)
php-select php php4

(para cgi)
php-select php-cgi php5

(para phpize, php-config)
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.



Imprimir

Actualizado 11 de agosto, 2007

Sumario: Este documento explica el procedimiento que un usuario final debería seguir para actualizar con seguridad su instalación de PHP.

Andreas Korthaus
Author

Jordi Molina
Traductor

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.