Después de la sorprendente y abrupta noticia de que Centos 8 desaparece dentro de poco (CentOS8 EOL en Enero de 2021), y CentOS7 en 2024, puede ser necesario actualizar CentOS 7 y CentOS8 a Centos 8 Stream (o no … ).
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:
¿Qué ha ocurrido con CentOS?
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.
Consecuencias para los usuarios de CentOS y alternativas
- Centos8:
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.
- CentOS7:
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:
- Instalar el repositorio EPEL
- Instalar las herramientas yum-utils
- Instalamos el gestor de paquetes DNF
- Actualizar CentOS7 a CentOS8, y troubleshooting al actualizar a CentOS8
- Eliminar el viejo kernel para CentOS7 /instalar el nuevo kernel para CentOS 8
- Comenzando la actualización a Centos8
- Instalar el nuevo kernel para CentOS 8
- Kernel de Centos8 instalado
- Instalamos el paquete minimal de CentOS8 y actualizamos grupos
- Comprobar que Centos8 y su kernel están instalados correctamente
Instalar el repositorio EPEL
Lo primero nos aseguramos de tener instalados los repositorios epel en CentOS:
yum install epel-release -y |
Instalar las herramientas yum-utils
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 |
Instalamos el gestor de paquetes DNF
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 |
Actualizar la versión, subir de CentOS7 a CentOS8, y resolver problemas con paquetes al actualizar a CentOS8
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 |
Eliminamos el viejo kernel para CentOS7 e instalamos el nuevo kernel para CentOS 8
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 |
Troubleshooting para eliminar el kernel de centos7
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).
- Otra opción es intentar eliminar el kernel viejo así:
dnf remove --oldinstallonly --setopt installonly_limit=1 kernel
- o simplemente así:
dnf remove kernel
Comenzando la actualización a Centos8
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 :
Troubleshooting 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 |
Instalamos el nuevo kernel para CentOS 8
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 |
Troubleshooting para instalar el kernel de CentOS8
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) ;
- Si en este punto tenemos problemas como estos:
[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) |
- Para intentar salvar esos errores, podemos hacer la instalación permitiendo eliminar paquetes para resolver dependencias (–allowerasing) y forzando a buscar solamente las últimas versiones de paquetes (–best, aunque esta opción hará que dnf muestre fallo cuando la última versión no pueda ser instalada), tenemos estas opciones:
dnf -y install kernel-core --allowerasing |
dnf -y install kernel-core --best --allowerasing |
- y por último intentamos instalar el kernel con las opciones –best –allowerasing y –skip-broken (resuelve problemas de dependencias eliminando los paquetes problemáticos)
dnf -y install kernel-core --best --allowerasing --skip-broken |
- si no podemos instalar el kernel porque seguimos recibiendo el error:
Problema: The operation would result in removing the following protected packages: kernel |
instalamos el kernel de centos8 de forma manual:
Kernel de Centos8 instalado
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! |
Instalamos el paquete minimal de CentOS8 y actualizamos grupos
dnf -y groupupdate "Core" "Minimal Install" |
Troubleshooting
–> 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á.
Comprobar que Centos8 y su kernel están instalados correctamente
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 |
Migrar de CentOS8 a CentOS Stream
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 |
CONCLUSIÓN y otros enlaces
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)