Actualización De Centos7 A Centos8

Vamos a realizar la actualización de la instancia Quijote, que creamos en este post la cuál posee un sistema CentOS 7. Mostraré como actualizar a CentOS 8, garantizando que todos los servicios previos continúen funcionando.

Para comprobar la versión de CentOS que tenemos instalada en este momento:

[root@quijote ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

Lo primero que tenemos que realizar si queremos subir de CentOS 7 a CentOS 8, sería instalar el repositorio EPEL (Extra Packages Enterprise Linux). Recordemos que el gestor de paquetes predeterminado es CentOS 7 es yum.

yum install epel-release -y

Debemos tener instaladas las herramientas para el gestor de paquetes yum y la herramienta rpmconf, para resolver los posibles conflictos en las configuraciones de paquetes rpm. Para instalar ambos paquetes:

yum install yum-utils rpmconf -y

Ejecutamos el siguiente comando, para comprobar si existen conflictos como acabamos de comentar.

rpmconf -a

Cuando hemos verificado que no hay ningún problema, vamos a eliminar los paquetes huérfanos y que nos resultan innecesarios:

package-cleanup --orphans

package-cleanup --leaves

En CentOS 8, el gestor de paquetes predeterminado no es yum, sino que se utiliza dnf, por tanto vamos a instalarlo, aunque realmente podemos seguir utilizando yum sin problemas, o conviviendo con los dos:

yum install dnf -y

Como ya hemos instalado y tenemos disponible el nuevo gestor de paquetes, podemos prescindir de yum. En mi caso ya no me interesa, por eso me deshago de él, pero si lo queremos conservar podemos saltarnos este paso.

dnf remove yum yum-metadata-parser -y

rm -rf /etc/yum

Vamos a llevar a cabo una actualización de todos los paquetes del sistema:

dnf upgrade -y

Ha llegado el momento de iniciar la actualización y de instalar los paquetes necesarios para CentOS 8 que encontramos en los repositorios oficiales. Los instalamos:

dnf install \http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-repos-8.2-2.2004.0.2.el8.x86_64.rpm \http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-release-8.2-2.2004.0.2.el8.x86_64.rpm \http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/centos-gpg-keys-8.2-2.2004.0.2.el8.noarch.rpm

Toca actualizar de nuevo el repositorio EPEL:

dnf upgrade epel-release -y

Eliminamos los archivos temporales innecesarios.

dnf clean all

Ahora es el paso de eliminar el kérnel de CentOS 7, que lógicamente no vamos a utilizar más ya que luego vamos a instalar el nuevo kérnel:

rpm -e `rpm -q kernel`

Se nos van a presentar varios conflictos, para resolverlos también nos deshacemos de este paquete:

rpm -e --nodeps sysvinit-tools

Y por fin, empezamos la actualización a CentOS 8:

dnf --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

Puede que varios paquetes relacionados con Python, nos produzcan conflictos, así que para resolverlo, desinstalamos el paquete con este comando:

dnf remove python36-rpmconf-1.0.22-1.el7.noarch

Ejecutamos de nuevo el comando para iniciar la actualización y ahora sí debe terminar de manera correcta:

dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync

Una vez finalizada exitosamente la actualización, para terminar, nos quedaría instalar el kérnel del nuevo CentOS 8:

dnf install kernel-core -y

Y por último, vamos a instalar los paquetes mínimos del sistema:

dnf groupupdate "Core" "Minimal Install" -y

Reiniciamos el sistema:

reboot

Al intentar conectarme de nuevo a la máquina mediante SSH no me dejaba, y dirigiéndome a la consola de OpenStack, porque recordemos que Quijote es una instancia de mi proyecto, pude comprobar como el fichero de configuración que establecía la IP de la interfaz eth0 estática, se había reiniciado. Volví a configurar el fichero /etc/sysconfig/network-scripts/ifcfg-eth0:

BOOTPROTO=static
DEVICE=eth0
HWADDR=fa:16:3e:5c:3d:c5
MTU=8950
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPADDR=10.0.1.13
NETMASK=255.255.255.0
GATEWAY=10.0.1.3
DNS1=10.0.1.3
DNS2=8.8.8.8

Reinicié el servicio:

systemctl restart network.service

Y probé a acceder de nuevo, ahora lógicamente sí accedí mediante SSH a través de Dulcinea.

Reinicié la máquina y comprobé como volvía a perder la configuración como yo suponía que iba a pasar. Configuré de nuevo el fichero /etc/sysconfig/network-scripts/ifcfg-eth0 y procedí a crear el siguiente fichero para evitar que los cambios se perdieran en cada inicio del sistema:

touch /etc/cloud/cloud-init.disabled

Con esto solucioné mi principal problema.

Ahora, si miramos de nuevo la versión de CentOS y la versión de kérnel que estamos utilizando:

[root@quijote ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

[root@quijote ~]# uname -r
4.18.0-193.28.1.el8_2.x86_64

Vemos como hemos actualizado nuestro sistema y nuestro kérnel y ahora está corriendo CentOS 8.

Para finalizar, vamos a probar a hacer un ping a Dulcinea, Sancho y www.google.es, para asegurarnos que funciona correctamente la resolución estática y tiene conexión a internet, además de hacer uso de la resolución de nombres:

[root@quijote ~]# ping dulcinea
PING dulcinea.javierpzh.gonzalonazareno.org (10.0.1.3) 56(84) bytes of data.
64 bytes from dulcinea.javierpzh.gonzalonazareno.org (10.0.1.3): icmp_seq=1 ttl=64 time=0.712 ms
64 bytes from dulcinea.javierpzh.gonzalonazareno.org (10.0.1.3): icmp_seq=2 ttl=64 time=0.693 ms
64 bytes from dulcinea.javierpzh.gonzalonazareno.org (10.0.1.3): icmp_seq=3 ttl=64 time=0.685 ms
^C
--- dulcinea.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 37ms
rtt min/avg/max/mdev = 0.685/0.696/0.712/0.032 ms

[root@quijote ~]# ping sancho
PING sancho.javierpzh.gonzalonazareno.org (10.0.1.8) 56(84) bytes of data.
64 bytes from sancho.javierpzh.gonzalonazareno.org (10.0.1.8): icmp_seq=1 ttl=64 time=2.13 ms
64 bytes from sancho.javierpzh.gonzalonazareno.org (10.0.1.8): icmp_seq=2 ttl=64 time=1.20 ms
64 bytes from sancho.javierpzh.gonzalonazareno.org (10.0.1.8): icmp_seq=3 ttl=64 time=0.743 ms
^C
--- sancho.javierpzh.gonzalonazareno.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 0.743/1.357/2.132/0.578 ms

[root@quijote ~]# ping www.google.es
PING www.google.es (172.217.17.3) 56(84) bytes of data.
64 bytes from mad07s09-in-f3.1e100.net (172.217.17.3): icmp_seq=1 ttl=112 time=43.7 ms
64 bytes from mad07s09-in-f3.1e100.net (172.217.17.3): icmp_seq=2 ttl=112 time=64.5 ms
64 bytes from mad07s09-in-f3.1e100.net (172.217.17.3): icmp_seq=3 ttl=112 time=44.0 ms
^C
--- www.google.es ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 43.773/50.790/64.546/9.727 ms

Efectivamente, obtenemos la respuesta esperada. Antes de terminar, quise comprobar si el reloj se encontraba sincronizado, ya que esto también lo configuré en CentOS 7:

[root@quijote ~]# timedatectl
               Local time: Wed 2020-11-25 19:05:32 UTC
           Universal time: Wed 2020-11-25 19:05:32 UTC
                 RTC time: Wed 2020-11-25 19:05:31
                Time zone: UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Vemos como nos muestra que el reloj se encuentra sincronizado, pero si nos fijamos la zona horaria que está utilizando no es la que yo quisiera, ya que me interesa que se sincronice con la zona Europe/Madrid (CET, +0100). Para realizar este cambio vamos a utilizar el siguiente comando:

[root@quijote ~]# timedatectl set-timezone Europe/Madrid

Si miramos de nuevo el reloj:

[root@quijote ~]# timedatectl status
               Local time: Wed 2020-11-25 20:08:49 CET
           Universal time: Wed 2020-11-25 19:08:49 UTC
                 RTC time: Wed 2020-11-25 19:08:48
                Time zone: Europe/Madrid (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Ahora sí, vamos que la respuesta es la correcta, así que hemos terminado la actualización a CentOS 8 de manera satisfactoria.