Aller au contenu

Maintenance et dépannage

Le quotidien de l’administrateur : garder le parc propre, intervenir sur un hôte, revenir en arrière après une mauvaise configuration, lire les journaux.

Toutes ces commandes ciblent un hôte (ou un motif / une liste) via colmena :

CommandeEffet
just enter <host>Ouvrir un shell SSH (alias e)
just reboot <host>Redémarrer
just halt <host>Éteindre
just gc <host> [keep]Purger les générations + nettoyer le store
just fix-boot <host>Réinstaller le chargeur d’amorçage

L’argument keep de just gc limite la purge :

  • just gc <host> : ne garde que la génération courante.
  • just gc <host> 3 : garde les 3 dernières générations, courante incluse.
  • just gc <host> 3d : supprime les générations de plus de 3 jours.

Avant de committer ou déployer, normaliser le dépôt :

Fenêtre de terminal
just clean # fix + check + generate + format
  • just check : code + tests unitaires + vérification des flakes (avant déploiement).

Chaque déploiement crée une génération NixOS. En cas de problème :

  1. Au démarrage : choisir une génération précédente dans le menu de boot.

  2. À chaud : revenir à la génération précédente puis la rendre active :

    Fenêtre de terminal
    just enter <host>
    sudo nixos-rebuild switch --rollback
  3. Par le code : git revert la mauvaise configuration, puis redéployer :

    Fenêtre de terminal
    just apply <host>
Fenêtre de terminal
just enter <host>
journalctl -u <service> -n 100 --no-pager # logs d'un service
journalctl -p err -b # erreurs depuis le démarrage
systemctl status <service> # état d'une unité

Services en échec après un redémarrage de passerelle

Section intitulée « Services en échec après un redémarrage de passerelle »

Symptôme : systemctl --failed liste, juste après le boot, des unités qui repartent sans broncher une fois relancées à la main (montages NFS, provisionnement OIDC, tout ce qui résout un nom).

Cause : sur une passerelle, le résolveur du système est AdGuard Home (nameserver 127.0.0.1). Son unité est Type=simple, donc systemd la déclare active dès que le processus démarre — une vingtaine de secondes avant qu’elle n’écoute réellement sur le port 53. Tout ce qui résout un nom pendant cette fenêtre échoue.

Le framework pose une barrière pour ça : dns-ready.service interroge le résolveur local jusqu’à obtenir une réponse, et bloque nss-lookup.target jusque-là.

Fenêtre de terminal
systemctl status dns-ready # date à laquelle les noms ont résolu
journalctl -b -u adguardhome | head -30 # moment où le proxy DNS écoute enfin

Une unité qui résout un nom au démarrage doit donc s’ordonner derrière cette cible — after = [ "nss-lookup.target" ] pour un service, l’option de montage x-systemd.after=nss-lookup.target pour un point de montage. Sur les hôtes non passerelles, la cible est atteinte immédiatement : aucun délai ajouté.

Une passerelle ne demande pas ses propres certificats : c’est le HCS qui les obtient, et l’unité sync-caddy-certs les recopie toutes les dix minutes depuis le HCS vers le stockage Caddy local.

Fenêtre de terminal
systemctl status sync-caddy-certs # dernier passage et son résultat
journalctl -u sync-caddy-certs -n 50
systemctl list-timers sync-caddy-certs

Le transfert passe par deux répertoires :

CheminRôle
/var/lib/caddy-cert-syncZone de transit (StateDirectory de l’unité)
/var/lib/caddy/storageStockage Caddy réellement servi

L’unité tourne en root, tire depuis le HCS avec la clé SSH de l’utilisateur nix, puis publie vers le stockage Caddy. Elle attend d’abord que le tailnet soit réellement monté (jusqu’à cinq minutes), puis réessaie le transfert trois fois avant d’abandonner. Un systemctl status en failed reste donc le signal à surveiller, et un échec répété annonce une expiration de certificat.

Symptôme, à chaque activation d’un poste GNOME :

warning: not applying UID change of user 'gdm-greeter-2' (60580 -> 60579)

nixpkgs a renuméroté ses comptes gdm-greeter* ; NixOS ne renumérote jamais un compte existant. Les postes installés avant gardent les anciens UID, et deux greeters peuvent partager le même.

Fenêtre de terminal
just fix-gdm-greeters poste-01,poste-02 # diagnostic, n'écrit rien
just fix-gdm-greeters poste-01,poste-02 apply

apply arrête GDM, recrée les comptes décalés avec les UID déclarés, réattribue leurs fichiers puis relance GDM. Un hôte avec une session graphique ouverte est laissé de côté : relancer après déconnexion. Sauvegarde de /etc/passwd et /etc/shadow dans /var/lib/nixos/backup-gdm-greeters-<date>/.