Testare gli aggiornamenti di Fedora CoreOS
| Assicurati di aver completato i passaggi descritti nella pagina di configurazione iniziale prima di iniziare questo tutorial. |
In questo tutorial, non ci concentreremo sul provisioning, ma su ciò che accade durante gli aggiornamenti e sulle opzioni disponibili in caso di errori.
Scaricare una versione precedente di Fedora CoreOS
Una delle caratteristiche distintive di Fedora CoreOS sono gli aggiornamenti automatici. Per vederli in azione, dobbiamo scaricare una versione precedente di Fedora CoreOS. In questo caso, avvieremo la release N-1 di Fedora CoreOS, visibile dalla [pagina dei rilasci di Fedora CoreOS](https://fedoraproject.org/coreos/release-notes/) oppure utilizzando i metadati 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 volta scaricato l’archivio, assicurati di verificarne l’integrità:
curl https://fedoraproject.org/fedora.gpg | gpg --import
gpg --verify fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz.sig
| Cerca "Good signature from" nell’output. |
Una volta verificato l’archivio, puoi estrarlo con:
unxz fedora-coreos-${RELEASE}-qemu.x86_64.qcow2.xz
Per rendere il tutorial più semplice, dovresti rinominare questa immagine con un nome più breve:
mv fedora-coreos-${RELEASE}-qemu.x86_64.qcow2 fedora-coreos-older.qcow2
Scrittura della configurazione Butane e conversione in Ignition
Creeremo una configurazione Butane che:
-
Configurerà l’autologin della console.
-
Aggiungi una chiave SSH per l’utente
coredal file localessh-key.pub.
Scriviamo questa configurazione Butane in un file chiamato 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]
# Override Execstart in main unit
ExecStart=
# Add new Execstart with `-` prefix to ignore failure
ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
TTYVTDisallocate=no
storage:
files:
- path: /etc/profile.d/systemd-pager.sh
mode: 0644
contents:
inline: |
# Tell systemd to not use a pager when printing information
export SYSTEMD_PAGER=cat
| Facoltativamente puoi sostituire la chiave pubblica SSH nel file yaml con la tua chiave pubblica in modo da poter accedere all’istanza avviata. Se scegli di non farlo, verrai comunque autenticato automaticamente nella console seriale. |
Esegui Butane per convertirlo in una configurazione Ignition:
butane --pretty --strict --files-dir=./ updates.bu --output updates.ign
Avvio e aggiornamento iniziale
Ora procediamo con il provisioning. Assicurati di partire dall’immagine più vecchia di Fedora CoreOS in questo passaggio:
# Setup the correct SELinux label to allow access to the config
chcon --verbose --type svirt_home_t updates.ign
# Avvia la macchina virtuale di 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"
Disconnettiti dalla console seriale premendo CTRL + ] e poi utilizza l’indirizzo IP riportato per la NIC dalla console seriale per accedere come utente core via SSH:
Poiché il sistema non è aggiornato, Zincati lo noterà e inizierà ad aggiornare il sistema. Dovresti vedere il processo di aggiornamento iniziare immediatamente:
| Non tutti i servizi di rete necessari potrebbero essere attivi e funzionanti durante il controllo iniziale. In tal caso, Zincati controllerà nuovamente gli aggiornamenti tra circa 5 minuti. |
[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
Version: 38.20230625.3.0 (2023-07-11T11:57:53Z)
Commit: e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301
GPGSignature: Valid signature by 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 dopo che l’aggiornamento è stato preparato, il sistema si riavvierà per impostazione predefinita. Tuttavia, se rileva sessioni utente attive, attenderà e mostrerà un messaggio all’utente:
Messaggio di broadcast da Zincati il Gio 2023-08-03 19:52:55 UTC: Il nuovo aggiornamento 38.20230709.3.0 è disponibile ed è stato distribuito. Se consentito dalla strategia di aggiornamento, Zincati si riavvierà in questo aggiornamento quando tutti gli utenti interattivi si saranno disconnessi, o tra 10 minuti, a seconda di quale evento si verifichi prima. Per favore, disconnetti tutte le sessioni attive per permettere al processo di auto-aggiornamento di continuare.
Una volta terminate le sessioni utente, il riavvio procederà. In questo caso dobbiamo fermare il servizio di autologin su ttyS0 e disconnetterci anche da SSH:
[core@localhost ~]$ sudo systemctl stop serial-getty@ttyS0.service [core@localhost ~]$ exit logout Connection to 192.168.124.222 closed.
Puoi monitorare la console seriale per vedere quando la macchina ha effettuato il riavvio tramite virsh console fcos.
|
Quando accediamo nuovamente, possiamo vedere che la versione corrente di Fedora CoreOS è ora quella più recente. L’output di rpm-ostree status mostrerà anche la versione precedente, che esiste ancora nel caso in cui sia necessario eseguire il rollback:
[core@localhost ~]$ rpm-ostree status
State: idle
AutomaticUpdatesDriver: Zincati
DriverState: active; periodically polling for updates (last checked Thu 2023-08-03 19:59:16 UTC)
Deployments:
● fedora:fedora/x86_64/coreos/stable
Version: 38.20230709.3.0 (2023-07-24T12:25:01Z)
Commit: 552de26fe0fe6a5e491f7a4163db125e3d44b144ae53a8f5f488e3f8481c46f9
GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
fedora:fedora/x86_64/coreos/stable
Version: 38.20230625.3.0 (2023-07-11T11:57:53Z)
Commit: e841d77aadb875bb801ac845a0d9b8a70b4224bdeb15e7d6c5bff1da932c0301
GPGSignature: Valid signature by 6A51BBABBA3D5467B6171221809A8D7CEB10B464
La distribuzione attualmente avviata è indicata dal carattere ●.
|
Puoi visualizzare le differenze tra le due versioni eseguendo un 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 ...
Ripristino della versione precedente
Se il sistema non funziona completamente per qualsiasi motivo, possiamo tornare alla versione precedente:
sudo rpm-ostree rollback --reboot
Dopo aver effettuato nuovamente l’accesso dopo il riavvio, possiamo vedere che ora siamo riavviati nella vecchia distribuzione di prima dell’aggiornamento:
[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
E puoi anche verificare che Zincati non tenterà di aggiornare alla nuova versione da cui abbiamo appena eseguito il rollback:
[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
Pulizia
Ora procediamo con la pulizia dell’istanza. Disconnettiti dalla macchina e poi distruggila:
virsh destroy fcos virsh undefine --remove-all-storage fcos
Conclusione
In questi tutorial abbiamo imparato qualcosa su Fedora CoreOS. Abbiamo visto come viene fornito come immagine del disco pre-creata, come viene configurato in modo automatico tramite Ignition e come vengono gestiti gli aggiornamenti automatici tramite Zincati e rpm-ostree. Il prossimo passo è provare Fedora CoreOS per i tuoi casi d’uso e [unirti alla comunità](https://github.com/coreos/fedora-coreos-tracker/blob/main/README.md#communication-channels-for-fedora-coreos)!
Want to help? Learn how to contribute to Fedora Docs ›