Actualización del firmware¶
Una máquina instalada se actualiza sin memoria USB. El paquete de actualización se instala junto a la versión en marcha, no encima: la configuración, los datos y las contraseñas sobreviven a la actualización, y la versión anterior se queda en la partición de arranque para poder volver a ella.
La máquina no descarga ni instala nada por su cuenta. Instalar una actualización es siempre una petición explícita: desde la pantalla de la interfaz, desde la API o a mano en la consola.
El paquete de actualización¶
El paquete es un archivo comprimido con lo que va a la partición de arranque: el archivo de arranque de la nueva versión, las imágenes de sus capas, la entrada del menú del gestor de arranque, la descripción del producto y un manifiesto de sumas de comprobación. Junto al paquete se publica su propia suma de comprobación.
El canal de actualizaciones¶
La máquina se entera de las nuevas versiones por el índice de un canal de actualizaciones cuya dirección está compilada en la propia imagen. Lee el índice y enumera las versiones de su producto y su arquitectura; las que ya están en la partición aparecen marcadas.
Una imagen sin canal no sabe siquiera que existe, y solo se puede actualizar por dirección o por archivo.
La instalación¶
Desde la interfaz web¶
La sección Actualizaciones empieza nombrando dos versiones: la que está en marcha y la que arrancará la próxima vez. Al lado está el botón de reinicio — cuando la versión siguiente es distinta de la que está en marcha, aparece resaltado, y la pantalla dice qué cambiará exactamente al reiniciar.
El índice del canal se lee al abrir la interfaz: el elemento del menú lleva una marca cuando el canal tiene una versión que no está en la partición. El botón Comprobar actualizaciones vuelve a leer el índice.
A través de la API¶
La respuesta llega enseguida y la instalación corre en segundo plano.
Instalar un paquete desde un archivo:
curl -u admin:contraseña -H 'content-type: application/x-tar' \
--data-binary @mcaster-<versión>-amd64.update.tar http://<máquina>:8090/system/firmware
Instalar un paquete desde una dirección:
curl -u admin:contraseña -H 'content-type: application/json' \
-d '{"url":"https://…/mcaster-<versión>-amd64.update.tar"}' \
http://<máquina>:8090/system/firmware/install
Ver el avance de la operación, las versiones instaladas y la que arrancará la próxima vez:
curl -u admin:contraseña http://<máquina>:8090/system/firmware
Enumerar las versiones del canal de actualizaciones:
curl -u admin:contraseña http://<máquina>:8090/system/firmware/available
Reiniciar en la versión nueva:
curl -u admin:contraseña -X POST http://<máquina>:8090/system/reboot
Qué ocurre durante la instalación¶
- El demonio descomprime el paquete en la partición de datos mutables.
- Verifica cada archivo contra el manifiesto de sumas de comprobación, y el producto, la arquitectura y el perfil de hardware contra los que están en marcha.
- Solo entonces vuelve a montar la partición de arranque para escritura y copia lo que falta. Las imágenes de capas compartidas con las versiones ya instaladas no se copian.
- Apunta la entrada por defecto del gestor de arranque a la versión nueva.
Tras la instalación quedan en la partición la versión en marcha y la nueva. Las demás se retiran junto con las imágenes de capas que ya no necesita nadie.
La versión nueva empieza a funcionar solo después de reiniciar — la instalación no reinicia la máquina por sí sola.
Volver a la versión anterior¶
Revertir es elegir la versión anterior y reiniciar:
curl -u admin:contraseña -X POST http://<máquina>:8090/system/firmware/<versión>/select
curl -u admin:contraseña -X POST http://<máquina>:8090/system/reboot
Eliminar una versión que ya no hace falta:
curl -u admin:contraseña -X DELETE http://<máquina>:8090/system/firmware/<versión>
La versión en marcha y la seleccionada no se pueden eliminar.
Cuando el demonio no está¶
Si el demonio no ha arrancado o no se puede alcanzar, el mismo camino se recorre a mano en la consola como root. El programa firmware-update vive en la capa base, depende solo del intérprete de órdenes y de las utilidades de la capa, y hace exactamente tres cosas — descargar, colocar, conmutar — con las mismas comprobaciones que hace el demonio. No elimina nada.
firmware-update install https://…/mcaster-<versión>-amd64.update.tar # o una ruta a un archivo
firmware-update list # versiones en la partición: en marcha y siguiente
firmware-update select <versión> # arrancar la versión anterior la próxima vez
systemctl reboot
Lo que todavía no hay
No hay reversión automática tras un arranque fallido de una versión nueva: si la máquina no levanta, la entrada de arranque por defecto se devuelve a mano desde el menú del gestor de arranque. Las máquinas de las primeras series llevan una partición de arranque dimensionada para una sola versión, y una actualización en el sitio no cabe ahí: esas máquinas se reinstalan una vez desde una memoria USB.