Aller au contenu

Commandes Just

Les commandes ci-dessous sont toutes exécutées avec just 🡕.

Utilisation
just <commande> <arguments>

Chaque commande est préfixée d’une icône indiquant son contexte d’utilisation :

  • 💠 Commun : disponible dans tous les contextes.
  • 🔆 Framework : spécifique au framework DNF amont (dnf/).
  • ✳️ Projet : spécifique au projet consommateur (mon réseau).
  • 🔗 Co-développement : projet consommateur qui contient un clone du framework.

Les recettes vivent dans dnf/just/. Le Justfile du projet importe un fichier d’amorçage, qui détermine les commandes disponibles en fonction du contexte.

ContexteLigne du JustfileCommandes
Frameworkimport 'just/dnf.just'💠 🔆
Projet consommateurimport? 'dnf/just/project.just'💠 ✳️
Co-développementimport 'dnf/just/codev.just'💠 ✳️ 🔗

Dans un projet consommateur, dnf/ est le lien vers le store Nix posé par nix run .#init. Le ? de import? laisse just démarrer tant que ce lien n’existe pas.

Le co-développement remplace ce lien par un clone git du framework. Les recettes 🔆 unit-tests, check-recipes, simulate, simulate-debug, fixtures et pkg-update s’y lancent aussi depuis la racine. Les modèles de projet portent la ligne codev.just, commentée.


Communes à tous les contextes, ces commandes aident à maintenir le code et à générer les fichiers déclaratifs.

Lance nix develop -c zsh pour obtenir un shell avec les outils du projet.

Fenêtre de terminal
just develop

Exécute la chaîne complète : statix fix → check-code → generate → format → _fix_fs_permissions.

Fenêtre de terminal
just clean

Lance treefmt sur tous les fichiers avec la config partagée du framework. En co-développement, formate aussi dnf/.

Fenêtre de terminal
just format

