¿Cómo actualizo a la última versión de PHP en CentOS con yum?

22

Encontré algunas publicaciones de blog sobre esto, pero es más bien la falta de descripciones sobre posibles efectos secundarios.

Realmente podría usar algunos detalles sobre estos pasos:

  1. Cómo agregar un repositorio que proporciona PHP 5.4 en yum
  2. ¿Puede esto reemplazar sin problemas la versión actual de PHP en CentOS?
  3. ¿Cómo puedo volver al repositorio oficial cuando es compatible con PHP 5.4? (actual 5.3.3 en mi sistema)
  4. ¿Habrá algún potencial para romper los módulos PHP que estoy usando actualmente?

Nota

Las personas se actualizaron con éxito con el mismo método en versiones más nuevas y sugieren eliminar versiones específicas de la pregunta. Si bien es bueno precisar versiones en caso de que las versiones más nuevas realmente rompan algo, me gustaría mantener la última versión exitosa sugerida por la comunidad como una nota.

Siéntase libre de actualizar esto si ha actualizado con éxito en otras versiones.

  • Versiones PHP: 5.4, 5.5, 5.6
  • Versión CentOS: 5, 6
Vicario
fuente

Respuestas:

19

Seguí las instrucciones de Instalar Apache / PHP 5.4.10 en Fedora 17/16, CentOS / RHEL 6.3 / 5.8 con una ligera modificación. Tomó tal vez 10 minutos. Mis comandos exactos se muestran a continuación. Tenga en cuenta que el primer comando tuvo que cambiarse de lo que se muestra en el artículo. El cambio fue de epel-release-6-7.noarch.rpma epel-release-6-8.noarch.rpm.

  1. ¿Cómo agregar un repositorio que proporciona PHP 5.4 en yum?

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
    yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm
    
  2. ¿Puede esto reemplazar sin problemas la versión actual de PHP en CentOS? Para mí, los siguientes comandos funcionaron y ninguna de mis páginas web PHP existentes se rompió. Su experiencia puede ser diferente.

    yum --enablerepo=remi install httpd php php-common
    yum --enablerepo=remi install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    service httpd restart
    
  3. ¿Cómo puedo volver al repositorio oficial cuando es compatible con PHP5.4? No he probado los comandos para eliminar y volver a instalar PHP desde los repositorios de CentOS, pero estos deberían funcionar.

    # Remove the Remi packages. Note the reversed command order
    yum remove php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    yum  remove httpd php php-common
    # Install the CentOS packages. 
    yum install httpd php php-common
    yum install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml
    
  4. ¿Habrá algún potencial para romper los módulos PHP que [sic] estoy usando actualmente? Sí. Usando una versión reciente de CentOS (6.2?) Con Zend instalado usando el instalador de Zend, la actualización anterior rompió Zend.

Todos los comandos anteriores se ejecutaron como root. La mejor práctica es iniciar sesión como usuario sin privilegios y usar sudo. (Esta es una VM de desarrollo con una instantánea actual ...)

Además, NO habilite el repositorio Remi de forma predeterminada; en el pasado, fui inteligente y lo habilité de manera predeterminada y las cosas se rompieron, incluso con prioridad de repositorio.

Jeff Benshetler
fuente
3
Las cosas a menudo se ponen feas con Remi. Prefiero usar el repositorio de iuscommunity para php actualizado. Otra forma es usar el repositorio del servidor Zend, pero me parece un poco caro.
Kazimieras Aliulis
1
@KazimierasAliulis Desafortunadamente, el repositorio de IUS induce un infierno de dependencia al usar nombres de archivos y paquetes incompatibles. No puedo recomendar usarlo.
Michael Hampton
Descripción muy completa. Como no tengo ningún código relacionado con el motor Zend, no debería importar en mi caso, ¿verdad?
Vicary
1
@MichaelHampton que uso yum --enablerepo=remi updatey se encarga de todos los paquetes php relacionados, parece una mejor solución. El servidor funciona sin problemas desde hace unos días, gracias por toda la información.
Vicary
1
Nota: el tipo olvidó agregar phpa la lista de instalación, lo que me causó muchos problemas ya que Apache no atendió los archivos php, así que no olvide agregar esto cuando use
eric.itzhak
9

Una mejora sobre la otra respuesta webtatic:

1) Usando la guía en http://www.webtatic.com/packages/php54/ :

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

