Actualizar el sistema es un tema recurrente, y no es extraño. Por un lado; el viejo principio: si funciona, no lo toques; Por otro lado, la necesidad de superar los problemas de seguridad o por errores comunes, cuando no de obtener nueva funcionalidad. Y es que la modernidad tiene su atractivo.
Las distribuciones rolling release llevan las actualizaciones al límite. Literalmente cualquier elemento de la distribución puede ser actualizado prácticamente en cuanto es sus responsables publican una nueva versión.
¿Dónde está el problema entonces? si instalamos un sistema operativo Linux distribuido como rolling release es para tenerlo actualizado, ¿no?
Pues, como tantas cosas en la vida, depende.
En el mundo real es poco probable que tengas solamente los repositorios oficiales de la distribución. Puedes tener un repositorio para un software privativo, o para instalar ciertos códecs de dudosa legalidad, o simplemente para usar un programa concreto. En openSUSE es muy probable que tengas el repositorio Packman por costumbre y quizá para algún códec inusual, si tienes una gráfica nvidia tendrás su repositorio también, o quizá el repositorio Alarrosa para instalar el software Autofirma. Algunos de esos repositorios pueden tener paquetes que estén en otros repositorios, así que el sistema tendrá que lidiar con eso.
Tanto Tumbleweed como Slowroll tienen posturas un poco conservadoras en este aspecto. La idea es que tú uses un comando en un terminal, sudo zypper dup, y proporciones la ayuda necesaria en caso de problemas. Puedes usar Descubrir (Discover) para actualizar, pero cualquier paquete que se necesite cambiar de cualquier repositorio no oficial puede ser un problema, ya que no tiene una respuesta predefinida en caso de conflicto. Myrlyn en cambio sí maneja bastante bien las actualizaciones, pero aun así también es una herramienta para actualizar bajo demanda: puede resolver conflictos presentando un cuadro de diálogo en el que se responda a cada uno.
Las actualizaciones transaccionales
Esto que suena tan raro es un sistema que se desarrolló para ser utilizado en distribuciones inmutables, tanto en Leap Micro como en MicroOS.
En estos sistemas operativos la raíz del sistema se monta como de solo lectura, y los cambios en los paquetes solo son posibles en una nueva instantánea de dicho sistema, en la que se reinicia para poder utilizar esos cambios.
Un aspecto interesante de las actualizaciones transaccionales es que pueden ejecutarse como respuesta a un temporizador. Esto permite que tú puedas programar la actualización automática del sistema y te olvides de ese asunto. Eso sí, para que funcione tienes que reiniciar el sistema lo antes posible.
Para que esto funcione, hay que hacer tres cosas: añadir el software necesario para usar las actualizaciones transaccionales, activar los temporizadores, y configurar el servicio con algunos ajustes.
Instalar el software
Para instalar el sofware basta con arrancar tu aplicación favorita: YaST Software o Myrlyn. Busca transactional y selecciona el paquete transactional-update. El instalador ya añadirá los paquetes rebootmgr, dracut-transactional-update y tukit.
Si lo tuyo es el terminal, el comando es el siguiente:
sudo zypper install transactional-update rebootmgr dracut-transactional-update
| Paquete | Propósito |
|---|---|
transactional-update |
Se encarga de las actualizaciones del sistema basadas en instantáneas. |
rebootmgr |
Agenda y gestiona los reinicios tras actualizar. |
dracut-transactional-update |
Proporciona servicios como create-dirs-from-rpmdb para el manejo adecuado de /var . |
Activar servicios y temporizadores
Puedes usar YaST -> Sistema -> Servicios para localizar los servicios y temporizadores e inciarlos manualmente. O mejor, puedes usar Cockpit para ello: Cockpit -> Servicios.
sudo systemctl enable --now transactional-update.timer transactional-update-cleanup.timer rebootmgr.service create-dirs-from-rpmdb.service
Servicio o temporizador | Rol |
transactional-update.timer | Ejecuta actualizaciones diarias en una instantánea. |
transactional-update-cleanup.timer | Elimina viejas instantáneas. |
rebootmgr | Agenda un reinicio si es necesario (por defecto ~3:30 AM) |
create-dirs-from-rpmdb | Se asegura de que los directorios requeridos bajo /var existen en las nuevas instantáneas. |
Configuración y ajustes
Para que esto funcione bien, hay que configurar adecuadamente las actualizaciones transaccionales. Podemos emplear la configuración existente en /usr/etc/transactional-updates.conf para esto, pero hay que hacerlo como root. La última línea incluye:
#ZYPPER_AUTO_IMPORT_KEYS=0
Hay que descomentarla eliminando el carácter # y luego cambiar el 0 (desactivado) por un 1 (activado), para que quede así:
ZYPPER_AUTO_IMPORT_KEYS=1
También es buena idea asegurarse de que solo tenemos repositorios "confiables", para que no falle al proponer una actualización de un paquete de un respositorio no oficial, como puede ser Packman. Por supuesto esto es el talón de aquiles de esta estrategia: si tienes muchos repos o de fuentes menos confiables, puede que sus actualizaciones acaben por afectar al sistema.
zypper usa "vendedores" (vendors) para determinar qué fuentes son más fiables que otras. Lo habitual es que un sistema como Tumbleweed o Slowroll solo tenga a SUSE y a openSUSE como fuentes fiables.
tux@mipc:~> cat /etc/zypp/vendors.d/00-openSUSE.conf
[main]
vendors=openSUSE,SUSE,SUSE LLC <https://www.suse.com/>
Podemos añadir un fichero para esto en el directorio vendors.d, por ejemplo /etc/zypp/vendors.d/10-extra.conf, con una nueva línea que incluya vendedores como Packman o los que requiera nuestro sistema. O podemos editar directamente (como root) el fichero 00-openSUSE.conf para cambiar la línea por otra más adecuada, algo como:
vendors = suse,opensuse,obs://build.suse.de,Packman,http://packman.links2linux.de
Puedes buscar paquetes en YaST Software o en Myrlyn, y en la etiqueta versiones se indicará su proveedor. O puedes usar el comando zypper info <paquete>
tux@mipc:~> zypper info libfaac0
Obtendo os datos do repositorio...
Lendo os paquetes instalados...
Información de Paquete libfaac0:
--------------------------------
Repositorio : Packman Essentials Repository
Nome : libfaac0
Versión : 1.31-1699.1.pm.12
Arq : x86_64
Vendedor : http://packman.links2linux.de
Tamaño Instalado : 121,6 KiB
Instalado : Si (automatically)
Estado : actualizado
Source package : faac-1.31-1699.1.pm.12.src
Upstream URL : https://github.com/knik0/faac
Resumo : Shared library part of faac
Descrición :
FAAC is a LC, MAIN and LTP profile, MPEG2 and MPEG-4 AAC encoder, completely
written from scratch.
Shared library part of faac
También es posible que tengas software que necesite que apruebes los términos de licencia para poder instalarlo o actualizarlo. Un caso muy común son los drivers de Nvidia.
Para que la actualización pueda ser completamente automática, lo suyo es que zypper, al ser usado por transactional-update, fuera capaz de decidir que la licencia es válida: al fin y al cabo, ya sabes que tienes ese software. O puede que no, en realidad esto es una buena discusión para las condiciones de distribución del sistema operativo. Lo que nos importa es que no nos falle la actualización automática porque no le decimos "sí" a la pregunta de si aceptamos sus términos de licencia.
Para cambiar esto basta con modificar la configuración de Zypper para que acepte las licencias que necesiten ser aprobadas. Esto se hace en el fichero /etc/zypp/zypper.conf. Edítalo y busca la opción autoAgreeWithLicenses. Encontrarás una línea así:
# autoAgreeWithLicenses = no
Cámbiala a:
autoAgreeWithLicenses = yes
Y con eso ya podrás actualizar automáticamente.
Test y primeras conclusiones
Una vez que se tiene este sistema en marcha, lo que queda es ver cómo se comporta a lo largo del tiempo.
Ante todo, podemos lanzar una primera actualización a ver qué tal va. El comando es el mismo que se usa en MicroOS o Leap Micro:
sudo transactional-update dup
Eso debería mostrar cómo se crea la nueva instantánea y cómo se actualiza el sistema.
También es posible ejecutar directamente el servicio transactional-update.service.
Tal y como lo entiendo, el temporizador de la actualización transaccional transactional-update.timer está programado para lanzar la actualización cada día. Si usas el equipo poco tiempo, puede que nunca se lleguen a realizar, pero eso tiene fácil solución como puedes ver en la wiki de openSUSE.
Notas y agradecimientos
No es la primera vez que me planteo usar actualizaciones transaccionales en Tumbleweed o Slowroll. El potencial es, creo yo, evidente. Pero no fue hasta que alguien compartió en Mastodon el link al artículo Enabling Automatic Updates on openSUSE Tumbleweed and Slowroll hasta que decidí hacer una prueba. Ahora estoy fuera y no puedo hacer las pruebas importantes, que son comprobar que sí, efectivamente, el sistema se actualiza él solo.
El artículo detalla una forma de resolver la actualización desde repositorios de terceros que a mí me ha fallado, y por tanto he buscado una alternativa en la propia wiki de openSUSE (en inglés): https://en.opensuse.org/SDB:Vendor_change_update. Lo siento, me gustaría tener la traducción en castellano pero hay tanto que hacer... El artículo también detalla cómo añadir las actualizaciones de Flatpak, pero en mi caso las he desechado: tienen sus propios temporizadores y puedes configurarlas aparte.
Otras cosas las he copiado y traducido literalmente del artículo. Si lo visitáis veréis que las tablas que he puesto ya estaban allí igual que la mayoría de comandos. Es de agradecer que la gente publique artículos así y espero que no le moleste lo que yo he hecho con él.
A corto plazo las actualizaciones transaccionales no van a sustituir a las actualizaciones regulares. Cuantos más repositorios y más software de dichos repositorios aumenta el potencial para que el sistema de actualización no sea capaz de resolver todas las dependencias. Es muy probable que incluso en distribuciones inmutables como Aeon o Kalpa acabe siendo necesario ejecutar el comando manualmente.
Recuerda:
La actualización transaccional tiene lugar en una instantánea diferente. Sí, tienes que reiniciar para cargar la nueva instantánea que has creado con la actualización. Si no lo haces, el sistema continuará con la instantánea anterior.
¿Qué os parece? ¿Queríais actualizaciones automáticas? Pues tomad siete tazas.