Régénère les default.nix des dossiers de modules et, dans un projet, les fichiers var/generated/*.nix depuis etc/config.yaml. Sème aussi usr/machines/<hôte>/ pour chaque hôte doté d’un bloc disko (voir Dossier machine).

Fenêtre de terminal
just generate

Lancez ces vérifications avant de déployer pour détecter les régressions.

Enchaîne la vérification du code (check-code), les tests unitaires DNF et la vérification du flake (check-flake). Les tests unitaires ne tournent que sur un clone du framework : un dnf/ lié au store a été testé avant sa publication.

Fenêtre de terminal
just check

Analyse statique avec statix et détection du code mort avec deadnix, sur tous les fichiers *.nix.

Fenêtre de terminal
just check-code

Lance nix flake check en filtrant les avertissements connus des outputs non standards de DNF (colmena, colmenaHive, homeManagerModules, libTests, mkNodes, secretsPlan, version).

Fenêtre de terminal
just check-flake

Dans le dépôt du framework (dnf/). Les tests et pkg-update se lancent aussi à la racine d’un projet de co-développement.

Lance nix-unit sur les tests libTests du framework.

Fenêtre de terminal
just unit-tests

Vérifie que les trois amorçages (dnf, project, codev) se chargent, et que chaque appel just <recette> imbriqué désigne une recette de son propre contexte. just ne résout ces appels qu’à l’exécution : la CI lance la même vérification.

Fenêtre de terminal
just check-recipes

Lance les scénarios de test NixOS (NixOS Test Driver).

ArgumentEffet
(vide)Liste les scénarios disponibles
allExécute tous les scénarios (nix flake check)
fullRégénère les fixtures puis exécute tout
<nom>Exécute un scénario nommé
Fenêtre de terminal
just simulate # lister
just simulate all # tout exécuter
just simulate modules-node-console-git

Lance le driver interactif d’un scénario (REPL Python).

Fenêtre de terminal
just simulate-debug modules-node-console-git

Gère les fixtures de test : génération, vérification d’absence de dérive, régénération des clés et secrets jetables.

ActionEffet
generateRégénère var/generated/ pour tous les espaces de test
checkVérifie l’absence de dérive sans modifier l’arbre
gen-secretsRégénère les clés et secrets de test (jetables)
Fenêtre de terminal
just fixtures check

Met à jour un paquet de dnf/pkgs/ vers sa dernière version amont, ou vers version si elle est donnée, avec nix-update 🡕. Voir Les paquets hors nixpkgs.

Fenêtre de terminal
just pkg-update rename-simple
just pkg-update fleet-update 0.2.0 # version explicite (train de release)

Affiche la version du framework, sa révision, son dernier tag et la release du générateur qu’il épingle.

Fenêtre de terminal
just version

Affiche l’entrée que porterait la prochaine release, sans rien écrire. Requiert git-cliff, fourni par la devShell (just develop).

Fenêtre de terminal
just changelog

Monte la version, ajoute l’entrée du CHANGELOG, commite et tague le framework, sans pousser. Voir Publier une version.

Fenêtre de terminal
just bump # niveau déduit des commits

L’installation d’un nouvel hôte suit un enchaînement précis.

Formate les disques via disko et installe NixOS via nixos-anywhere.

L’argument ip vaut auto par défaut : l’adresse est calculée comme pour full-install, inutile de la relever.

La recette dépose aussi sur la cible, avant l’installation du système, la clé age /etc/sops/age/infra.key et, sur un hôte chiffré, la clé d’hôte SSH de son initrd : sops fonctionne dès la première activation et le tout premier démarrage écoute déjà sur le port 2222. Le volume est formaté avec la passphrase partagée du parc, il n’y a donc rien à saisir.

Fenêtre de terminal
just install myserver
just install myserver nixos 10.0.0.5 # IP personnalisée
just install myserver nix auto test # VM test uniquement

Chaîne complète : install + attente reboot + unlock + configure + apply + gc + reboot.

L’adresse de départ est calculée toute seule : nom de l’hôte dans sa propre zone, adresse de passage réservée s’il est branché ailleurs. Voir Machines hors de leur zone.

Après le redémarrage, la machine n’est pas forcément revenue au même endroit : la recette sonde toutes ses adresses connues, sur les ports 22 et 2222, et poursuit sur celle qui répond. Un hôte chiffré est déverrouillé au passage par just unlock.

Le redémarrage final n’est pas décoratif : apply active l’espace utilisateur mais pas le noyau ni l’initrd, et ce reboot est la seule preuve automatique que la machine repart toute seule. Sur un hôte chiffré, il prouve du même coup que le déverrouillage à distance fonctionne, pendant que vous êtes encore devant et non à la première coupure de courant. unlock est donc rappelé juste après.

Fenêtre de terminal
just full-install myserver
just full-install myserver nixos 10.0.3.42 # adresse forcée

Formate un périphérique USB avec disko et installe NixOS dessus. Scelle l’hôte comme install.

Fenêtre de terminal
just install-key myusbhost

✳️ install-here <hôte> <login> [empreinte] [yes] [passphrase]

Section intitulée « ✳️ install-here <hôte> <login> [empreinte] [yes] [passphrase] »

Installe la machine sur laquelle elle tourne, démarrée sur l’ISO générique DNF, comme poste d’administration du projet : disko efface son disque, les clés naissent sur la cible (bootstrap-keys), puis nixos-install. Le projet rejoint /etc/nixos du nouveau système, propriété de login. Un disque chiffré demande le fichier de sa passphrase, qui devient la passphrase partagée du parc ; la clé SSH d’initrd est déposée sur la cible.

Fenêtre de terminal
just install-here poste alice '<empreinte>'

✳️ backup-admin <périphérique> [passphrase] [racine]

Section intitulée « ✳️ backup-admin <périphérique> [passphrase] [racine] »

Écrit sur une clé USB, sans la formater, une sauvegarde chiffrée par age de ce que rien d’autre ne remplace : la clé de déploiement nix (qui donne la clé age d’admin), la clé age d’infra et le projet (git bundle). Fichier dnf-backup-<domaine>.tar.age, avec un README.txt en clair ; une sauvegarde précédente du même réseau est gardée, renommée à sa date.

  • périphérique : une partition de la clé, /dev/disk/by-label/SECOURS par exemple ;
  • passphrase : un fichier qui la contient ; sinon, age la demande ;
  • racine : le système qui porte les clés, /mnt depuis l’installeur.

darkone new la lance après l’installation.

Fenêtre de terminal
just backup-admin /dev/disk/by-label/SECOURS

✳️ backup-check <périphérique> [passphrase] [racine]

Section intitulée « ✳️ backup-check <périphérique> [passphrase] [racine] »

Relit la sauvegarde de backup-admin, mêmes arguments, et la compare aux clés et au dernier commit du projet.

Enchaîne copy-id → copy-hw → push-key → luks (ce dernier ne fait rien sur un hôte non chiffré).

L’adresse est résolue une fois et transmise à toute la chaîne. Si l’hôte est branché hors de sa zone, la redirection SSH est posée dans la foulée, pour que l’apply qui suit l’atteigne : just roaming-clear <hôte> une fois la machine revenue chez elle.

Fenêtre de terminal
just configure myserver

Vérifie que la clé de déploiement nix ouvre bien l’hôte cible, et pousse la clé privée partagée sur les passerelles (synchronisation des certificats TLS depuis le HCS).

Fenêtre de terminal
just copy-id myserver

Exécute nixos-generate-config --show-hardware-config à distance et sauvegarde le résultat dans usr/machines/<hôte>/hardware/hardware-configuration.nix, puis enchaîne detect-hw.

Fenêtre de terminal
just copy-hw myserver

Relève sur la machine les modules noyau de ses cartes réseau filaires et les écrit dans usr/machines/<hôte>/hardware/detected-hardware.nix (fichier généré, importé automatiquement). Ils ne rejoignent l’initrd que s’il a du réseau, pour le déverrouillage LUKS à distance. Détecte aussi une machine virtuelle (systemd-detect-virt) : aucun firmware n’y est chargé (darkone.system.hardware.virtual). Appelé par install (utilisateur nixos de l’ISO) et par copy-hw.

Fenêtre de terminal
just detect-hw myserver

Transfère la clé age /etc/sops/age/infra.key vers l’hôte cible.

Fenêtre de terminal
just push-key myserver

Affiche l’adresse MAC de la première interface active d’une machine, pour la déclarer dans etc/config.yaml avant de l’installer. Utile quand l’hôte n’a pas encore de réservation DHCP et n’est donc joignable que par l’adresse dynamique relevée sur son écran.

Fenêtre de terminal
just host-info myserver 10.0.0.50

Provisionne le chiffrement d’un hôte : passphrases partagée et par hôte dans sops, clé SSH de l’initrd dans sops puis sur la cible, manifeste usr/secrets/luks.json, IP WAN des passerelles. Voir Chiffrement des disques (LUKS).

ActionEffet
(défaut)Prépare les secrets, puis converge la machine
preMoitié hors ligne seulement, sans toucher à la machine
passwdFait tourner la passphrase par hôte, puis converge
showAudit en lecture seule : keyslots et déverrouillage distant
Fenêtre de terminal
just luks myserver
just luks myserver show
just luks myserver passwd

Redirige SSH vers un hôte branché hors de sa zone, le temps de l’installation. Colmena s’adresse à un nœud par son nom, qui désigne son adresse d’origine ; cette redirection le renvoie là où la machine se trouve vraiment.

Posée par just configure quand c’est nécessaire, retirée par full-install en fin de course. Sans argument, affiche les redirections en cours.

Fenêtre de terminal
just roaming # afficher
just roaming myserver # rediriger (adresse calculée)

Retire la redirection d’un hôte, ou toutes si aucun n’est donné.

Fenêtre de terminal
just roaming-clear myserver
just roaming-clear

Configure la machine d’administration : clés SSH, clés age SOPS, .sops.yaml, secrets par défaut, clé de signature Harmonia, et tous les secrets internes que réclament les services déclarés (clients OAuth2, sauvegarde, jetons de service…).

Fenêtre de terminal
just configure-admin-host

✳️ bootstrap-keys [racine] [login] [empreinte]

Section intitulée « ✳️ bootstrap-keys [racine] [login] [empreinte] »

Crée les clés et le squelette sops d’une machine qui n’a pas encore de compte nix, sous la racine donnée (/, ou /mnt depuis l’installateur). configure-admin-host s’appuie sur la même mécanique. L’empreinte d’un compte (mkpasswd, entre apostrophes) est facultative.

Fenêtre de terminal
just bootstrap-keys /mnt alice '<empreinte>'

Construit l’image ISO d’installation pour l’architecture donnée. Elle embarque la clé publique d’administration (usr/secrets/nix.pub) : just full-install s’y connecte sans mot de passe.

Fenêtre de terminal
just build-iso # x86_64-linux (défaut)
just build-iso "aarch64-linux"

Les commandes apply* reposent sur colmena 🡕 et rafraîchissent d’abord le verrou DNF via update-dnf. fleet-update pilote une mise à jour complète avec des commandes Nix natives.

Déploie la configuration sur une ou plusieurs cibles.

ParamètreDescription
cibleNom d’hôte, motif ('*'), liste (a,b), tag colmena (@server)
actionswitch (défaut), boot, test, build
Fenêtre de terminal
just apply @all # tous les hôtes
just apply myserver # switch (défaut)
just apply myserver boot # boot
just apply 'db-*' # tous les hôtes commençant par db-

Idem apply avec --verbose --show-trace.

Fenêtre de terminal
just apply-verbose myserver

Applique la configuration sur la machine courante.

Fenêtre de terminal
just apply-local

Active le mode maintenance Alertmanager avant d’appliquer, le désactive après.

Fenêtre de terminal
just apply-silenced myserver

Met à jour, construit et déploie tout le parc par vagues. Voir Mettre à jour le parc avec fleet-update.

Fenêtre de terminal
just fleet-update # tout le parc, interface interactive
just fleet-update --on '+server' # les hôtes d'un profil
just fleet-update --build-only # construire sans rien activer
just fleet-update --help # toutes les options

Met à jour les entrées flake de la racine. En co-développement, met d’abord à jour celles de dnf/ et les commite (chore(flake):, amendé si le dernier commit de dnf/ en est déjà un).

Fenêtre de terminal
just update-flake

Synchronise flake.lock avec le HEAD local de dnf/ (co-développement).

Fenêtre de terminal
just update-dnf

Ces commandes permettent d’interagir avec les hôtes du parc : maintenance, redémarrage, nettoyage et réparation du boot.

Ouvre une session SSH interactive en tant que nix@<hôte>, sur le port 22 seulement. Un hôte hors de sa zone est retrouvé par dnf-locate (voir Joindre un hôte en déplacement). Un hôte qui attend sa passphrase LUKS relève de just unlock.

Fenêtre de terminal
just enter myserver

Répond au prompt LUKS d’un hôte resté dans son initrd, sans humain : la passphrase est lue dans sops et poussée par le sshd du port 2222. Attend que l’hôte apparaisse (un point par tentative), ce qui permet de l’enchaîner juste après un redémarrage. Appelée automatiquement par just full-install. Aucune passphrase stockée acceptée : depuis un terminal, la demande est présentée.

Sur un hôte sans volume LUKS, c’est un no-op journalisé.

Fenêtre de terminal
just unlock myserver

✳️ remote-desktop <hôte> [ro|rw|login] / rd ⭐

Section intitulée « ✳️ remote-desktop <hôte> [ro|rw|login] / rd ⭐ »

Ouvre le bureau à distance d’un hôte. ro (défaut) observe la session graphique déjà ouverte, rw y prend la main ; les deux échouent si personne n’est connecté. login ouvre à la place votre propre session derrière un écran de login GDM. Aucun port n’est ouvert sur l’hôte : le flux passe par un tunnel SSH monté par nix. Voir Bureau à distance.

Fenêtre de terminal
just rd mypc # observation
just rd mypc rw # prise en main
just rd mypc login # session à soi, via GDM

Redémarre l’hôte via colmena exec.

Fenêtre de terminal
just reboot myserver
just reboot 'web-*' # tous les web-*

Arrête (poweroff) l’hôte via colmena exec, après confirmation.

Fenêtre de terminal
just halt myserver

Supprime les anciennes générations, nettoie le store puis régénère les entrées de démarrage (switch-to-configuration boot). keep fixe ce qui est conservé :

keepGénérations conservées
(vide)La courante uniquement, tous profils (nix-collect-garbage -d)
N (1 à 99)Les N dernières du profil système, courante incluse
Nd (1 à 99)Celles de moins de N jours, plus celle active à cette date
Fenêtre de terminal
# Nettoyage des hôtes dont le nom commence par "server-"
just gc "server-*" # Garde uniquement la génération courante
just gc "server-*" 3 # Garde les 3 dernières générations, courante incluse
just gc "server-*" 3d # Supprime les générations de plus de 3 jours

Nettoie les dossiers personnels d’un hôte sorti du partage NFS : liens XDG morts supprimés, sauvegardes .bak restaurées. check (défaut) n’écrit rien et affiche ce que ferait apply. hôtes est une liste séparée par des virgules, ou all. Voir Sortir du partage NFS des homes.

Fenêtre de terminal
just nfs-cleanup myserver # simulation, n'écrit rien
just nfs-cleanup myserver apply # exécution

Réinstalle le bootloader avec NIXOS_INSTALL_BOOTLOADER=1.

Fenêtre de terminal
just fix-boot myserver

Réaligne les UID des comptes gdm-greeter* sur ceux de nixpkgs. Voir Dépannage.

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

Les mots de passe et clés sont chiffrés avec SOPS. Ces commandes les gèrent sans manipuler les fichiers chiffrés à la main.

Ouvre usr/secrets/secrets.yaml dans vim (via l’utilisateur nix).

Fenêtre de terminal
just sops

Accueille un utilisateur ou réinitialise ses accès : mot de passe de session, lien Kanidm, invitation au coffre-fort, fiche d’accueil à copier. Un accès déjà défini n’est remplacé qu’après confirmation.

ModePourLien Kanidm
normal / n (défaut)Non technicien1 h, pour l’admin
advanced / aTechnicien24 h, pour l’utilisateur
Fenêtre de terminal
just invite alice # non technicien
just invite alice advanced # technicien
just invite alice a '<hash>' # technicien, empreinte envoyée à distance

Voir Créer un compte utilisateur.

Enregistre le mot de passe de référence du parc (empreinte bcrypt dans sops). Ne configure aucun compte : just passwd <utilisateur> s’en charge.

Fenêtre de terminal
just passwd-default

Met à jour le mot de passe de session d’un utilisateur, ou enregistre l’empreinte qu’il a envoyée (mkpasswd -m sha-512, entre apostrophes).

Fenêtre de terminal
just passwd darkone
just passwd darkone '<empreinte>'

Enrôle une YubiKey (main par défaut, ou backup) pour un utilisateur : PAM (session/sudo), LUKS et lien d’enrôlement Kanidm, en un seul passage sur le poste admin. action=revoke révoque la clé sur tout le parc au prochain déploiement. Voir Authentification forte.

Fenêtre de terminal
just yubikey darkone # enrôle la clé principale
just yubikey darkone backup # enrôle la clé de secours
just yubikey darkone main revoke

Rotation de la clé age /etc/sops/age/infra.key en 3 étapes avec vérifications d’intégrité.

ÉtapeAction
initGénère une nouvelle clé, conserve l’ancienne, rechiffre les secrets
push-keysPousse la clé combinée (nouvelle + ancienne) vers tous les hôtes
finalizeVérifie que tous les hôtes ont la nouvelle clé, supprime l’ancienne
Fenêtre de terminal
just rotate init
just rotate push-keys
just rotate finalize

Ces commandes couvrent des fonctionnalités spécifiques : provisionnement du bot d’alertes Matrix et gestion de la réplication Kanidm.

Crée ou rafraîchit le bot Matrix, le secret webhook et les salons d’alertes et d’incidents depuis la section network.matrix de config.yaml. Le compte du bot est créé sur l’hôte Matrix avec dnf-mas, par ssh.

Fenêtre de terminal
just configure-alert-bot

Envoie un message dans un salon d’alertes (warnings ou incidents), corps markdown sur l’entrée standard. Salons et jeton viennent du projet : l’appelant n’écrit que le texte. Codes de sortie : 10 rien de configuré, 11 message refusé par le serveur.

Fenêtre de terminal
just send-msg warnings < rapport.md

Collecte les certificats de réplication Kanidm de tous les nœuds du parc vers usr/secrets/replication/.

Fenêtre de terminal
just idm-sync-certs

Analyse la santé de la réplication Kanidm sans rien modifier. Prend le nœud supplier (HCS) et la liste des consumers (gateways, séparés par des virgules).

Fenêtre de terminal
just idm-fix-replica hcs agate,gw

À la racine d’un projet de co-développement. Les commandes git travaillent sur tous les dépôts du projet (par défaut src/*/, dnf, doc, et la racine). L’alias court de git est g.

