Actualizar versión de Fedora

Fedora libera una nueva versión aproximadamente cada 6 meses y proporciona actualizaciones de paquetes para las dos últimas versiones estables disponibles, dando un mes adicional para la versión que queda fuera de soporte. Esto hace que si queremos el software al día, debemos subir de versión como máximo cada 13 meses.

En este artículo se describen algunos detalles básicos del ciclo de vida de versiones en Fedora y cómo realizar la actualización.

 

Contenido

 

Ciclo de vida de las versiones de Fedora

Como se ha indicado anteriormente, Fedora libera una nueva versión estable cada 6 meses aproximadamente. Mantiene actualizaciones de paquetes en las dos últimas versiones disponibles. Una vez publicada una nueva versión N, la versión N - 2 mantiene actualizaciones durante un mes más para dar tiempo a actualizarse, pero a partir de ahí deja de recibirlas.

Podemos consultar las fechas de fin de soporte de las diferentes versiones en https://docs.fedoraproject.org/en-US/releases/eol/.

Estos detalles hacen que una versión de Fedora deje de recibir actualizaciones aproximadamente cada 13 meses.

 

Recomendaciones previas

Antes de hace una actualización es recomendable hacer una copia de seguridad de los archivos importantes de datos y configuración, porque siempre existe el riesgo de problemas durante la actualización.

 

Restricciones de las actualizaciones

Las actualizaciones a una versión consecutiva superior (por ejemplo de la 38 a la 39) o saltando una versión (de 37 a 39) están soportadas, pero es recomendable hacer la actualización antes de que lleguen a su fin de fida (EOL). Esto ocurre un mes después de que se liberen dos versiones posteriores a la actual, como se ha mencionado anteriormente.

Las actualizaciones a más de dos versiones superiores a la vez no están soportadas. De hecho, para la actualización a dos versiones superiores una vez finalizado el mes de margen puede ser necesario importar la clave GPG para la versión a la que se quiere actualizar. Esto se puede hacer con:

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-N-primary

Para Fedora 39 utilizaríamos:

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-39-primary

 

Proceso de actualización

En primer lugar debemos actualizar los paquetes:

sudo dnf upgrade --refresh

y reiniciar el equipo. Esto es importante, ya que realiza la actualización de algunos paquetes y claves a la última versión disponibles, que pueden ser necesarias durante la instalación.

Una vez reiniciado el equipo instalamos el paquete dnf-plugin-system-upgrade package si no se encuentra ya instalado:

sudo dnf install dnf-plugin-system-upgrade

Descargamos los paquetes actualizados para la nueva versión a la que queremos actualizar, en este ejemplo, la versión 39:

sudo dnf system-upgrade download --releasever=39

Si alguno de los paquetes tienen dependencias que no se hayan podido conseguir, la actualización rechazará continuar a menos que se ejecute de nuevo con el parámetro --allowerasing. Esto ocurre con paquetes instalados de repositorios de terceros para los que no se han publicado aún repositorios actualizados a la nueva versión. Esta opción lo que haría es eliminar los paquetes que no se pueden actualizar, por lo que hay que estudiar la salida con cuidado y tener presente qué paquetes se eliminarían.

En caso de dependencias no satisfechas, se puede a veces ver más detalles si se añade la opción --best.

Si es necesario añadir o eliminar paquetes antes de ejecutar de nuevo dnf system-upgrade download, es recomendable hacer esas operaciones añadiendo a dnf la opción --setopt=keepcache=1. Si no se utiliza, se eliminará la caché de paquetes completa después de la operación y se tendrá que descargar todos los paquetes de nuevo.

Para lanzar el procedimiento de actualización, habrá que cerrar todos los programas y lanzar el proceso con la instrucción:

sudo dnf system-upgrade reboot

Cuando termine la actualización, el sistema se reiniciará y arrancará ya en la nueva versión de Fedora.

Tareas post-actualización opcionales

Fedora en su documentación enumera una serie de tareas que podemos realizar una vez finalizada la actualización para optimizar el sistema y limpiar archivos obsoletos. Podemos consultarlos en https://docs.fedoraproject.org/en-US/quick-docs/dnf-system-upgrade/#sect-optional-post-upgrade-tasks.

Actualizar los archivos de configuración de sistema.

En caso de haber cambiado manualmente archivos de configuración situados en /etc, RPM crea archivos con la extensión .rpmnew (para la nueva versión del archivo) y .rpmsave (para la versión previa que hubiéramos modificado). Buscando esos archivos podemos examinarlos manualmente y resolver los conflictos, si los hay. Otra opción es utilizar la herramienta rpmconf diseñada para simplificar este proceso. Se instala con:

sudo dnf install rpmconf

Y se utiliza con:

sudo rpmconf -a

Al utilizar rpmconf para actualizar la configuración del sistema, algunos archivos de configuración pueden cambiar. Después de actualizar hay que verificar especialmente los archivos /etc/ssh/sshd_config, /etc/nsswitch.conf y /etc/ntp.conf. En el caso de OpenSSH, tras la actualización el archivo sshd_configque da con su configuración por defecto en la que por ejemplo no está habilitada la autenticación por clave y permite la autenticación por contraseña.

Actualizar el gestor de arranque GRUB en sistemas BIOS

En sistemas con firmware BIOS, el cargador de arranque no se actualiza de manera automática, por lo que es aconsejable actualizarlo entre versiones de Fedora.

Si no estamos seguros de si nuestro sistema es BIOS o UEFI, un modo de verificarlo es ejecutar:

