Clicky

Cómo actualizar a PHP 8.1 desde Rocky Linux 8.8

Rocky Linux

Joomla avisa que debemos actualizar a PHP 8.1 para un sitio más rápido y más seguro

En Joomla lleva apareciendo desde hace unos días un aviso que informa que mi versión de PHP sólo está recibiendo correcciones de seguridad desde el proyecto PHP:

"Su versión de PHP, 8.0.30, en estos momentos sólo está recibiendo correcciones de seguridad desde el proyecto PHP. Esto significa que su versión de PHP pronto ya no será compatible. Recomendamos planificar la actualización a una nueva versión de PHP antes de que llegue al final de la compatibilidad en 26-11-2023. Joomla será más rápido y más seguro si actualiza a una nueva versión de PHP. Póngase en contacto con su proveedor para obtener las instrucciones de actualización".

aviso de Joomla sobre PHP

De la misma manera hay algunos módulos que no pueden actualizarse debido al mismo problema, por ejemplo Cache Cleaner (Limpiar Caché), que da el siguiente error al intentar actualizar a la última versión 8.5.0:

"Limpiar Caché is not compatible with PHP 8.0.30.
You need PHP 8.1 or higher to be able to install and use this extension."

error de Cache Cleaner

Aunque yo suelo esperar a que las versiones de software se actualicen cuando estén disponibles en el sistema operativo, en una consulta en el foro de Rocky Linux, que es el que utilizo, no me pudieron asegurar que se vaya a producir en breve una actualización a PHP 8.1 desde Rocky Linux 8.8 ya que PHP 8.1 .

Actualizar a PHP 8.1 desde el repositorio REMI

Ya en otra ocasión tuve que instalar en el servidor varias versiones de PHP debido a que tengo versiones antiguas de Joomla que sólo funcionan con PHP 7.4, e incluso algún paquete que sólo funciona con PHP 5.6

Lo primero que debemos hacer es instalar el repositorio REMI en nuestro servidor. Antes de instalar el repositorio REMI, primero debemos activar el popular repositorio Extra Packages for Enterprise Linux (EPEL) en nuestro servidor Rocky Linux 8.

Para hacerlo, use el siguiente comando:

# dnf install epel-release

Después de activar EPEL Repo, ejecuta Actualización del sistema:

# dnf update

Para instalar el repositorio REMI en Rocky Linux 8, escribe el siguiente comando en tu terminal:

# dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

Acepta el mensaje de instalación para continuar escribiendo Y. (Debido a que en mi servidor ya tengo instalado el repositorio el sistema me devuelve lo siguiente):

Last metadata expiration check: 2:12:21 ago on Sun 03 Sep 2023 08:37:56 AM CEST.
remi-release-8.rpm 67 kB/s | 32 kB 00:00
Package remi-release-8.8-1.el8.remi.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!

Ahora, verifica los repositorios habilitados con el siguiente comando:

# yum repolist

En mi caso son estos:

repo id repo name
Webmin Repositorio de Webmin para Rocky Linux 8
appstream Rocky Linux 8 - AppStream
baseos Rocky Linux 8 - BaseOS
epel Extra Packages for Enterprise Linux 8 - x86_64
extras Rocky Linux 8 - Extras
powertools Rocky Linux 8 - PowerTools
remi-modular Remi's Modular repository for Enterprise Linux 8 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 8 - x86_64
virtualmin RHEL/CentOS 8 - x86_64 - Virtualmin
virtualmin-universal Virtualmin Distribution Neutral Packages

El repositorio REMI se utiliza de las siguientes maneras en Rocky Linux 8:

1. Listar los paquetes disponibles en el repositorio REMI

Para enumerar los paquetes disponibles en el repositorio REMI, usamos el siguiente comando:

# dnf --disablerepo="*" --enablerepo="remi" list available

También puedes utilizar el siguiente comando para enumerar los paquetes disponibles en el repositorio REMI-safe:

# dnf --disablerepo="*" --enablerepo="remi-safe" list available

2. Instalación de paquetes desde repositorios Remi/Remi-safe

Ejemplo: instalación de módulos PHP

Debes habilitar los paquetes del repositorio REMI para poder utilizarlos. Veamos una lista de módulos que proporcionan php usando el siguiente comando.

# dnf module list php

Se produce la siguiente información en mi sistema:

Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
php 8.0 common [d], devel, minimal PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 [e] common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

En el resultado anterior, hemos visto los módulos php proporcionados por el repositorio REMI. Ahora, podemos instalar lo siguiente.

Aquí elegimos instalar PHP 8.1 para nuestro ejemplo (Para RHEL, Alma, Rocky o CentOS, lee las instrucciones del Asistente de configuración eligiendo cuál va a ser tu configuración):

REMI wizard

También hemos utilizado esta guía del blog de Remi's RPM repository. Siguiendo las instrucciones ejecutamos el siguiente comando:

# dnf install php81

Con esta salida:

Last metadata expiration check: 2:40:31 ago on Wed 30 Aug 2023 02:52:56 PM CEST.
Dependencies resolved.
======================================================
Package Architecture Version Repository Size
======================================================
Installing:
php81 x86_64 8.1-4.el8.remi remi-safe 7.7 k
Installing dependencies:
php81-php-cli x86_64 8.1.22-1.el8.remi remi-safe 3.6 M
php81-php-common x86_64 8.1.22-1.el8.remi remi-safe 742 k
php81-runtime x86_64 8.1-4.el8.remi remi-safe 1.1 M
Installing weak dependencies:
php81-php-fpm x86_64 8.1.22-1.el8.remi remi-safe 1.9 M
php81-php-mbstring x86_64 8.1.22-1.el8.remi remi-safe 498 k
php81-php-opcache x86_64 8.1.22-1.el8.remi remi-safe 430 k
php81-php-pdo x86_64 8.1.22-1.el8.remi remi-safe 145 k
php81-php-sodium x86_64 8.1.22-1.el8.remi remi-safe 98 k
php81-php-xml x86_64 8.1.22-1.el8.remi remi-safe 201 k

