Cómo actualizar de CentOS7 a CentOS8 Stream

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 … ).

 

 

La noticia sobre el fin acelerado de Centos8 se puede ver en el email del anuncio publicado en centos.org.

 

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

 

Lo primero nos aseguramos de tener instalados los repositorios epel en CentOS:

yum install epel-release -y

 

instalar-repositorio-epel-release.jpg
 

 

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

 

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)