# 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 # cherche une ligne "inet /24" ``` Absente → forcer manuellement une fois : ```bash sudo systemctl start network-addresses-.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 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).