Transaction Summary
========================================================
Install 10 Packages

Si estás conforme presiona Y para instalar los paquetes.

Dado que Joomla y otros sitios web necesitan paquetes adicionales para funcionar que agregan soporte para varias bibliotecas o protocolos de PHP, en mi caso deben instalarse los siguientes:

# dnf install php81-php-bcmath php81-php-gd php81-php-imap php81-php-intl php81-php-mysqlnd php81-php-pear

php81-php-pecl-apcu php81-php-pecl-geoip php81-php-pecl-igbinary php81-php-pecl-imagick php81-php-pecl-mcrypt

php81-php-pecl-memcached php81-php-pecl-msgpack php81-php-pecl-xmlrpc php81-php-pecl-zip php81-php-process php81-php-soap

php81-php--xmlrpc php81-php-zstd

Salida:

Installed:
php81-php-bcmath-8.1.23-1.el8.remi.x86_64 php81-php-gd-8.1.23-1.el8.remi.x86_64
php81-php-intl-8.1.23-1.el8.remi.x86_64 php81-php-mysqlnd-8.1.23-1.el8.remi.x86_64
php81-php-pear-1:1.10.13-1.el8.remi.noarch php81-php-pecl-apcu-5.1.22-1.el8.remi.x86_64
php81-php-pecl-geoip-1.1.1-16.el8.remi.x86_64 php81-php-pecl-igbinary-3.2.14-1.el8.remi.x86_64
php81-php-pecl-imagick-im6-3.7.0-7.el8.remi.x86_64 php81-php-pecl-mcrypt-1.0.6-1.el8.remi.x86_64
php81-php-pecl-memcached-3.2.0-1.el8.remi.x86_64 php81-php-pecl-msgpack-2.2.0-1.el8.remi.x86_64
php81-php-pecl-xmlrpc-1.0.0~rc3-1.el8.remi.x86_64 php81-php-pecl-zip-1.22.2-1.el8.remi.x86_64
php81-php-process-8.1.23-1.el8.remi.x86_64

También debemos ajustar los valores de la configuración de php-fpm en este archivo que se habrá creado nuevo: /etc/opt/remi/php81/php-fpm.d/16336842161372340.conf y dejar una cosa parecida a esta:

[Apañados]
user = xnapaado
group = xnapaado
listen.owner = xnapaado
listen.group = xnapaado
listen.mode = 0660
listen = 127.0.0.1:8004
pm = ondemand
pm.max_children = 50
pm.start_servers = 4
pm.min_spare_servers = 3
pm.max_spare_servers = 15
pm.max_requests = 500
php_value[upload_tmp_dir] = /home/xnapaado/tmp
php_value[session.save_path] = /home/xnapaado/tmp

y reiniciar el servicio

# systemctl restart php81-php-fpm.service

Del mismo modo debemos ajustar las variables de php en el archivo /etc/opt/remi/php81/php.ini

Ya que Joomla nos puede dar algún error como este:

"Small PHP maximum POST size.
This is the maximum amount of data that can be sent via POST to the server. This includes form submissions for articles, media (images, videos) and extensions. This value is less than 16MB which may impact on uploading large extensions. This is set in the php.ini under post_max_size."

Una vez corregido reiniciaremos de nuevo el servicio PHP-FPM y Apache

# systemctl restart php81-php-fpm.service
# systemctl restart httpd.service

Configurar servidor virtual (página web o dominio) para utilizar otra versión de PHP

Como he dicho al principio, como en mi caso tengo instaladas varias versiones de PHP, utilizaremos la utilidad Virtualmin para cambiar en el servidor virtual la versión que acabamos de instalar.

Para ello entrar a Virtualmin en tu sistema, y verificar que Virtualmin ve varias versiones de PHP instaladas seleccionando System Settings → Re-Check Configuration.

Virtualmin Re-Check Configuration

Una de las líneas debe ser similar a lo siguiente:

• The following PHP-FPM versions are available : 8.0.30 (php-fpm) 5.6.40 (php56-php-fpm) 7.4.33 (php74-php-fpm) 8.1.23 (php81-php-fpm)

Para cambiar un servidor virtual existente para que utilice otra versión de PHP, selecciona el servidor virtual de la lista desplegable y, a continuación, ve a Server Configuration → PHP Versions.

Indica la versión PHP por defecto que se utilizará para el servidor virtual mediante la selección de la versión deseada como el valor de defecto en el directorio HTML de la lista desplegable.

Virtualmin PHP Options

Si es necesario, introduce el sub-directorio del sitio web y especifica una versión diferente de PHP que se utilizará para ese directorio específico. Aquí se debe introducir sólo en nombre del subdirectorio o carpeta, sin la ruta de la raíz de sitio web. Por ejemplo sub-directorio (en la imagen de abajo hablame-del-mar y no /public_html/hablame-del-mar/).

Virtualmin PHP Options en subdirectorio

Al salvar las versiones nos debe dar todo correcto:

Virtualmin PHP Options OK

Con esto tendrás actualizada tu versión a PHP 8.1.23 en un sistema con Rocky Linux.

Sería conveniente que echases un vistazo a los registros de errores de Apache en cada servidor virtual ya que podría haber algún plugin, módulo o plantilla de Joomla que no esté preparado para PHP 8.1, tendrás que ponerte en contacto con el desarrollador para que corrija estos fallos.

Jesus_Caceres