Probar actualizaciones de Fedora CoreOS
| Asegúrese de que ha completado los pasos descritos en la página inicial de ajuste antes de empezar con este tutorial. |
En este tutorial no nos centraremos en el aprovisionamiento, sino en lo que sucede durante las actualizaciones y las opciones que están disponibles en caso de fallas.
Descargar una versión anterior de Fedora CoreOS
Una de las características que definen a Fedora CoreOS son las actualizaciones automáticas. Para verlas en acción, debemos descargar una versión anterior de Fedora CoreOS. En este caso, iniciaremos la versión N-1 de Fedora CoreOS, que puede consultarse en página de versiones de Fedora CoreOS o mediante los metadatos de releases.json:
RELEASE=$(curl https://builds.coreos.fedoraproject.org/prod/streams/stable/releases.json | jq -r '.releases[-2].version')
curl -O https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/${RELEASE}/x86_64/fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz
curl -O https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/${RELEASE}/x86_64/fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz.sig
Una vez que el archivador ha sido descargado, asegúrese verificar su integridad:
curl https://fedoraproject.org/fedora.gpg | gpg --import
gpg --verify fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz.sig
| Busque "Buena firma de" en la salida. |
Una vez que haya verificado el archivador, puede extraerlo con:
unxz fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz
Para hacer el tutorial más simple, renombraría esta imagen a un nombre más breve:
mv fedora-coreos-${RELEASE}-qemu.x86_64.qcow2 fedora-coreos-older.qcow2
Escribir la configuración Butane y convertirla a Ignition
Crearemos una configuración de Butane:
-
Configura el acceso automático por consola.
-
Añadiremos una Clave SSH para el usuario
coredesde el archivo localssh-key.pub.
Escribimos esta config de Butane a un archivo invocado en updates.bu:
variant: fcos
version: 1.7.0
passwd:
users:
- name: core
ssh_authorized_keys_local:
- ssh-key.pub
systemd:
units:
- name: serial-getty@ttyS0.service
dropins:
- name: autologin-core.conf
contents: |
[Service]
# Anular Execstart en la unidad principal
ExecStart=
# Agregue nuevo Execstart con el prefijo `-` para ignorar el error
ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
TTYVTDisallocate=no
storage:
files:
- path: /etc/profile.d/systemd-pager.sh
mode: 0644
contents:
inline: |
# Indica a systemd que no utilice un buscapersonas al imprimir información
export SYSTEMD_PAGER=cat
| Opcionalmente, puede reemplazar la clave pública SSH del archivo YAML con su propia clave pública para iniciar sesión en la instancia iniciada. Si no lo hace, se iniciará sesión automáticamente en la consola serie. |
Ejecute Butane para convertir eso a una config Ignition:
butane --pretty --strict --files-dir=./ updates.bu --output updates.ign
Inicio y actualización inicial
Ahora vamos a proprorcionarlo. Asegúrate de empezar desde la imagen anterior de Fedora CoreOS en este paso:
# Configurar la etiqueta correcta de SELinux para conceder acceso para la config
chcon --verbose --type svirt_home_t updates.ign
# Inicia una máquina virtual de Fedora CoreOS
virt-install --name=fcos --vcpus=2 --ram=2048 --os-variant=fedora-coreos-stable \
--import --network=bridge=virbr0 --graphics=none \
--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/updates.ign" \
--disk="size=20,backing_store=${PWD}/fedora-coreos-older.qcow2"
Desconéctese de la consola serie pulsando CTRL + ] y, a continuación, utilice la dirección IP indicada para la NIC desde la consola serie para iniciar sesión con el usuario core a través de SSH:
Como el sistema no está actualizado al día, Zincati notificará esto e iniciará la actualización del sistema. Vería el proceso de actualización sucediendo de esta manera:
| Todos los servicios de red necesarios pueden no estar actualizados y ejecutándose durante la comprobación inicial. En tal caso, Zincati de nuevo comprobará si hay actualizaciones alrededor de 5 minutos. |
[core@localhost ~]$ systemctl status --full zincati.service
● zincati.service - Zincati Update Agent
Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Thu 2023-08-03 19:52:41 UTC; 10s ago
Docs: https://github.com/coreos/zincati
Main PID: 1816 (zincati)
Status: "found update on remote: 38.20230709.3.0"
Tasks: 12 (limit: 2239)
Memory: 6.8M
CPU: 273ms
CGroup: /system.slice/zincati.service
├─1816 /usr/libexec/zincati agent -v
└─1873 rpm-ostree deploy --lock-finalization --skip-branch-check revision=552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9 --disallow-downgrade
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::cli::agent] starting update agent (zincati 0.0.25)
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::cincinnati] Cincinnati service: https://updates.coreos.fedoraproject.org
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::cli::agent] agent running on node '87c9ec3e0a4045a19b74b54ae5ed986a', in update group 'default'
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] registering as the update driver for rpm-ostree
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] initialization complete, auto-updates logic enabled
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::strategy] update strategy: immediate
Aug 03 19:52:41 localhost.localdomain systemd[1]: Started zincati.service - Zincati Update Agent.
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] reached steady state, periodically polling for updates
Aug 03 19:52:42 localhost.localdomain zincati[1816]: [INFO zincati::cincinnati] current release detected as not a dead-end
Aug 03 19:52:43 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] target release '38.20230709.3.0' selected, proceeding to stage it
[core@localhost ~]$ rpm-ostree status
State: idle
AutomaticUpdatesDriver: Zincati
DriverState: active; update staged: 38.20230709.3.0; reboot delayed due to active user sessions
Deployments:
fedora:fedora/x86_64/coreos/stable
Version: 38.20230709.3.0 (2023-07-24T12:25:01Z)
Commit: 552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9
GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
Diff: 61 upgraded
● fedora:fedora/x86_64/coreos/stable
Versión: 38.20230625.3.0 (2023-07-11T11:57:53Z)
Commit: e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301
GPGSignature: Firma válida de 6A51BBABBA3D5467B6171221809A8D7CEB10B464
[core@localhost ~]$ systemctl status --full zincati.service
● zincati.service - Zincati Update Agent
Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Thu 2023-08-03 19:52:41 UTC; 1min 21s ago
Docs: https://github.com/coreos/zincati
Main PID: 1816 (zincati)
Status: "update staged: 38.20230709.3.0; reboot delayed due to active user sessions"
Tasks: 6 (limit: 2239)
Memory: 3.2M
CPU: 362ms
CGroup: /system.slice/zincati.service
└─1816 /usr/libexec/zincati agent -v
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::cli::agent] agent running on node '87c9ec3e0a4045a19b74b54ae5ed986a', in update group 'default'
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] registering as the update driver for rpm-ostree
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] initialization complete, auto-updates logic enabled
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::strategy] update strategy: immediate
Aug 03 19:52:41 localhost.localdomain systemd[1]: Started zincati.service - Zincati Update Agent.
Aug 03 19:52:41 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] reached steady state, periodically polling for updates
Aug 03 19:52:42 localhost.localdomain zincati[1816]: [INFO zincati::cincinnati] current release detected as not a dead-end
Aug 03 19:52:43 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] target release '38.20230709.3.0' selected, proceeding to stage it
Aug 03 19:52:55 localhost.localdomain zincati[1816]: [INFO zincati::update_agent::actor] update staged: 38.20230709.3.0
Aug 03 19:52:55 localhost.localdomain zincati[1816]: [WARN zincati::update_agent] interactive sessions detected, entering grace period (maximum 10 minutes)
Poco después de la actualización, el sistema se reiniciará de forma predeterminada. Sin embargo, si detecta sesiones de usuario activas, esperará y mostrará un mensaje al usuario:
Mensaje difundido por Zincati el jue 3/8/2023 a las 19:52:55 UTC: Está disponible la actualización nueva 38.20230709.3.0 y se ha implementado. Si la estrategia de actualización lo permite, Zincati se reiniciará con esta actualización cuando todos los usuarios interactivos hayan cerrado sesión, o en 10 minutos, lo que ocurra primero. Cierre sesión en todas las sesiones activas para que el proceso de actualización automática pueda continuar.
Una vez que hayan finalizado las sesiones de usuario el reinicio continuará. En este caso, debemos detener el inicio de sesión automático en el servicio ttyS0 y también cerrar la sesión de SSH:
[core@localhost ~]$ sudo systemctl stop serial-getty@ttyS0.service [core@localhost ~]$ exit logout Conexión a 192.168.124.222 cerrada.
Puede supervisar la consola serie para ver cuando la máquina ha realizado el reinicio mediante virsh console fcos.
|
Al volver a iniciar sesión, podemos ver que la versión actual de Fedora CoreOS es la más reciente. El resultado de rpm-ostree status también mostrará la versión anterior, que aún existe en caso de que necesitemos revertirla:
[core@localhost ~]$ rpm-ostree status
State: idle
AutomaticUpdatesDriver: Zincati
DriverState: activo; sondeando periódicamente en busca de actualizaciones (última comprobación Jue 03/08/2023 19:59:16 UTC)
Deployments:
● fedora:fedora/x86_64/coreos/stable
Versión: 38.20230709.3.0 (2023-07-24T12:25:01Z)
Hecho: 552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9
GPGSignature: Firma válida por 6A51BBABBA3D5467B6171221809A8D7CEB10B464
fedora:fedora/x86_64/coreos/stable
Versión: 38.20230625.3.0 (11/07/2023T11:57:53Z)
Hecho: e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301
Firma GPG: Firma válida por 6A51BBABBA3D5467B6171221809A8D7CEB10B464
La implementación actualmente iniciada se indica con el carácter ●.
|
Puede ver las diferencias entre las dos versiones ejecutando el comando rpm-ostree db diff:
[core@localhost ~]$ rpm-ostree db diff ostree diff commit from: rollback deployment (e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301) ostree diff commit to: booted deployment (552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9) Upgraded: NetworkManager 1:1.42.6-1.fc38 -> 1:1.42.8-1.fc38 NetworkManager-cloud-setup 1:1.42.6-1.fc38 -> 1:1.42.8-1.fc38 NetworkManager-libnm 1:1.42.6-1.fc38 -> 1:1.42.8-1.fc38 NetworkManager-team 1:1.42.6-1.fc38 -> 1:1.42.8-1.fc38 NetworkManager-tui 1:1.42.6-1.fc38 -> 1:1.42.8-1.fc38 aardvark-dns 1.6.0-1.fc38 -> 1.7.0-1.fc38 ...
Revertir a la versión anterior
Si por cualquier motivo el sistema no funciona completamente podemos volver a la versión anterior:
sudo rpm-ostree rollback --reboot
Después de volver a iniciar sesión tras el reinicio, podemos ver que ahora hemos vuelto a arrancar en la antigua implementación anterior a la modernización:
[core@localhost ~]$ rpm-ostree status
State: idle
AutomaticUpdatesDriver: Zincati
DriverState: active; periodically polling for updates (last checked Thu 2023-08-03 20:05:05 UTC)
Deployments:
● fedora:fedora/x86_64/coreos/stable
Version: 38.20230625.3.0 (2023-07-11T11:57:53Z)
Commit: e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301
GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
fedora:fedora/x86_64/coreos/stable
Version: 38.20230709.3.0 (2023-07-24T12:25:01Z)
Commit: 552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9
GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
Y también puedes verificar que Zincati no intentará actualizarse a la versión nueva de la que acabamos de revertir:
[core@localhost ~]$ systemctl status --full zincati.service
● zincati.service - Zincati Update Agent
Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Thu 2023-08-03 20:05:05 UTC; 45s ago
Docs: https://github.com/coreos/zincati
Main PID: 813 (zincati)
Status: "periodically polling for updates (last checked Thu 2023-08-03 20:05:05 UTC)"
Tasks: 6 (limit: 2239)
Memory: 22.0M
CPU: 238ms
CGroup: /system.slice/zincati.service
└─813 /usr/libexec/zincati agent -v
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::cincinnati] Cincinnati service: https://updates.coreos.fedoraproject.org
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::cli::agent] agent running on node '87c9ec3e0a4045a19b74b54ae5ed986a', in update group 'default'
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::update_agent::actor] registering as the update driver for rpm-ostree
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::update_agent::actor] found 1 other finalized deployment
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::update_agent::actor] deployment 38.20230709.3.0 (552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9) will be excluded from being a future update target
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::update_agent::actor] initialization complete, auto-updates logic enabled
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::strategy] update strategy: immediate
Aug 03 20:05:05 localhost.localdomain systemd[1]: Started zincati.service - Zincati Update Agent.
Aug 03 20:05:05 localhost.localdomain zincati[813]: [INFO zincati::update_agent::actor] reached steady state, periodically polling for updates
Aug 03 20:05:06 localhost.localdomain zincati[813]: [INFO zincati::cincinnati] current release detected as not a dead-end
Purga
Ahora purgamos la instancia. Desconecta desde la máquina y después destrúyelo:
virsh destroy fcos virsh undefine --remove-all-storage fcos
Conclusión
En estos tutoriales, hemos aprendido un poco sobre Fedora CoreOS. Hemos aprendido cómo se entrega como una imagen de disco predefinida, cómo se aprovisiona de forma automática mediante Ignition y cómo se configuran y se implementan las actualizaciones automáticas mediante Zincati y rpm-ostree. El siguiente paso es probar Fedora CoreOS en tus propios casos de uso y únete a la comunidad.
Want to help? Learn how to contribute to Fedora Docs ›