diff --git a/CHANGELOG-v1.9.0.md b/CHANGELOG-v1.9.0.md new file mode 100644 index 0000000..edb72cd --- /dev/null +++ b/CHANGELOG-v1.9.0.md @@ -0,0 +1,36 @@ +# v1.9.0 - Provisionnement modulaire + +Cette version transforme la v1.8.7 validée en configuration multi-postes / multi-utilisateurs. + +## Principes + +- Le moteur de provisionnement reste commun à tous les postes. +- Une fiche dans `users/` décrit l'identité de l'utilisateur à préparer. +- Une fiche dans `hosts/` associe un poste à une fiche utilisateur. +- `configuration.nix` contient uniquement la configuration commune. +- `flake.nix` expose une configuration NixOS par poste. +- La configuration matérielle reste locale dans `/etc/nixos/hardware-configuration.nix` et n'est pas placée dans le dépôt. + +## Exemples fournis + +- `bureautix-01` -> `alice` +- `bureautix-02` -> `bob` +- `bureautix-03` -> `mike` + +## Non-régression + +La logique validée en v1.8.7 n'est pas modifiée : + +- création systemd-homed ; +- espace personnel LUKS2 ; +- changement du mot de passe ; +- création du PIN YubiKey ; +- association FIDO2 ; +- affichage SDDM ; +- assistant de première connexion. + +## Flakes + +Le dépôt utilise `nixpkgs` sur la branche `nixos-26.05`. Le fichier `flake.lock` doit être généré une première fois sur une machine disposant de Nix puis ajouté au dépôt afin de figer précisément la révision utilisée. + +Comme `hardware-configuration.nix` reste volontairement hors du dépôt, les commandes Flake doivent actuellement être lancées avec `--impure`. diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 21afd30..ecfc180 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,32 +1,87 @@ -# Déploiement v1.8 LAB +# Déploiement v1.9.0 -La procédure de référence est décrite dans `PROVISIONING-v1.8-LAB.md`. +## Choisir le poste, pas l'utilisateur -## Commande de déploiement +Le déploiement sélectionne uniquement une fiche de poste. Cette fiche détermine elle-même l'utilisateur à préparer. -Depuis `localadm` : - -```bash -cd ~/nixos-workstations -sudo nixos-rebuild switch -I nixos-config="$PWD/configuration.nix" +```text +bureautix-01 -> alice +bureautix-02 -> bob +bureautix-03 -> mike ``` -Cette activation : +Il ne faut donc jamais fournir séparément un nom de poste et un nom d'utilisateur à la commande de build. -1. installe/configure le poste ; -2. active `systemd-homed` ; -3. précrée `alice` si elle n'existe pas ; -4. crée `/home/alice.home` en LUKS2 avec le mot de passe temporaire LAB ; -5. lance SDDM avec le support d'énumération des comptes homed. +## Premier test de non-régression -Aucune action `homectl` manuelle n'est demandée à `localadm`. +Sur le poste de LAB déjà validé pour Alice : -## Première session +```bash +sudo nixos-rebuild build \ + -I nixos-config=/home/localadm/nixos-workstations/hosts/bureautix-01.nix +``` -Alice se connecte avec le mot de passe temporaire et l'assistant finalise automatiquement : +Puis : -- mot de passe personnel ; -- PIN d'une YubiKey vierge ; -- enrôlement FIDO2 dans `systemd-homed`. +```bash +sudo nixos-rebuild switch \ + -I nixos-config=/home/localadm/nixos-workstations/hosts/bureautix-01.nix +``` -Aucune recovery key n'est créée à ce stade. +Le compte existant doit être détecté et laissé intact par le service de pré-provisionnement. + +## Passage aux flakes + +Après cette première activation : + +```bash +cd /home/localadm/nixos-workstations +nix flake lock +``` + +Puis tester : + +```bash +sudo nixos-rebuild build --impure --flake .#bureautix-01 +``` + +Si ce build est correct : + +```bash +sudo nixos-rebuild switch --impure --flake .#bureautix-01 +``` + +`--impure` est requis parce que la configuration matérielle reste dans `/etc/nixos/hardware-configuration.nix` et n'est pas intégrée au dépôt. + +## Nouveau poste pour Bob + +Sur un poste neuf destiné à Bob : + +```bash +sudo nixos-rebuild build --impure --flake .#bureautix-02 +``` + +Puis : + +```bash +sudo nixos-rebuild switch --impure --flake .#bureautix-02 +``` + +La fiche `hosts/bureautix-02.nix` sélectionne automatiquement `users/bob.nix`. + +## Nouveau poste pour Mike + +Même principe : + +```bash +sudo nixos-rebuild switch --impure --flake .#bureautix-03 +``` + +## Nouveau couple poste / utilisateur + +Pour une nouvelle personne : + +1. créer sa fiche dans `users/` ; +2. créer la fiche du nouveau poste dans `hosts/` ; +3. ajouter le poste dans `flake.nix` ; +4. lancer le build en sélectionnant uniquement le poste. diff --git a/configuration.nix b/configuration.nix index 87d736c..c17038e 100644 --- a/configuration.nix +++ b/configuration.nix @@ -2,34 +2,34 @@ { imports = [ + # Le matériel reste propre à la machine et n'est pas stocké dans le dépôt. + # Avec un build Flake, utiliser --impure afin d'autoriser cet import local. /etc/nixos/hardware-configuration.nix + ./modules/software.nix ./modules/users.nix ./modules/homed.nix ./modules/security.nix ./modules/workstation-setup.nix + ./modules/provisioning.nix ]; - # Pré-provisionnement automatique : le rebuild crée Alice avec systemd-homed - # et un home LUKS2. L'assistant se lance ensuite à sa première session. - nixosWorkstations.homedUser = { - enable = true; - user = "alice"; - realName = "Alice"; - initialPassword = "LaboTest@1980"; - diskSize = "10G"; - }; + # Les flakes utilisent encore les fonctionnalités expérimentales du client Nix. + nix.settings.experimental-features = [ "nix-command" "flakes" ]; - nixosWorkstations.workstationSetup = { - enable = true; - user = "alice"; - }; + # Cette configuration est volontairement commune. Elle doit toujours être + # appelée par une fiche de poste qui choisit explicitement un utilisateur. + assertions = [ + { + assertion = config.nixosWorkstations.provisioning.enable; + message = "Sélectionnez une fiche dans hosts/ au lieu de construire configuration.nix directement."; + } + ]; # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - networking.hostName = "bureautix-01"; networking.networkmanager.enable = true; time.timeZone = "Europe/Paris"; diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d1b18b9 --- /dev/null +++ b/flake.nix @@ -0,0 +1,24 @@ +{ + description = "NixOS Workstations - provisionnement modulaire"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; + }; + + outputs = { nixpkgs, ... }: + let + system = "x86_64-linux"; + mkWorkstation = hostModule: + nixpkgs.lib.nixosSystem { + inherit system; + modules = [ hostModule ]; + }; + in + { + nixosConfigurations = { + bureautix-01 = mkWorkstation ./hosts/bureautix-01.nix; + bureautix-02 = mkWorkstation ./hosts/bureautix-02.nix; + bureautix-03 = mkWorkstation ./hosts/bureautix-03.nix; + }; + }; +}