Morpheus
Chaîne de boot / Reprise post-update

UKI stale après update

Runbook public pour diagnostiquer et réparer un UKI en retard après mise à jour kernel, mkinitcpio, Secure Boot ou chaîne LUKS/TPM.

UKI mkinitcpio sbctl systemd-boot recovery
Diagnostic public UKI stale après update
Vue publique: entrée boot courante, UKI inspecté, noyau courant, signature Secure Boot, logs emergency et prévention mkinitcpio.
01

Détecter

Repérer les symptômes: entrée non UKI, Measured UKI absent, emergency mode ou écart de version du noyau.

02

Comparer

Lire bootctl, uname, ukify inspect, sbctl et journaux pour identifier l'écart.

03

Réparer

Reconstruire initramfs et UKI, vérifier la signature, puis recentrer systemd-boot.

04

Prévenir

Faire gérer l'UKI par le preset mkinitcpio pour éviter la dérive après les futures mises à jour.

Contexte

Le problème réel.

Après une mise à jour, le système peut continuer à booter sur une entrée classique ou sur un UKI obsolète. L'écran emergency peut faire croire à un compte root verrouillé alors que la cause réelle est une divergence UKI, LUKS, TPM ou cmdline.

Objectifs

Ce que la solution devait garantir.

  • Distinguer une panne LUKS/TPM réelle d'un UKI stale.
  • Comparer l'UKI inspecté avec le noyau courant sans publier les chemins privés.
  • Documenter une réparation post-update reproductible mais anonymisée.
  • Installer une prévention durable via preset mkinitcpio dans le dépôt de préparation.
Architecture publique

Structure documentée, détails exploitables retirés.

Exemples anonymisés

Ce qui peut être montré sans exposer le système réel.

Signaux d'UKI stale

Les symptômes sont publiés comme états observables, sans journaux bruts.

entrée courante           entrée fallback ou chargeur classique
UKI mesurée                non
résultat boot              mode d'urgence
message visible            root account locked peut être trompeur
vrai soupçon               dérive UKI / LUKS / TPM / cmdline

Comparaison noyau / UKI

Le point critique est de comparer le noyau courant et le noyau embarqué dans l'UKI.

noyau en cours            <CURRENT_LTS_KERNEL>
.uname embarqué dans l'UKI <UKI_KERNEL_VERSION>
attendu                    les valeurs correspondent
si écart                   reconstruire l'UKI et vérifier la signature

Preset de prévention

La prévention durable est décrite par les clés nécessaires, pas par le chemin privé complet.

ALL_cmdline='<KERNEL_CMDLINE_FILE>'
default_uki='<SIGNED_UKI_OUTPUT>'

effet:
mise à jour noyau -> mkinitcpio -P -> initramfs + UKI régénérées
Runbook public

Commandes et états attendus issus de la documentation privée.

Les commandes ci-dessous sont volontairement anonymisées: chemins, noms de machines, interfaces, dépôts, périphériques et actions destructrices sont remplacés par des placeholders.

Documentation privée: UKI stale après update

Diagnostic rapide

Commandes anonymisées

bootctl status
bootctl list
efibootmgr -v
uname -r
ukify inspect <SIGNED_UKI_IMAGE>
sbctl verify
journalctl -b -0 -p err..alert --no-pager
journalctl -b -0 --no-pager | rg -n 'emergency|root account is locked|cryptsetup|TPM|luks|unlock|failed|timeout'

État attendu

l'entrée courante est identifiée
l'état de Measured UKI est explicite
le noyau embarqué dans l'UKI peut être comparé à uname
l'état de signature Secure Boot est visible
les logs d'urgence sont inspectés pour les échecs de chaîne de déverrouillage
Documentation privée: UKI stale après update

Réparation standard

Commandes anonymisées

mkinitcpio -P
ukify build --linux <LTS_KERNEL> --initrd <MICROCODE_IMAGE> --initrd <INITRAMFS_IMAGE> --cmdline <KERNEL_CMDLINE> --output <SIGNED_UKI_IMAGE>
sbctl verify
sbctl sign -s <SIGNED_UKI_IMAGE>
bootctl set-default <UKI_BOOT_ENTRY>
bootctl status

État attendu

les initramfs sont régénérées
l'UKI est reconstruite depuis le noyau LTS courant
la signature est vérifiée et réparée si nécessaire
le défaut systemd-boot est recentré sur l'UKI
l'état est contrôlé avant reboot
Documentation privée: UKI stale après update

Prévention permanente

Commandes anonymisées

inspect <REPO_PRESET_PATH>
rg 'ALL_cmdline|default_uki' <REPO_PRESET_PATH>
install -Dm644 <REPO_PRESET_PATH> <TARGET_PRESET_PATH>
mkinitcpio -P
ukify inspect <SIGNED_UKI_IMAGE>

État attendu