Exécute n’importe quelle commande git sur un ou tous les projets.

Fenêtre de terminal
just git "log --oneline -5" # derniers commits de tous projets
just git "status" dnf # git status sur dnf/ seulement
just git "remote -v" # remotes de tous les projets

add -A + commit -m sur un ou tous les projets. Si le message est identique au dernier commit, la recette amende au lieu de créer un nouveau commit.

Sur tous les projets, la racine passe en dernier, après update-dnf : son commit épingle la révision de dnf/ qui vient d’être commitée.

Fenêtre de terminal
just commit "fix(net): update dns config"
just commit "fix(net): update dns config" dnf # dnf/ seulement

Ajoute les modifications en cours au dernier commit de chaque projet (--no-edit). Sur tous les projets, le verrou de la racine est ensuite réaligné sur dnf/.

Fenêtre de terminal
just amend

Affiche le statut git d’un ou tous les projets.

Fenêtre de terminal
just status

Affiche le diff git d’un ou tous les projets.

Fenêtre de terminal
just diff

Vérifie la présence d’une branche amont et de commits en avance avant de pousser.

Fenêtre de terminal
just push

Tire les dernières modifications d’un ou tous les projets.

Fenêtre de terminal
just pull

Affiche le dernier message de commit de tous les projets, formaté et aligné.

Fenêtre de terminal
just git-last-log

Affiche la liste des dépôts sur lesquels les commandes git itèrent.

Fenêtre de terminal
just git-show-repos

Construit le binaire du générateur (src/generator/).

Fenêtre de terminal
just gen-build

Lance les tests unitaires du générateur.

Fenêtre de terminal
just gen-test

Enchaîne clean → amend → apply-local test (ou apply-verbose <hôte>).

Fenêtre de terminal
just cat # teste en local
just cat myserver # applique sur myserver

Affiche la version, le dernier tag et la branche de chaque dépôt, puis la release du générateur épinglée par le framework.

Fenêtre de terminal
just versions

Publie tout l’écosystème (générateur, fleet-update, framework, documentation et modèles de projet) après les vérifications et les simulations. Voir Le train de release.

Fenêtre de terminal
just release

AliasCommandeContexte
aapply✳️
alapply-local✳️
avapply-verbose✳️
cclean💠
ddevelop💠
eenter✳️
ggit🔗
amendgit-amend🔗
commitgit-commit🔗
diffgit-diff🔗
pullgit-pull🔗
pushgit-push🔗
statusgit-status🔗
rdremote-desktop✳️