Se recomienda realizar una previa lectura del post Instalación y configuración del escenario OpenStack, pues en este artículo se tratarán con menor profundidad u obviarán algunos aspectos vistos con anterioridad.
El objetivo de ésta tarea es el de continuar con la configuración del escenario de trabajo previamente generado en OpenStack, concretamente, llevando a cabo una actualización de la máquina Quijote, una máquina totalmente limpia (en cuanto a servicios instalados se refiere) que tiene actualmente instalado un CentOS 7, una versión bastante antigua de la distribución, así que pasaremos a la versión más reciente, CentOS 8.
Antes de proceder, me gustaría dejar claro que la serie de instrucciones a ejecutar que mencionaré están basadas en mi experiencia personal, y no tienen por qué ser iguales para otra máquina, ya que entran en juego varios factores. Aún así, servirán para hacerse una idea del procedimiento a seguir y de los posibles problemas que pueden surgir por el camino.
Recomiendo muy encarecidamente realizar un backup del servidor antes de proceder con la actualización, para que en el improbable caso de que la máquina quedase inútil, se pudiese recuperar su estado anterior. No considero necesario explicar cómo hacer un backup ya que se saldría del objetivo de éste artículo.
Otra recomendación personal es que previamente se trate de llevar a cabo el proceso en una máquina lo más parecida posible que no se encuentre en producción, para así experimentar un poco antes de hacerlo en la máquina original, pudiendo anteponerse así, a posibles dificultades.
Antes de comenzar con la actualización, vamos a comprobar la release de CentOS actualmente instalada, para así verificar que realmente estamos haciendo uso de CentOS 7. Dicha información podremos encontrarla contenida en el fichero /etc/redhat-release, por lo que visualizaremos su contenido haciendo uso de cat
:
Como se puede apreciar, actualmente estamos haciendo uso de la release 7.8.2003, por lo que podremos proceder a realizar la actualización a CentOS 8.
El primer paso será instalar el repositorio EPEL (Extra Packages Enterprise Linux), repositorio que nos ofrece paquetes de mucha utilidad que no están incluidos en los repositorios por defecto, que puede ser utilizado en varias distribuciones, entre las que se encuentra CentOS.
Para su instalación, haremos uso de la herramienta yum
, el gestor de paquetes por defecto en CentOS 7, al que le pasaremos el enlace del fichero .rpm a instalar, o bien, el nombre de paquete epel-release.
En mi caso, he optado por la última opción, ya que es más cómoda, pues se encargará de descargar e instalar la última versión disponible del repositorio. Para ello, ejecutaremos el comando (con permisos de administrador, ejecutando para ello el comando sudo su -
):
Para verificar que el nuevo repositorio se ha añadido y habilitado correctamente, volveremos a hacer uso de dicho comando, ésta vez con la opción repolist enabled, que nos mostrará aquellos repositorios que se encuentran actualmente habilitados, estableciendo a su vez el correspondiente filtro por nombre:
Como se puede apreciar, el nuevo repositorio EPEL se encuentra correctamente añadido y habilitado.
El siguiente paso consiste en instalar dos paquetes que nos facilitarán la tarea de actualización:
- rpmconf: Herramienta que busca posibles conflictos en la configuración de un determinado paquete.
- yum-utils: Colección de utilidades que extienden las funcionalidades de yum.
Para llevar a cabo la correspondiente instalación, haremos uso del comando:
Tras ello, procederemos a hacer uso de la herramienta que acabamos de instalar para así comprobar que no existan conflictos en los ficheros de configuración de los paquetes, en cuyo caso tendríamos luz verde para proceder con la actualización. Para ello, ejecutaremos el comando:
Donde:
- -a: Comprueba los ficheros de configuración de todos los paquetes instalados en el sistema.
En mi caso, no hubo ninguna salida en el comando, deduciendo por tanto que no existía ningún conflicto. En caso de haberlos, es recomendable marcar la opción N, manteniendo así el fichero de configuración original, aunque depende del sistema.
Posteriormente, haremos uso del comando package-cleanup
existente en el paquete yum-utils previamente instalado para así listar aquellas dependencias que ya no son necesarias (–leaves) y aquellos paquetes que no se encuentran disponibles en los repositorios actualmente configurados (–orphans), con la finalidad de desinstalarlos.
Es muy importante lo último que he mencionado, ya que he estado leyendo algunos artículos en Internet que se limitan a listar los paquetes, pero no le pasan la salida de dicho comando a yum
para desinstalarlos, por lo que realmente, no están limpiando la máquina. Para ello, ejecutaremos los comandos:
Nuestra máquina ya está limpia de paquetes innecesarios, así que es importante saber que en CentOS 8, el gestor de paquetes predeterminado es dnf
, en lugar de yum. Realmente, podríamos hacer uso de éste último sin problema alguno, ya que existe compatibilidad, pero por elección propia, he decidido cambiarlo. Para instalar el nuevo gestor de paquetes, haremos uso del comando:
Dado que ya hemos instalado el nuevo gestor de paquetes, podremos proceder a desinstalar el anterior, ya que no nos será necesario, ejecutando para ello el comando:
A pesar de haber desinstado el paquete, podremos comprobar que todavía existe el correspondiente directorio en /etc/, haciendo uso del comando:
Dado que ya no necesitamos dicho directorio, procederemos a eliminarlo, ejecutando para ello el comando:
Donde:
- -r: Indica que la eliminación se lleve a cabo de forma recursiva, eliminando los subdirectorios y sus contenidos.
- -f: Evitamos que pida confirmación para cada uno de los ficheros contenidos, forzando por tanto su eliminación.
En un principio, el subdirectorio referente al paquete yum ha sido ya eliminado del directorio /etc/, así que procederemos a comprobarlo una vez más, ejecutando para ello el comando utilizado con anterioridad:
Efectivamente, el subdirectorio ha sido eliminado. Cada vez estamos más cerca de proceder con la actualización como tal, pero antes de ello, vamos a asegurarnos de que toda la paquetería esté completamente actualizada, haciendo para ello uso del nuevo gestor de paquetes instalado:
Tras ello, habrá llegado el momento de instalar la última versión de los paquetes necesarios para CentOS 8 (repos, release y gpg-keys), que podremos encontrar en el mirror oficial de CentOS. Su instalación la llevaremos a cabo ejecutando el comando:
Una vez que la instalación de los paquetes referentes a la versión 8.2.2004 ha finalizado, tendremos que actualizar también la versión del repositorio EPEL, para que dicha versión sea ahora la que usaremos en CentOS 8. Para ello, volveremos a hacer uso del comando:
Posteriormente, vamos a limpiar los archivos temporales existentes en la máquina, como consecuencia de la paquetería que se ha tenido que descargar y que habrá quedado cacheada, ocupando espacio en disco de manera innecesaria. Para ello, ejecutaremos el comando:
Como se puede apreciar, se han eliminado un total de 62 archivos que no eran necesarios.
Todavía no hemos terminado, ya que la actualización a CentOS 8, implica a su vez una actualización de kernel, así que procederemos a eliminar todos los paquetes asociados al que estamos utilizando actualmente, pues no vamos a necesitarlo más, haciendo uso del comando:
Donde:
- -e: Indicamos que queremos desinstalar el paquete introducido.
- -q: Nos mostrará todos aquellos paquetes que contengan una determinada cadena en su nombre, en este caso, kernel.
En un principio, nos queda un último paquete por desinstalar, y se trata de sysvinit-tools, que contiene las herramientas necesarias para el arranque básico de la máquina, el cuál desinstalaremos para evitar posibles conflictos, ejecutando para ello el comando:
Donde:
- –nodeps: Indicaremos que no revise las dependencias antes de desinstalar el paquete.
Lo que hemos estado haciendo hasta ahora son los preparativos necesarios para la actualización a CentOS 8, así que ha llegado el momento de llevarla a cabo. Para ello, haremos uso del comando:
Donde:
- –releasever: Configura dnf como si la release fuese la introducida. Ésto puede afectar a las rutas de caché, los valores de los ficheros de configuración y los enlaces de repositorios. En éste caso, la versión es la 8.
- –allowerasing: Permite que se eliminen determinados paquetes instalados para resolver dependencias en caso de ser necesario.
- –setopt: Establece una opción que prevalece sobre aquella especificada en el fichero de configuración. En éste caso, desactivamos la opción deltarpm, cuya finalidad era ahorrar ancho de banda, pues descargaba ficheros delta que posteriormente tendría que reconstruir de manera local, un trabajo bastante intensivo para la CPU, que al tratarse en ésta ocasión de una gran cantidad de ficheros, no sería eficiente.
Como se puede apreciar en la salida del comando, han habido algunos conflictos con un paquete de Python previamente instalado en CentOS 7, concretamente con python36-rpmconf-1.0.22-1.el7.noarch, el cuál procederemos a desinstalar, ejecutando para ello el comando:
Tras ello, volveremos a ejecutar el comando para realizar la actualización, para intentar llevarla a cabo de forma exitosa en ésta ocasión:
Tras alrededor de 10 minutos de espera, la actualización ha finalizado sin ningún tipo de error. Antes de llevar a cabo las comprobaciones oportunas, tenemos que instalar la nueva versión del kernel, ya que en memoria tenemos cargada la versión de kernel correspondiente a CentOS 7, haciendo para ello uso del comando:
Por último, vamos a tratar de actualizar dos grupos de paquetes (colección de paquetes que tienen un propósito común), para así asegurar que tenemos las utilidades mínimas para el correcto funcionamiento del sistema. Para ello, ejecutaremos el comando:
La actualización a CentOS 8 ha finalizado, así que para verificar que actualmente estamos haciendo uso de la nueva versión, volveremos a visualizar el contenido del fichero /etc/redhat-release, haciendo uso del comando:
Como se puede apreciar, nos encontramos haciendo uso de la release 8.2.2004. Tras ello, verificaremos el kernel que actualmente estamos utilizando, ejecutando para ello el comando:
Donde:
- -r: Le pedimos que nos muestre la release en lugar del nombre.
Como era de esperar, la versión de kernel cargada en memoria es la correspondiente a la instalada en CentOS 7, de manera que para cargar el nuevo núcleo instalado, no tendremos más remedio que reiniciar la máquina, haciendo uso del comando:
Tras ello, volveremos a comprobar la versión de kernel cargada en memoria, ejecutando para ello el comando visto con anterioridad:
Una vez completado el reinicio, la nueva versión del núcleo ha sido correctamente cargada en memoria, por lo que podemos asegurar que la actualización se ha completado exitosamente.
Podríamos dejar aquí el artículo, ya que la actualización se ha completado, pero personalmente, considero necesario comprobar que las configuraciones llevadas a cabo previamente en la máquina siguen estando activas y funcionales, así que comenzaremos por listar la información correspondiente a las interfaces de red existentes en la máquina, haciendo para ello uso del comando:
Como se puede apreciar, la máquina tiene configurada una interfaz eth0 con direccionamiento privado 10.0.1.5, configurado de forma estática, tal y como establecimos en el anterior artículo.
Al tratarse de una máquina ubicada en una red privada, vamos a verificar que sus tablas de enrutamiento tienen la correspondiente entrada para asegurar la conectividad con el exterior, mediante la máquina que actúa como router (Dulcinea), ubicada en 10.0.1.9, ejecutando para ello el comando:
Efectivamente, su configuración es la correcta, por lo que en un principio debería tener salida al exterior. Para comprobarlo, vamos a hacer ping
a una dirección que sabemos que nos va a responder, como por ejemplo la 8.8.8.8:
Como era de esperar, la máquina sigue teniendo conectividad con el exterior.
La siguiente comprobación consistirá en verificar que la máquina tiene correctamente configurado el hostname y el FQDN, haciendo para ello uso de los comandos:
Una vez más, la configuración es correcta.
He considerado necesario también el hecho de verificar que la resolución estática de nombres a las máquinas Dulcinea y Sancho sigue funcionando, así que trataremos de alcanzarlas mediante un ping
:
La resolución estática de nombres ha funcionado correctamente, de manera que nos quedaría comprobar que la resolución mediante servidores DNS también lo hace, tratando de llevar a cabo para ello un ping
a google.es, por ejemplo:
Al parecer, hay un problema con la resolución de nombres (podemos asegurar que no es de conectividad ya que anteriormente hemos sido capaces de alcanzar a 8.8.8.8). Lo primero que haremos será revisar el fichero en el que se establecen los servidores DNS a los que preguntar, es decir, el fichero /etc/resolv.conf, ejecutando para ello el comando:
Como se puede apreciar, ha habido un problema, y es que únicamente ha configurado 1 de los 3 servidores DNS (el cuál no se encuentra operativo) previamente especificados en el fichero de configuración de la interfaz de red, muy posiblemente, debido a alguna configuración del mecanismo cloud-init existente en CentOS 8 pero no en CentOS 7.
Tras algo de investigación al respecto, descubrí que la solución era bastante sencilla. Lo primero que haremos será limpiar el fichero de configuración de la interfaz de red, es decir, /etc/sysconfig/network-scripts/ifcfg-eth0, eliminando todas las entradas referentes a los servidores DNS. Para ello, haremos uso del comando:
El contenido actual es el siguiente:
El contenido tras eliminar las entradas referentes a los servidores DNS es el siguiente:
Tras ello, guardaremos los cambios y procederemos a modificar directamente el fichero /etc/resolv.conf, estableciendo en el mismo los servidores DNS que queremos utilizar, que serán los mismos que estaban previamente definidos en el fichero que acabamos de modificar. Para ello, ejecutaremos el comando:
El resultado final sería el siguiente:
Cuando hayamos terminado la modificación del mismo, guardaremos los cambios y volveremos a tratar de hacer ping
a google.es, para comprobar si la resolución se lleva ahora a cabo de forma correcta:
Efectivamente, la resolución del nombre google.es se ha realizado correctamente, además de haber conseguido que dicha configuración perdure incluso tras un reinicio.
Por último, voy a verificar que el reloj del sistema esté correctamente sincronizado, pues fue la última configuración que llevé a cabo en CentOS 7, haciendo para ello uso del comando:
Como era de esperar, el reloj se encuentra correctamente sincronizado (System clock synchronized) con la zona horaria de Madrid, por lo que la actualización de CentOS 7 a CentOS 8 y su correspondiente comprobación de funcionamiento ha llegado hasta aquí.