Configurar el repositorio

Disponible: 38 paquetes publicados.

PHP 7.4 está sin soporte upstream desde el 28 nov 2022: este repositorio añade la corrección de php2shell, pero no cubre otras vulnerabilidades. Migra a una versión de PHP soportada.

Fichero de origen de APT

# php-repos.clouding.io: PHP 7.4 - Ubuntu 18.04 LTS (Bionic)
deb [signed-by=/usr/share/keyrings/php-repos.clouding.io.gpg] https://php-repos.clouding.io/ubuntu bionic php7.4 deps

Script de actualización (copiar y pegar como root)

#!/bin/sh
# php-repos.clouding.io - Actualizar los paquetes de PHP 7.4 instalados en Ubuntu 18.04 LTS (Bionic)
set -e
export LC_ALL=C DEBIAN_FRONTEND=noninteractive
[ "$(id -u)" = 0 ] || { echo 'Ejecuta este script como root.'; exit 1; }
CODENAME=$( (. /etc/os-release 2>/dev/null; echo "${VERSION_CODENAME:-}") )
[ -n "$CODENAME" ] || CODENAME=$(lsb_release -sc 2>/dev/null || true)
[ -n "$CODENAME" ] || CODENAME=$(sed -n "s/^DISTRIB_CODENAME=//p" /etc/lsb-release 2>/dev/null || true)
[ "$CODENAME" = 'bionic' ] || { echo 'Este sistema no es Ubuntu 18.04 LTS (Bionic): se cancela.'; exit 1; }

# 1. php-repos.clouding.io.gpg + php-repos.clouding.io.list
mkdir -p /usr/share/keyrings
if command -v curl >/dev/null 2>&1; then curl -fsSL https://php-repos.clouding.io/php-repos.clouding.io.gpg -o /usr/share/keyrings/php-repos.clouding.io.gpg.new
else wget -q -O /usr/share/keyrings/php-repos.clouding.io.gpg.new https://php-repos.clouding.io/php-repos.clouding.io.gpg; fi
mv /usr/share/keyrings/php-repos.clouding.io.gpg.new /usr/share/keyrings/php-repos.clouding.io.gpg && chmod 644 /usr/share/keyrings/php-repos.clouding.io.gpg
cat > /etc/apt/sources.list.d/php-repos.clouding.io.list <<'PHPREPOS_EOF'
# php-repos.clouding.io: PHP 7.4 - Ubuntu 18.04 LTS (Bionic)
deb [signed-by=/usr/share/keyrings/php-repos.clouding.io.gpg] https://php-repos.clouding.io/ubuntu bionic php7.4 deps
PHPREPOS_EOF
apt-get update

# 2. Actualizaciones previstas (only already installed packages)
PKGS=$(dpkg-query -W -f='${db:Status-Abbrev} ${Package}\n' 'php7.4' 'php7.4-*' 'libapache2-mod-php7.4' 'libphp7.4-embed' 'php-common' 2>/dev/null | awk '$1 ~ /^ii/ {print $2}' | sort -u)
[ -n "$PKGS" ] || { echo 'No hay paquetes de PHP 7.4 instalados: no hay nada que actualizar.'; exit 0; }
SIM=$(apt-get -s -o Dpkg::Options::=--force-confold install --only-upgrade --no-remove --no-install-recommends $PKGS 2>&1) || { echo "$SIM"; echo 'apt no puede actualizar estos paquetes sin eliminar nada o sin conflictos: se cancela, no se ha cambiado nada.'; exit 1; }
if echo "$SIM" | grep -qE "^(Remv|Purg) "; then echo "$SIM" | grep -E "^(Remv|Purg) "; echo 'apt eliminaría paquetes: se cancela, no se ha cambiado nada.'; exit 1; fi
DOWN=0
echo "$SIM" | sed -n "s/^Inst \([^ ]*\) \[\([^]]*\)\] (\([^ ]*\) .*/\1 \2 \3/p" > /tmp/php-repos-plan.$$
while read -r PKG OLD NEW; do if dpkg --compare-versions "$NEW" lt "$OLD"; then echo "DOWNGRADE $PKG $OLD -> $NEW"; DOWN=1; fi; done < /tmp/php-repos-plan.$$
[ "$DOWN" = 0 ] || { rm -f /tmp/php-repos-plan.$$; echo 'apt bajaría de versión paquetes: se cancela, no se ha cambiado nada.'; exit 1; }
if [ ! -s /tmp/php-repos-plan.$$ ]; then rm -f /tmp/php-repos-plan.$$; echo 'Todo está ya actualizado.'; exit 0; fi
echo 'Actualizaciones previstas:'; cat /tmp/php-repos-plan.$$; rm -f /tmp/php-repos-plan.$$

# 3. upgrade
apt-get -y -o Dpkg::Options::=--force-confold install --only-upgrade --no-remove --no-install-recommends $PKGS
if dpkg-query -W -f='${db:Status-Abbrev}\n' libapache2-mod-php7.4 2>/dev/null | grep -q "^ii" && command -v apache2ctl >/dev/null 2>&1; then
  echo 'Recargando Apache para cargar el nuevo módulo de PHP'; apache2ctl -t && (systemctl reload apache2 2>/dev/null || service apache2 reload)
fi
echo 'Hecho.'

El script solo actualiza los paquetes de PHP que ya están instalados. Nunca instala paquetes de PHP nuevos, nunca elimina paquetes y nunca hace downgrade: primero simula la actualización y se detiene si apt fuera a eliminar o bajar de versión algo. Se conservan los ficheros de configuración existentes.