$ sudo efibootmgr
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0017,0018,0019,001A,001B,001D,001E,001F,0001,001C
Boot0000* Fedora	HD(1,GPT,76400879-6149-42fe-8307-1e0aa5ef1ed8,0x800,0x320b8)/File(\EFI\fedora\shimx64.efi)
Boot0001* Linux-Firmware-Updater	HD(1,GPT,76400898-6149-42fe-8307-1e0aa5ef1ed8,0x800,0x320b8)/File(\EFI\fedora\fwupdx64.efi)
...

La respuesta anterior es para un sistema con UEFI. En caso de ser BIOS, la respuesta será:

EFI variables are not supported on this system

Para actualizar el cargador de arranque, el primer paso es localizar el archivo de dispositivo en el que está ubicado el directorio /boot/:

$ sudo mount | grep "/boot "
/dev/sda4 on /boot type ext4 (rw,relatime,seclabel)

En este caso es /dev/sda4. Hay que reinstalar el cargador de arranque especificando el archivo de dispositivo sin el número:

$ sudo grub2-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

Limpiar paquetes retirados

Cada versión, Fedora retira algunos paquetes. Puede que el paquete pase a estar obsoleto, que el proyecto original desaparezca o el mantenedor baje la calidad. En esos casos Fedora deja de distribuir esos paquetes, pero continúan en el sistema. Nunca se recibirán actualizaciones, ni siquiera de seguridad, por lo que es recomendable eliminar esos paquetes. Para facilitar esta operación podemos instalar el paquete remove-retired-packages:

sudo dnf install remove-retired-packages

y realizar una limpieza con esta herramienta:

remove-retired-packages

Buscará paquetes retirados y si los encuentra preguntará interactivamente si se desean conservar o eliminar.

Limpiar paquetes anticuados

Antes de buscar paquetes anticuados o rotos que se pueden eliminar es recomendable ejecutar

sudo dnf upgrade

ya que la lista que obtengamos sólo es válida si el sistema está totalmente actualizado.

Se puede obtener una lista de paquetes con dependencias rotas con:

sudo dnf repoquery --unsatisfied

La lista debería estar vacía, pero si no es el caso hay que pensar en eliminarlos ya que posiblemente no van a funcionar.

Podemos consultar paquetes duplicados (paquetes que tienen múltiples versiones instaladas) con:

sudo dnf repoquery --duplicates

Puede que haya paquetes que todavía estén en el sistema pero que no aparezcan nunca más en los repositorios. Podemos verlos con:

sudo dnf list extras

Si aparece algún paquete no necesario, se puede eliminar con:

sudo dnf remove $(sudo dnf repoquery --extras --exclude=kernel,kernel-\*)

Se pueden eliminar de forma segura todos los paquetes con:

sudo dnf autoremove

Limpiar kernels antiguos

Después de arrancar con el último kernel y comprobar el sistema, se pueden eliminar los kernels previos. Los kernels antiguos no se eliminan con dnf autoremove para evitar eliminaciones accidentales.

Una de las formas más sencillas de eliminar los kernels antiguos es con un script que mantenga el último kernel. El script siguiente es un ejemplo de ello:

#!/usr/bin/env bash

old_kernels=($(dnf repoquery --installonly --latest-limit=-1 -q))
if [ "${#old_kernels[@]}" -eq 0 ]; then
    echo "No old kernels found"
    exit 0
fi

if ! dnf remove "${old_kernels[@]}"; then
    echo "Failed to remove old kernels"
    exit 1
fi

echo "Removed old kernels"
exit 0

Limpiar enlaces simbólicos antiguos

Puede haber algunos enlaces simbólicos en el sistema de ficheros que queden colgados tras una actualización.

Para localizarlos, podemos instalar la herramienta symlinks:

sudo dnf install symlinks

Una vez instalada se pueden auditar con un comando como el siguiente (el parámetro -r significa recursivo):

sudo symlinks -r /usr | grep dangling

Después de verificar la lista, se pueden eliminar con el parámetro -d:

sudo symlinks -r -d /usr

 

Resolver problemas posteriores a la actualización

A continuación se describen algunas tareas que SÓLO deben ejecutarse si se producen problemas en el sistema actualizado.

Rebuilding the RPM database

Si aparecen advertencias cuando se trabaja con las herramientas rpm o dnf, puede que la base de datos esté corrupta. Es posible reconstruirla y ver si esto resuelve los problemas. Siempre hay que hacer primero un backup del directorio /var/lib/rpm/. Se puede reconstruir con:

sudo rpm --rebuilddb

Utilizar distro-sync para resolver problemas de dependencias

La herramienta de actualización de sistema utiliza dnf distro-sync por defecto. Si el sistema se actualiza parcialmente o se aprecian algunos problemas de dependencia de paquetes, se puede intentar ejecutar el comando distro-sync manualmente para ver se resuelven. Esto intentará hacer que los paquetes instalados tengan la misma versión que la de los repositorios actualmente habilitados, incluso si para ello debe hacer un downgrade de algunos paquetes:

sudo dnf distro-sync

Se puede además especificar la opción --allowerasing que eliminará paquetes con dependencias que no puedan ser resueltas. Siempre hay que revisar qué paquetes se eliminarán confirmándolo de esta manera:

sudo dnf distro-sync --allowerasing

Reetiquetar archivos con la última política SELinux

Si aparece alguna advertencia referentes a políticas SELinux, puede que algunos archivos tengan permisos SELinux incorrectos. Esto puede ocurrir si SELinux fue inhabilitado en el pasado. Para reetiquetar SELinux en el sistema, hay que ejecutar el siguiente comando y después reiniciar:

sudo fixfiles -B onboot

El proceso de arranque puede llevar mucho tiempo, ya que comprueba y corrige las etiquetas de permisos SELinux en todos los archivos del sistema.

 

Referencias