🐧 Actualizaciones automáticas en openSUSE Tumbleweed
Si me seguís en Mastodon, ya estaréis al tanto de que uso openSUSE Tumbleweed en todos los aparatos que me permiten instalarlo: sobremesa, portátil personal, y portátil de trabajo. Esto es así porque hace ya 5 años descubrí su facilidad de uso, y su configuración que «simplemente funciona», y el hecho de ser una distribución rolling release hace que no tenga que preocuparme de andar actualizando entre versiones «de punto» cada varios meses o años.
Por si no os ha quedado claro, os animo a que probéis openSUSE si sois ese tipo de gente que «le da a Linux».
Bueno, pues precisamente en una de esas configuraciones de «simplemente funciona» se apoya este tutorial: el uso del sistema de ficheros BTRFS, las actualizaciones automáticas, y los snapshots.
Normalmente, la manera de actualizar el sistema es hacerlo (o delegarlo) mediante el gestor de paquetes, o por consola (con un sudo zypper dup que ejecutaba casi compulsivamente a diario). Mediante esta configuración, haremos que las actualizaciones se instalen en segundo plano sin tocar el estado actual del sistema (se instalan en una nueva snapshot), y estarán disponibles automáticamente en el siguiente reinicio del sistema.
Esto, por supuesto, no me lo he inventado yo, sino que he recopilado varios pasos del internete.
Fuentes:
- Enabling Automatic Updates on openSUSE Tumbleweed and Slowroll[¹]
- Any way to automate updates in Tumbleweed?
Requisitos previos
- Usar BTRFS como sistema de ficheros en
root/(usado por defecto al instalar OpenSUSE) - Tener el sistema actualizado (solución rápida:
sudo zypper ref -f && sudo zypper dup) - Utilizar systemd (usado por defecto por OpenSUSE)
Paquetes necesarios
sudo zypper install transactional-update rebootmgr dracut-transactional-update transactional-update-notifier
¿Qué hace cada paquete?
transactional-update→ Maneja las snapshots del sistema, y sus actualizaciones.rebootmgr→ Planifica los reinicios después de las actualizaciones.dracut-transactional-update→ Provee servicios adicionales para las actualizaciones transaccionales.transactional-update-notifier→ Permite enviar notificaciones del sistema cada vez que se realice una actualización en segundo plano.
Configuración
Estos pasos son opcionales, dependiendo del caso de uso de cada uno.
Notificaciones
Si queremos que se nos envíe una notificación del sistema cada vez que se instalen actualizaciones en segundo plano usando el paquete transactional-update-notifier:
echo "REBOOT_METHOD=notify" | sudo tee /etc/transactional-update.conf > /dev/null
Es decir: añadimos la línea REBOOT_METHOD=notify al fichero /etc/transactional-update.conf.
Habilitamos el servicio:
systemctl --user enable --now transactional-update-notifier.service
Para desactivar:
systemctl --user disable --now transactional-update-notifier.service
Habilitar los cambios de proveedor en las actualizaciones
Si usamos repositorios de terceros que tengan paquetes con el mismo nombre que los oficiales de openSUSE (se me ocurren los paquetes del repositorio Packman), tendremos que habilitar esto para permitir a la actualización automática efectuar el cambio de proveedor:
# Crear el directorio
sudo mkdir -p /etc/transactional-update.conf.d
# Editar el fichero
sudo vim /etc/transactional-update.conf.d/vendor-change.conf
Añadimos estas líneas:
ZYPPER_AUTO_IMPORT_KEYS=1
ZYPPER_DUP_OPTIONS="--allow-vendor-change"
Activar
sudo systemctl enable --now transactional-update.timer transactional-update-cleanup.timer rebootmgr.service create-dirs-from-rpmdb.service
Desactivar
sudo systemctl disable --now transactional-update.timer transactional-update-cleanup.timer rebootmgr.service create-dirs-from-rpmdb.service
Una vez realizados todos estos pasos, se ejecutará en segundo plano la actualización del sistema usando un temporizador, y se nos notificará. Cuando estemos listos, reiniciamos el sistema, y ya estarán disponibles los paquetes actualizados.
[¹] En esta fuente se indica que es posible crear hooks para ejecutar otros comandos una vez termine el servicio transactional-update.service. En mi caso no ha funcionado y, tras leer la documentación oficial del paquete, no parece que esa funcionalidad exista.
Member discussion