2) Primero debe ver qué paquetes instalados deben reemplazar, puede hacerlo utilizando yum shell para combinar la eliminación de php-common y la instalación de php54w-common en una transacción (para que no se eliminen las dependencias compartidas)

yum shell
> remove php-common
> install php54w-common
> run
…
Is this ok [y/N]: n

No diga "y" a los resultados, pero tome nota de todos los paquetes mencionados en "Eliminar por dependencias", p. Ej.

Removing for dependencies:
 php
 php-cli
 php-pear
 php-pecl-memcache
 php-mysql

Si hay otros paquetes además de php * en esta lista, entonces no puede cambiar sin problemas a Webtatic PHP 5.4, pero tendrá que investigar alternativas. Webtatic tiene paquetes de reemplazo para todos los paquetes básicos de php (consulte los paquetes enumerados en la página vinculada en 1. para confirmación), por lo que no debería haber problemas, a menos que use otros repositorios de terceros que tengan instalados paquetes que dependan de la versión específica de php instalado

Para el resto de la instalación (todavía en yum shell), simplemente elimine estos paquetes e instale sus contrapartes php54w- *:

> remove php-common php php-cli php-pear php-pecl-memcache php-mysql
> install php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql
> run
…
Is this ok [y/N]: y

Entonces, solo debería ver los paquetes que ha configurado para ser eliminados e instalados en la lista, y puede confirmar la instalación para cambiar. Todos los servicios que se ejecutan actualmente con php cargado deberán reiniciarse, por ejemplo httpd o php-fpm.

En cuanto a que esto sea 'continuo', cualquier cambio de software que ocurra mientras los usuarios pueden acceder al sitio web debe tener las consecuencias completamente entendidas. Las bibliotecas compartidas que se eliminan y agregan cuando un proceso aún no las ha cargado podrían potencialmente cargarse mientras la biblioteca compartida no está allí. Es mejor hacer actualizaciones de software como esta sin conexión, y preferiblemente probadas primero en una máquina que no sea de producción para verificar que el proceso funcione como se esperaba.

3) Para cambiar a un paquete hipotético de base php54 de CentOS (CentOS 5 usaba el prefijo php53), simplemente ejecute los pasos anteriores reemplazando la eliminación de php con la eliminación de php54w, y la instalación de php54w con la instalación de php54, por ejemplo

yum shell
> remove php54w-common
> install php54-common
> run
…
Is this ok [y/N]: n
…
> remove php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql
> install php54-common php54 php54-cli php54-pear php54-pecl-memcache php54-mysql
> run
Is this ok [y/N]: y

Sin embargo, en cuanto al cambio a la base hipotética php54, es probable que no haya alternativas para algunos paquetes (por ejemplo, no hubo extensión php53-pecl-memcache en CentOS 5) y Webtatic tiene paquetes que no están disponibles en la base CentOS (por ejemplo, php54w -pecl-zendopcache). Si faltan, generalmente no tiene otra opción que usar pecl directamente para instalarlos.

4) Cualquier actualización de PHP puede introducir errores, y los sitios web deben volver a probarse. Esto no es específico de Webtatic, sino la idea general de que las nuevas características introducen nuevos errores.

A diferencia del repositorio de Remi en la respuesta aceptada, el repositorio Webtatic EL6 nunca usa los mismos nombres de paquete que los repositorios base de CentOS, por lo que no anulará la instalación / actualización de paquetes a los que no tiene la intención de cambiar, y como tal está habilitado de forma predeterminada.

Descargo de responsabilidad: soy el propietario / mantenedor de Webtatic

Andy
fuente
El método yum shell es realmente bueno para observar la dependencia, gracias.
Vicary
@Andy, excelente redacción detallada, gracias. ¿Cómo cambio el cli predeterminado (y solo el cli) de PHP a 5.4 en CentOS 6?
Gaia
0

puedes encontrar php 5.4.9 aquí para la instalación de yum:

http://www.webtatic.com/packages/php54/

puede hacer un "rpm -qa | grep php" para ver todos sus paquetes php actuales y un "rpm -e" para eliminar. No conozco sus módulos actuales, pero vale la pena probarlos antes de la actualización.

TheDayIsDone
fuente
Usted respondió un poco 1. Cuando se trata del mantenimiento del servidor, no se trata simplemente de instalarlo y ejecutar pruebas, realmente podría usar más información antes de hacer cualquier cosa.
Vicary