le preset contient un chemin cmdline explicite
le preset contient un chemin de sortie UKI par défaut
l'installation cible est une étape d'intégration système volontaire
les futures mises à jour LTS régénèrent l'UKI
la dérive root=/dev/gpt-auto-root est évitée
Travail réalisé

Décisions techniques publiables.

Diagnostic

Les commandes lisent l'état boot, EFI, noyau courant, UKI inspecté, signature et erreurs du boot.

Réparation

Le runbook reconstruit initramfs, UKI, signature et entrée par défaut sans publier de chemin réel.

Preset

La prévention décrit le rôle de ALL_cmdline et default_uki avec placeholders.

Validation

Preuves et contrôles retenus.

Preuves visuelles

Contrôles observables et portée de la preuve.

Résultats publics

Ce que le chantier démontre.

Anonymisation

Ce qui reste privé.

  • Pas de chemin réel d'UKI, entrée boot privée, UUID LUKS ou dépôt local nominatif.
  • Pas de commande d'installation système avec chemins personnels.
  • Pas de journaux bruts complets.
  • Les commandes utilisent des placeholders pour artefacts, presets et entrées.
Sources privées

Documentation d'origine.

  • Runbook UKI stale après update.
  • Documentation Boot Trust.
  • Documentation FIDO2 + LUKS.
  • Notes mkinitcpio et Secure Boot.

Supplément de documentation privée anonymisé

Runbook - UKI stale après mise à jour

Ce runbook couvre les cas où l'UKI reste en retard après une mise à jour de noyau, mkinitcpio, Secure Boot ou de la chaîne LUKS/TPM. Les chemins, entrées, dépôts et artefacts réels sont remplacés par des placeholders.

Symptômes

  • Le système boote encore sur une entrée LTS classique.
  • L'entrée UKI existe mais ne semble pas être effectivement utilisée.
  • bootctl status affiche Measured UKI: no.
  • Un boot UKI finit en emergency mode.
  • L'écran emergency peut évoquer un root account locked alors que la cause réelle est la chaîne UKI/LUKS/TPM.

Diagnostic rapide

bootctl status
bootctl list
efibootmgr -v
uname -r
ukify inspect <SIGNED_UKI_IMAGE>
sbctl verify
journalctl -b -0 -p err..alert --no-pager
journalctl -b -0 --no-pager | rg -n 'emergency|root account is locked|cryptsetup|TPM|luks|unlock|failed|timeout'

Interprétation

  • Current Entry sur une entrée classique signifie que le boot courant n'est pas l'UKI nominal.
  • Measured UKI: no signifie que la voie UKI mesurée n'est pas active.
  • .uname dans ukify inspect doit correspondre au noyau courant.
  • Si .uname est en retard, l'UKI doit être reconstruit.

Réparation standard après mise à jour de noyau

Régénérer les initramfs:

mkinitcpio -P

Reconstruire l'UKI avec le noyau LTS courant:

ukify build --linux <LTS_KERNEL> --initrd <MICROCODE_IMAGE> --initrd <INITRAMFS_IMAGE> --cmdline <KERNEL_CMDLINE> --output <SIGNED_UKI_IMAGE>

Vérifier et réparer la signature si nécessaire:

sbctl verify
sbctl sign -s <SIGNED_UKI_IMAGE>

Recentrer systemd-boot puis vérifier l'état:

bootctl set-default <UKI_BOOT_ENTRY>
bootctl status

Prévention permanente

Le correctif durable consiste à faire gérer l'UKI par le preset mkinitcpio LTS afin que les mises à jour reconstruisent aussi l'UKI avec la cmdline explicite.

ALL_cmdline='<KERNEL_CMDLINE_FILE>'
default_uki='<SIGNED_UKI_IMAGE>'

Installation système volontaire depuis le dépôt de préparation:

install -Dm644 <REPO_PRESET_PATH> <TARGET_PRESET_PATH>
mkinitcpio -P
ukify inspect <SIGNED_UKI_IMAGE>

Avec ce preset, les futures mises à jour du kernel LTS repassent par mkinitcpio -P avec régénération de l'UKI sur la cmdline explicite.

Si le boot UKI casse encore

  • Rebooter sur le fallback LTS classique.
  • Récupérer les logs du boot échoué.
  • Comparer la ligne de commande, l'UKI inspectée et l'état de mkinitcpio.
journalctl -b -0 -p err..alert --no-pager
journalctl -b -0 --no-pager | rg -n 'emergency|root account is locked|cryptsetup|TPM|luks|unlock|failed|timeout'
ukify inspect <SIGNED_UKI_IMAGE> | sed -n '1,120p'
rg -n '^HOOKS=' <MKINITCPIO_CONFIG>

Point de fond

mkinitcpio -P reconstruit les initramfs et peut déclencher des hooks, mais ne garantit pas la régénération de l'UKI si celui-ci est géré à part. L'UKI doit être reconstruit explicitement ou confié au preset mkinitcpio.

Références

  • Boot Trust Morpheus.
  • FIDO2 + LUKS.
  • Hardening Kernel.