Files
Nixos_Fleet/README.md
T
DamienandClaude Sonnet 5 6a42052663 Simplification : fusion base.nix+desktop.nix+accounts.nix -> hosts/common/default.nix
Aucun changement fonctionnel, juste moins de fichiers à gérer côté
admin (structure inspirée de modules/anssi/ : un rôle clair par fichier,
mais un seul profil ici donc un seul fichier commun suffit).
hosts/usagers/configuration.nix importe désormais juste `../common`
(default.nix résolu automatiquement) + le layout disko.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 18:33:46 +02:00

520 lines
11 KiB
Markdown

# Nixos_Fleet
Déploiement en masse (PXE ou USB) du profil générique `usagers`.
Repo public. `git pull` sans mot de passe.
Ne contient aucune donnée des utilisateurs nommés. Ça, c'est dans [Nixos_Users](../nixos_users), repo privé séparé.
---
# Installer un paquet sans le mettre "en dur"
Pour tester un outil sans toucher à `configuration.nix`.
Un shell temporaire, le paquet disparaît en sortant :
```bash
nix-shell -p git
```
Équivalent flakes :
```bash
nix shell nixpkgs#git
```
Lancer un programme une seule fois, sans même ouvrir de shell :
```bash
nix run nixpkgs#git -- --version
```
Aucune de ces méthodes ne survit à un reboot ni à un `nixos-rebuild`. Pour que ça reste en permanence, ajouter le paquet dans `environment.systemPackages` d'un `configuration.nix` puis `sudo nixos-rebuild switch`.
---
# Installer un PC
Une étape à la fois. Ne saute pas d'étape.
## Étape 1 — Brancher
Branche le câble réseau.
Branche le PC au secteur.
Allume le PC.
## Étape 2 — Menu de démarrage
Appuie plusieurs fois sur une touche dès l'allumage.
Dell → F12
HP → F9
Lenovo → F12
Choisis : Network Boot.
## Étape 3 — Attendre
Un écran noir avec du texte apparaît seul.
Attends.
## Étape 4 — Choisir un cas
Il y a deux cas. Choisis-en un seul.
PC normal → va à l'étape 4A.
PC pour thomas, clara, jade ou oreo → va à l'étape 4B.
## Étape 4A — PC normal
Tape : `1`
Appuie sur Entrée.
N'appuie plus sur rien.
Attends la fin (plusieurs minutes).
Va à l'étape 5.
## Étape 4B — PC pour une personne
Tape : `2`
Appuie sur Entrée.
Tape le prénom (thomas, clara, jade ou oreo).
Appuie sur Entrée.
Une question sur le chiffrement apparaît.
Pas sûr → appuie juste sur Entrée.
Tape le token (donné à part, pas dans ce guide).
Appuie sur Entrée.
Si une passphrase est demandée :
Tape-la.
Note-la sur papier tout de suite.
Attends la fin (plusieurs minutes).
Va à l'étape 5.
## Étape 5 — Redémarrage
Le PC redémarre seul.
N'y touche pas.
## Étape 6 — Connexion
PC normal :
Utilisateur : `usagers`
Mot de passe : `nixos`
PC pour une personne :
Utilisateur : le prénom tapé à l'étape 4B
Mot de passe : `nixos`
Un nouveau mot de passe est demandé tout de suite. Le choisir maintenant.
## Étape 7 — Vérifier
Le bureau s'affiche.
Firefox s'ouvre.
Le son fonctionne.
Tout est bon → le PC est prêt.
## Si ça bloque
N'insiste pas seul.
Préviens le référent technique.
---
# Installer le serveur PXE
Une étape à la fois.
## Étape 1 — Installer NixOS
ISO : https://nixos.org/download
Partitionnement normal.
Définir un mot de passe root.
## Étape 2 — Cloner le repo
```bash
nix-shell -p git
git clone https://gitea.miniclic.net/Damien/Nixos_Fleet.git /etc/nixos-fleet
cd /etc/nixos-fleet
```
## Étape 3 — Générer le fichier matériel
```bash
sudo nixos-generate-config
```
Écrit `/etc/nixos/hardware-configuration.nix` — en dehors du repo, rien à ajouter/committer.
## Étape 4 — Éditer 3 valeurs
Fichier : `pxe-server/configuration.nix`
`interface` → sortie de `ip a`
`serverIp` → IP fixe du serveur
`standaloneDhcp` → laisser `false` si le réseau a déjà un DHCP
```bash
$EDITOR pxe-server/configuration.nix
```
## Étape 5 — Construire
```bash
sudo nixos-rebuild switch --flake .#pxe-server --impure
```
`--impure` : nécessaire pour lire `/etc/nixos/hardware-configuration.nix`, hors du repo.
## Étape 6 — Publier l'image
```bash
sudo systemctl start pxe-publish
sudo systemctl status pxe-publish
```
Doit finir en "success". Première fois : plusieurs minutes.
## Étape 7 — Vérifier
```bash
sudo systemctl status dnsmasq caddy
ls /var/lib/tftpboot
ls /var/www/pxe
curl -I http://192.168.1.10/netboot.ipxe # remplacer par le vrai serverIp
```
Tout doit répondre sans erreur.
Si `curl` reste bloqué : l'IP statique de l'interface PXE ne s'est peut-être pas appliquée toute seule au premier `switch` (connu, arrive parfois sur une install neuve). Vérifier :
```bash
ip a show <interface> # cherche une ligne "inet <serverIp>/24"
```
Absente → forcer manuellement une fois :
```bash
sudo systemctl start network-addresses-<interface>.service
```
Un reboot du serveur applique aussi ça correctement au démarrage suivant.
## Étape 8 — Tester sur 1 PC
Démarrer un seul PC en PXE.
Vérifier qu'il arrive sur l'écran de choix.
Si le parc a du BIOS et de l'UEFI, tester les deux.
Ne pas lancer 20 PC avant que cette étape fonctionne.
## Après l'installation
Noter l'IP du serveur quelque part accessible à l'équipe.
Vérifier que `pxe-publish.timer` est actif :
```bash
systemctl is-enabled pxe-publish.timer
```
Ce serveur n'a rien à sauvegarder à part le repo git.
## Entretien
Récupérer les derniers changements, et vérifier qu'ils sont bien là avant de rebuild :
```bash
git pull
git log --oneline -3
```
Le dernier commit affiché doit correspondre à ce que tu attends. S'il manque, le `pull` n'a rien ramené de neuf — inutile de rebuild avant de comprendre pourquoi (mauvaise branche, push pas fait côté dev, etc.).
Republier l'image après une modif de `installer/` :
```bash
sudo systemctl start pxe-publish
```
Appliquer une modif de `pxe-server/configuration.nix` :
```bash
sudo nixos-rebuild switch --flake .#pxe-server --impure
```
Voir les logs DHCP/TFTP :
```bash
journalctl -u dnsmasq -f
```
Voir les logs HTTP :
```bash
journalctl -u caddy -f
```
## Si ça bloque
Un fix censé être appliqué ne change rien → vérifier `git log --oneline -3` avant toute autre piste (le pull n'a peut-être rien ramené).
Écran PXE ne trouve rien → revérifier `serverIp` et `interface`.
Boucle infinie au démarrage → regarder `journalctl -u dnsmasq` pendant un boot.
UEFI ou BIOS ne boote pas → vérifier les deux fichiers dans `/var/lib/tftpboot`.
IP qui changent tout le temps → un autre DHCP tourne déjà, repasser `standaloneDhcp` à `false`.
---
# Référence
## Contenu du repo
`hosts/usagers/` → le seul profil du repo. Jamais chiffré.
`diskos/plain.nix` → layout disko (disque `main`, GPT+ESP+btrfs).
`installer/` → l'image d'installation, PXE et USB. Même image pour tous les cas.
`pxe-server/` → le serveur PXE (dnsmasq + Caddy).
## Pourquoi deux repos
Une machine de la flotte pull uniquement ce repo.
Les comptes thomas/clara/jade/oreo vivent dans un autre repo, privé.
La flotte ne voit jamais ce second repo.
## Graver la clé USB
Marche sans le serveur PXE. Utile pour tester avant de monter le PXE, ou en secours.
NixOS permet nativement de fabriquer une image d'installation sur mesure : un ISO avec nos propres paquets et notre propre script (`install.sh`) qui se lance seul au démarrage. C'est une fonctionnalité standard de NixOS, pas un bricolage — `installer/iso.nix` dans ce repo est la définition de cette image.
C'est le même ISO pour la flotte et les postes nommés — pas deux images différentes. Le choix se fait à l'écran au démarrage (`1) flotte` / `2) poste nommé`), pas au moment de la gravure.
Le fichier `.iso` n'existe pas tant qu'on ne l'a pas construit :
```bash
nix build .#nixosConfigurations.installer-iso.config.system.build.isoImage
```
Repérer la clé USB avant de graver — bien vérifier le chemin, pas ton disque système :
```bash
lsblk
```
```bash
sudo dd if=result/iso/*.iso of=/dev/sdX bs=4M status=progress conv=fsync
```
Vérifier `/dev/sdX` avant de lancer `dd`.
## Mises à jour de la flotte
Chaque PC tire ses mises à jour directement depuis ce repo, tous les jours.
Pas de `git pull` manuel sur les PC. Juste `git push` ici.
## Avant la première vague de 100 PC
Rien de ce repo n'a été testé sur du vrai matériel.
À vérifier avant de lancer 100 PC :
Détection du disque, sur une machine à 2 disques internes.
Comportement du proxyDHCP, face au routeur réel.
Boot BIOS et boot UEFI, sur le parc réel.
Test sur 1-2 PC réels d'abord.
PC à seulement 4 Go de RAM : le zram (`installer-base.nix`) doit suffire pour installer `usagers` (Cinnamon + Firefox + LibreOffice + VLC), mais pas testé en dessous de 12 Go pour l'instant. Si ça échoue encore sur du 4 Go réel : alléger la liste de paquets de `usagers` plutôt que d'insister sur le zram seul.
```bash
nix flake check
nix build .#nixosConfigurations.usagers.config.system.build.toplevel
nix build .#nixosConfigurations.installer-iso
```
## Connexion Wi-Fi
Pour un PC sans câble réseau (après l'installation, ou en dépannage).
### Option 1 — NetworkManager
Déjà actif par défaut dans ce repo (`hosts/common/default.nix`). Rien à ajouter dans `configuration.nix`.
```nix
networking.networkmanager.enable = true;
```
Commandes :
```bash
nmcli device wifi list
nmcli device wifi connect "SSID" password "MOTDEPASSE"
nmcli connection show
nmcli radio wifi on
```
### Option 2 — iwd
Alternative non nécessaire. Plus léger que NetworkManager, mais NetworkManager est déjà en place et suffit — à utiliser seulement si une raison précise l'impose.
`configuration.nix` :
```nix
networking.wireless.iwd.enable = true;
```
Commandes :
```bash
iwctl station wlan0 scan
iwctl station wlan0 get-networks
iwctl station wlan0 connect "SSID"
iwctl station wlan0 show
```
Aucun paquet à installer manuellement : `enable = true` suffit dans les deux cas.
Après édition :
```bash
sudo nixos-rebuild switch --flake .#usagers
```
---
# Travailler avec Git
## Cloner (première fois)
```bash
git clone https://gitea.miniclic.net/Damien/Nixos_Fleet.git
cd Nixos_Fleet
```
## Avant de modifier
```bash
git pull
```
Toujours, avant de commencer à éditer.
## Modifier et envoyer
```bash
git add -A
git commit -m "description courte"
git push
```
## Si le push est refusé
Quelqu'un a poussé avant toi.
```bash
git pull
```
Résoudre les conflits s'il y en a (voir plus bas).
Puis repousser :
```bash
git push
```
## Travailler à plusieurs
Un repo, plusieurs personnes : risque d'écraser le travail des autres.
Règle : une branche par changement.
```bash
git checkout -b mon-changement
```
Modifier. Commit. Push la branche :
```bash
git push -u origin mon-changement
```
Ouvrir une Pull Request sur Gitea.
Quelqu'un relit, merge depuis l'interface Gitea.
Jamais de push direct sur `main` à plusieurs.
## Si un conflit apparaît
Git l'annonce avec `CONFLICT` dans le message.
Ouvrir le(s) fichier(s) listé(s).
Chercher les marqueurs `<<<<<<<`, `=======`, `>>>>>>>`.
Choisir quelle version garder.
Supprimer les marqueurs.
```bash
git add <fichier>
git commit
git push
```
## Ce workflow git ne concerne que les développeurs
Les PC de la flotte ne font jamais `git pull`.
Ils tirent les mises à jour directement depuis l'URL git (voir plus haut).