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>
520 lines
11 KiB
Markdown
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).
|