Y en el blog de CentOS la noticia del día 8 de diciembre deja bien claro el tiempo de vida de CentOS 7 y 8:
En resumen, Centos era una distribución muy estable, un banco de pruebas para RedHat, pero seria, estable, con mucho desarrollo, actualizaciones y soporte; pero parece ser que por influencias de IBM, se ha tomado la decisión de “matar” a CentOS.
Concretamente se ha acelerado el fin del ciclo de vida de la última versión de CentOS, o sea CentOS8, que termina inesperadamente en 2021.
CentOS 7 terminará su ciclo de vida en 2024. Tiene algo más de tiempo, pero ya tiene fecha de caducidad establecida, así que … mal 🙁
La única alternativa que se ofrece es la de CentOS Stream, que será una rama de desarrollo de RedHat. O sea, que quizás para servidores en producción tampoco es una alternativa viable … pero es la única versión de CentOS que seguirá viva.
Es inviable mantener servidores en producción con CentOS 8, así que los servidores CentOS 8 están forzados a desaparecer. Y aunque no sean servidores en producción, tampoco tiene mucho sentido mantener CentOS 8 en ningún server, ya que dejará de tener soporte y actualizaciones.
En estos casos, será inevitable migrar de CentOS 8 a otra distribución, como por ejemplo Ubuntu o Debian LTS; también se plantea la posibilidad de migrar a Oracle Linux en los casos que proceda.
También se está desarrollando Rocky Linux, del ex fundador de CentOS. Veremos como funciona y si va ganando adeptos ..
La decisión más sencilla y rápida para mantener un sistema operativo funcional y con soporte, es la de actualizar a RedHat, pero esto requiere pagar por la licencia, y solo algunos lo harán.
Los que no estén dispuestos a pagar o no puedan afrontar el gasto (la mayoría), se verán forzados a buscar otras alternativas como las que hemos mencionado.
Lo mismo, pero el fin de vida termina en 2024, parece que aún queda tiempo para replantearse qué hacer.
Dicho todo esto, si quieres mantener tu CentOS, tendrás que atreverte a migrar a CentOS Stream como única alternativa viable (aunque repetimos que no parece ser una buena idea para servidores en producción ya que será un banco de pruebas de RedHat).
Así que vamos a ver cómo actualizar Centos7 a Centos8 Stream, realizando de forma intermedia una actualización a CentOS8 para después migrar a CentOS Stream. (Solo después de haber realizado la subida de versión de Centos7 a Centos8, podremos migrar a Centos8 Stream).
En este artículo:
Lo primero nos aseguramos de tener instalados los repositorios epel en CentOS:
yum install epel-release -y
Instalamos también las herramientas yum-utils
yum install yum-utils
Instalamos rpmconf
yum install rpmconf
Usamos rpmconf para verificar conflictos en ficheros de configuración; si queremos dejar los ficheros como están, usamos la tecla N o Enter
Si queremos instalar la nueva versión del fichero de config, usamos Y
rpmconf -a
Limpiamos los paquetes no necesarios:
package-cleanup --leaves
package-cleanup --orphans
Podemos instalar el gestor de paquetes dnf para sustituir a yum, ya que dnf es el gestor de paquetes por defecto en CentOS8:
yum install dnf
Los dos gestores de paquetes pueden convivir, pero es mejor que nos quedemos solo con dnf (y eliminamos yum, las dependencias y su directorio):
dnf -y remove yum yum-metadata-parser
rm -Rf /etc/yum
Ya tenemos el sistema preparado para pasar de Centos 7 a Centos 8, pero antes vamos a actualizar todo el sistema utilizando el nuevo gestor de paquetes dnf previamente instalado
dnf upgrade
Le costará un buen rato hasta que actualice todos los paquetes.
si tenemos errores del estilo: “el archivo *** entra en conflicto con el archivo del paquete ***“, por ejemplo:
el archivo /usr/lib/python3.6/site-packages/setuptools/command/__pycache__/test.cpython-36.pyc de la instalación de platform-python-setuptools-39.2.0-6.el8.noarch entra en conflicto con el archivo del paquete python3-setuptools-39.2.0-10.el7.noarch
el archivo /usr/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.opt-1.pyc de la instalación de platform-python-setuptools-39.2.0-6.el8.noarch entra en conflicto con el archivo del paquete python3-setuptools-39.2.0-10.el7.noarch
el archivo /usr/lib/python3.6/site-packages/setuptools/command/__pycache__/upload.cpython-36.pyc de la instalación de platform-python-setuptools-39.2.0-6.el8.noarch entra en conflicto con el archivo del paquete python3-setuptools-39.2.0-10.el7.noarch
podemos intentar la actualización con la opción –allowerasing, que sirve para reemplazar automáticamente los paquetes con conflictos:
dnf upgrade --best --allowerasing
o usando la opción –skip-broken para eliminar los paquetes problemáticos:
dnf upgrade --best --allowerasing --skip-broken
Si no queda más remedio, borramos los paquetes con problemas, como por ejemplo python, que suele fallar en algunas máquinas (después de haber hecho varias pruebas, en algunas máquinas lo mejor es eliminar los paquetes problemáticos):
dnf remove python3
y ahora ejecutamos de nuevo la actualización, permitiendo que se sobrescriban los paquetes con las nuevas versiones:
dnf upgrade --best --allowerasing
A continuación ya podemos instalar el paquete de lanzamiento de Centos8:
dnf install http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-linux-repos-8-2.el8.noarch.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-linux-release-8.3-1.2011.el8.noarch.rpm http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8-2.el8.noarch.rpm
Ahora actualizamos el repositorio EPEL:
dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Comprobamos las repos instaladas y que estén actualizadas con dnf repolist:
Eliminamos los ficheros temporales
dnf clean all
En este punto puede parecer que ya tenemos instalado Centos8, podemos comprobarlo revisando el fichero os-release y redhat-release, pero realmente aún quedan cosas importantes por hacer (todavía no tenemos un kernel adecuado para Centos8):
[root@sercentos7 operador]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
[root@sercentos7 operador]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
Si comprobamos el kernel instalado, veremos que todavía tenemos instalado el kernel de CentOS7:
[root@sercentos7 operador]# uname -a
Linux sercentos7.curso.esp 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@sercentos7 operador]# uname -r
3.10.0-957.12.2.el7.x86_64
Ahora vamos a eliminar el kernel de centos7;
Antes de eliminarlo, mostramos los kernel instalados para comprobarlo:
[root@sercentos7 operador]# rpm -qa kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-957.12.2.el7.x86_64
kernel-3.10.0-1160.6.1.el7.x86_64
También mostramos el kernel que se está utilizando con:
uname -a
uname -r
y ahora eliminamos el núcleo antiguo del kernel de CentOS 7 (si en este paso tenemos errores, realmente seguirá instalado el kernel de centos 7 y no habremos instalado el kernel de centos 8):
rpm -e `rpm -q kernel`
Eliminamos paquetes conflictivos (como las herramientas systemv):
rpm -e --nodeps sysvinit-tools
Si recibimos errores al ejecutar el comando anterior para eliminar el kernel :
rpm -e `rpm -q kernel`
comprobamos si seguimos teniendo errores y conflictos en paquetes; si es así, procuraremos eliminarlos para evitar los problemas (aunque en algunos casos esto es una solución muy arriesgada, sobre todo en servidores en producción).
dnf remove --oldinstallonly --setopt installonly_limit=1 kernel
dnf remove kernel
Lanzamos actualización del sistema a Centos8:
dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
Vemos que se han instalado los paquetes para actualizar a Centos8 :
Si tenemos errores, lo más seguro que se referirán a paquetes problemáticos, como nos pasaba con python3, y deberíamos eliminarlos para poder actualizar sin problemas;
si tenemos errores, también podemos probar a lanzar la actualización así:
dnf -y --releasever=8 --allowerasing --skip-broken --setopt=deltarpm=false distro-sync
Ejecutamos instalación del kernel
dnf -y install kernel-core
Aunque puede no ser necesario, si queremos estar seguros de que está instalado de forma correcta, primero lo desinstalamos y lo volvemos a instalar
rpm -e kernel-core
dnf -y install kernel-core
Si al instalar el kernel obtenemos errores, seguramente tendrán que ver con el problema que comentábamos antes con ciertos paquetes (por mucho que duela, parece ser la mejor opción, sino iremos arrastrando los errores todo el rato) ;
[root@sercentos7 operador]# dnf -y install kernel-core
Última comprobación de caducidad de metadatos hecha hace 0:04:17, el sáb 19 dic 2020 00:20:08 CET.
Error:
Problema: package kexec-tools-2.0.20-34.el8.x86_64 requires dracut >= 049-24, but none of the providers can be installed
- package dracut-049-95.git20200804.el8.x86_64 requires systemd-udev >= 219, but none of the providers can be installed
- package system-config-kdump-2.0.13-21.el7.centos.noarch requires kexec-tools, but none of the providers can be installed
- package systemd-udev-239-41.el8_3.x86_64 obsoletes systemd < 229-5 provided by systemd-219-78.el7_9.2.x86_64
- package kernel-core-4.18.0-240.1.1.el8_3.x86_64 conflicts with kexec-tools < 2.0.20-8 provided by kexec-tools-2.0.15-51.el7_9.1.x86_64
- package systemd-python-219-78.el7_9.2.x86_64 requires systemd = 219-78.el7_9.2, but none of the providers can be installed
- conflicting requests
- problem with installed package systemd-python-219-78.el7_9.2.x86_64
- problem with installed package system-config-kdump-2.0.13-21.el7.centos.noarch
(pruebe a añadir '--allowerasing' a la línea de comandos para reemplazar los paquetes que producen conflictos o '--skip-broken' para descartar los paquetes que no se pueden instalar)
dnf -y install kernel-core --allowerasing
dnf -y install kernel-core --best --allowerasing
dnf -y install kernel-core --best --allowerasing --skip-broken
Problema: The operation would result in removing the following protected packages: kernel
instalamos el kernel de centos8 de forma manual:
Finalmente hemos sido capaces de eliminar el kernel antiguo perteneciente a Centos7 e instalar el nuevo kernel para centos8.
Vemos que el kernel de centos8 se ha instalado correctamente:
Instalando:
kernel-core x86_64 4.18.0-240.1.1.el8_3 baseos 30 M
Resumen de la transacción
=====================================================================================
Instalar 1 Paquete
Tamaño total de la descarga: 30 M
Tamaño instalado: 62 M
Descargando paquetes:
kernel-core-4.18.0-240.1.1.el8_3.x86_64.rpm 3.2 MB/s | 30 MB 00:09
-------------------------------------------------------------------------------------
Total 3.2 MB/s | 30 MB 00:09
Ejecutando verificación de operación
Verificación de operación exitosa.
Ejecutando prueba de operaciones
Prueba de operación exitosa.
Ejecutando operación
Preparando : 1/1
Instalando : kernel-core-4.18.0-240.1.1.el8_3.x86_64 1/1
Ejecutando scriptlet: kernel-core-4.18.0-240.1.1.el8_3.x86_64 1/1
Verificando : kernel-core-4.18.0-240.1.1.el8_3.x86_64 1/1
Instalado:
kernel-core-4.18.0-240.1.1.el8_3.x86_64
¡Listo!
dnf -y groupupdate "Core" "Minimal Install"
–> De nuevo, si tenemos problemas con paquetes, los desinstalamos o lanzamos la instalación así:
dnf -y groupupdate "Core" "Minimal Install" --allowerasing --skip-broken
—>Por cierto, si en este punto recibes este error, es porque no has eliminado yum todavía del sistema, y entra en conflicto con el gestor de paquetes dnf:
Fallido:
yum-4.2.23-4.el8.noarch
Error: Falló la transacción
Ya sabes, elimina yum (míra cómo hacerlo) y este error desaparecerá.
Ya podemos comprobar la versión del sistema que se encuentra instalada:
cat /etc/os-release
cat /etc/redhat-release
reiniciamos el sistema y comprobamos que carga el kernel de centos8 en la secuencia de inicio del sistema operativo:
Y dentro del sistema operativo chequeamos manualmente que el kernel está instalado:
[root@localhost ~]# uname -a
Linux localhost.localdomain 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# uname -r
4.18.0-240.1.1.el8_3.x86_64
Estos son los pasos necesarios que comentan desde el sitio oficial de CentOS para convertir CentOS a CentOS Stream
En resumen los 3 pasos necesarios para migrar CentOS8 a CentOS Stream son:
$ sudo dnf install centos-release-stream
$ sudo dnf swap centos-{linux,stream}-repos
$ sudo dnf distro-sync
Instalamos centos release stream:
[root@sercentos7 operador]# sudo dnf install centos-release-stream
Última comprobación de caducidad de metadatos hecha hace 0:00:51, el sáb 19 dic 2020 01:42:37 CET.
Dependencias resueltas.
===========================================================================================================
Paquete Arquitectura Versión Repositorio Tamaño
===========================================================================================================
Installing:
centos-release-stream x86_64 8.1-1.1911.0.7.el8 extras 11 k
Resumen de la transacción
===========================================================================================================
Instalar 1 Paquete
Tamaño total de la descarga: 11 k
Tamaño instalado: 6.6 k
[root@sercentos7 operador]# sudo dnf swap centos-{linux,stream}-repos
CentOS-Stream - Base 1.9 MB/s | 2.4 MB 00:01
CentOS-Stream - Extras 54 kB/s | 7.0 kB 00:00
CentOS-Stream - AppStream 2.9 MB/s | 6.3 MB 00:02
Dependencias resueltas.
===========================================================================================================
Paquete Arquitectura Versión Repositorio Tamaño
===========================================================================================================
Installing:
centos-stream-release noarch 8.4-1.el8 Stream-BaseOS 21 k
se sustituye centos-linux-release.noarch 8.3-1.2011.el8
se sustituye centos-release-stream.x86_64 8.1-1.1911.0.7.el8 centos-stream-repos noarch 8-2.el8 Stream-BaseOS 19 k
Eliminando: centos-linux-repos noarch 8-2.el8 @@commandline 26 k
Resumen de la transacción
===========================================================================================================
Instalar 2 Paquetes Eliminar 1 Paquete Tamaño total de la descarga: 40 k
¿Está de acuerdo [s/N]?: s
Descargando paquetes:
(1/2): centos-stream-repos-8-2.el8.noarch.rpm 150 kB/s | 19 kB 00:00
(2/2): centos-stream-release-8.4-1.el8.noarch.rpm 170 kB/s | 21 kB 00:00
-----------------------------------------------------------------------------------------------------------
Total 11 kB/s | 40 kB 00:03
Ejecutando verificación de operación Verificación de operación exitosa.
Ejecutando prueba de operaciones
Prueba de operación exitosa.
Ejecutando operación
Preparando : 1/1 Installing : centos-stream-repos-8-2.el8.noarch
1/5 Installing : centos-stream-release-8.4-1.el8.noarch
2/5 Reemplazando : centos-release-stream-8.1-1.1911.0.7.el8.x86_64
3/5 Eliminando : centos-linux-repos-8-2.el8.noarch
4/5 Reemplazando : centos-linux-release-8.3-1.2011.el8.noarch
5/5 Verificando : centos-stream-release-8.4-1.el8.noarch
1/5 Verificando : centos-linux-release-8.3-1.2011.el8.noarch
2/5 Verificando : centos-release-stream-8.1-1.1911.0.7.el8.x86_64
3/5 Verificando : centos-stream-repos-8-2.el8.noarch
4/5 Verificando : centos-linux-repos-8-2.el8.noarch
5/5 Instalado: centos-stream-release-8.4-1.el8.noarch centos-stream-repos-8-2.el8.noarch
Eliminado: centos-linux-repos-8-2.el8.noarch ¡Listo!
sudo dnf distro-sync
Si hay errores:
sudo dnf distro-sync --allowerasing
[root@localhost ~]# sudo dnf distro-sync
CentOS Stream 8 - AppStream 816 kB/s | 6.3 MB 00:07
CentOS Stream 8 - BaseOS 1.1 MB/s | 2.4 MB 00:02
CentOS Stream 8 - Extras 11 kB/s | 7.0 kB 00:00
Dependencias resueltas.
================================================================================
Paquete Arq. Versión Repo Tam.
================================================================================
Instalando:
kernel-core x86_64 4.18.0-257.el8 baseos 31 M
Actualizando:
NetworkManager x86_64 1:1.30.0-0.3.el8 baseos 2.5 M
NetworkManager-libnm x86_64 1:1.30.0-0.3.el8 baseos 1.8 M
NetworkManager-team x86_64 1:1.30.0-0.3.el8 baseos 142 k
NetworkManager-tui x86_64 1:1.30.0-0.3.el8 baseos 323 k
alsa-lib x86_64 1.2.4-3.el8 appstream 471 k
authselect x86_64 1.2.2-1.el8 baseos 128 k
authselect-compat x86_64 1.2.2-1.el8 appstream 37 k
authselect-libs x86_64 1.2.2-1.el8 baseos 214 k
bind-export-libs x86_64 32:9.11.20-6.el8 baseos 1.1 M
Ya ha quedado claro qué es lo que ocurre con CentOS y su fin de vida. Aún así, para los que quieran migrar a CentOS Stream, hemos visto cómo actualizar desde CentOS7, que es la versión más estable y utilizada para servidores en producción.
Por otra parte, para los que quieran realizar todo el proceso de forma automática, en Gitlab existe un script de bash bastante interesante para automatizar todo el proceso de migrar a CentOS Stream (probablemente la actualización petará en algún punto y será necesaria la intervención manual, pero es interesante verlo porque tenemos un resumen bastante bueno de los pasos y comandos necesarios para migrar a Centos Stream)