AGENTS.md : ajoute le chemin ISO USB et les sources officielles
L'agent doit pouvoir se concentrer soit sur l'ISO soit sur le serveur PXE -- ajoute la section ISO (meme flake, meme install.sh, sans dnsmasq/caddy a operer) avec la regle dd explicite (irreversible, confirmation humaine obligatoire sur /dev/sdX). Ajoute aussi une section Sources (nixos manual, search.nixos.org, code source nixpkgs pour iso-image.nix/netboot.nix, wiki.nixos.org, disko, home-manager, ipxe, dnsmasq, caddy, systemd.timer, policies Firefox) pour que l'agent verifie au lieu de deviner quand il bute sur un mecanisme qu'il ne connait pas. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# AGENTS.md — contexte pour agent (Hermes et autres)
|
# AGENTS.md — contexte pour agent (Hermes et autres)
|
||||||
|
|
||||||
Ce fichier s'adresse à un agent (Hermes ou tout autre harness compatible AGENTS.md) chargé du **dépannage, de l'installation et de la gestion du serveur PXE** de ce repo. Le [README.md](README.md) reste la référence humaine (technicien qui installe des PC un par un) ; ce fichier-ci est pour l'agent qui opère le serveur.
|
Ce fichier s'adresse à un agent (Hermes ou tout autre harness compatible AGENTS.md) chargé de produire le média d'installation de la flotte, **soit la création de l'ISO USB, soit la gestion du serveur PXE** -- les deux couvrent le même besoin (fournir l'installeur à un PC), pas à la fois sur la même tâche sauf demande explicite. Le [README.md](README.md) reste la référence humaine (technicien qui installe des PC un par un) ; ce fichier-ci est pour l'agent.
|
||||||
|
|
||||||
Repo public, sans authentification, jamais chiffré. Ne contient aucune donnée nominative (voir [Nixos_Users](../nixos_users), repo privé séparé, hors périmètre de cet agent sauf mention contraire de l'opérateur humain).
|
Repo public, sans authentification, jamais chiffré. Ne contient aucune donnée nominative (voir [Nixos_Users](../nixos_users), repo privé séparé, hors périmètre de cet agent sauf mention contraire de l'opérateur humain).
|
||||||
|
|
||||||
@@ -10,6 +10,7 @@ Repo public, sans authentification, jamais chiffré. Ne contient aucune donnée
|
|||||||
- **Vérifier `hostname && pwd`** avant toute commande sur une machine distante (SSH) -- ce repo gère plusieurs hosts (`pxe-server`, les PC installés) qui ne doivent pas être confondus.
|
- **Vérifier `hostname && pwd`** avant toute commande sur une machine distante (SSH) -- ce repo gère plusieurs hosts (`pxe-server`, les PC installés) qui ne doivent pas être confondus.
|
||||||
- **Ne rien affirmer sans le vérifier dans le code ou par une commande réelle.** Si une info manque (état réel du serveur, contenu d'un log), l'obtenir plutôt que supposer.
|
- **Ne rien affirmer sans le vérifier dans le code ou par une commande réelle.** Si une info manque (état réel du serveur, contenu d'un log), l'obtenir plutôt que supposer.
|
||||||
- **Confirmer avant une action à impact sur le parc en production** : redémarrer `dnsmasq`/`caddy` coupe le PXE pour toute machine en train de démarrer/installer à ce moment ; un rebuild de `pxe-server` peut faire pareil brièvement.
|
- **Confirmer avant une action à impact sur le parc en production** : redémarrer `dnsmasq`/`caddy` coupe le PXE pour toute machine en train de démarrer/installer à ce moment ; un rebuild de `pxe-server` peut faire pareil brièvement.
|
||||||
|
- **`dd` est irréversible.** Avant tout `dd if=... of=/dev/sdX`, faire confirmer par l'opérateur humain le chemin exact (`lsblk` d'abord, toujours) -- une mauvaise lettre écrase silencieusement un disque, système ou données, sans avertissement. Ne jamais deviner `/dev/sdX` à partir d'une supposition ("probablement la clé").
|
||||||
- Commits : `Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>` en pied de message (adapter le nom de modèle si l'agent qui commit n'est pas Claude).
|
- Commits : `Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>` en pied de message (adapter le nom de modèle si l'agent qui commit n'est pas Claude).
|
||||||
|
|
||||||
## Ce que sert le serveur PXE
|
## Ce que sert le serveur PXE
|
||||||
@@ -30,6 +31,20 @@ Architecture ([pxe-server/configuration.nix](pxe-server/configuration.nix)) :
|
|||||||
- `standaloneDhcp` : `true` si ce serveur doit être l'unique DHCP du segment PXE ; `false` pour proxyDHCP seul (coexiste avec un DHCP existant -- cas le plus probable).
|
- `standaloneDhcp` : `true` si ce serveur doit être l'unique DHCP du segment PXE ; `false` pour proxyDHCP seul (coexiste avec un DHCP existant -- cas le plus probable).
|
||||||
- `internetInterface` : seulement utilisée si `standaloneDhcp = true` (sortie NAT du segment PXE vers Internet).
|
- `internetInterface` : seulement utilisée si `standaloneDhcp = true` (sortie NAT du segment PXE vers Internet).
|
||||||
|
|
||||||
|
## Alternative : créer l'ISO USB (sans serveur PXE)
|
||||||
|
|
||||||
|
Même flake, même `install.sh`, pas de dnsmasq/Caddy à opérer -- juste un fichier `.iso` à graver. Utile en secours ou pour tester sans monter tout le PXE. Un seul ISO pour la flotte ET les postes nommés : le choix (`1) flotte` / `2) poste nommé`) se fait à l'écran de démarrage, pas à la gravure.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix build .#nixosConfigurations.installer-iso.config.system.build.isoImage
|
||||||
|
lsblk # identifier la clé USB, PAS le disque système
|
||||||
|
sudo dd if=result/iso/*.iso of=/dev/sdX bs=4M status=progress conv=fsync
|
||||||
|
```
|
||||||
|
|
||||||
|
`/dev/sdX` doit être confirmé par l'opérateur humain avant d'exécuter le `dd` (voir règle plus haut) -- ce n'est pas négociable, une erreur ici écrase un disque en silence.
|
||||||
|
|
||||||
|
Définition de l'image : [installer/iso.nix](installer/iso.nix). Attribut de flake : `nixosConfigurations.installer-iso`.
|
||||||
|
|
||||||
## Installer le serveur PXE (depuis zéro)
|
## Installer le serveur PXE (depuis zéro)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -130,3 +145,24 @@ nix build .#nixosConfigurations.nixos.config.system.build.toplevel --dry-run
|
|||||||
```
|
```
|
||||||
|
|
||||||
Environnement de dev sans accès à un vrai serveur PXE : voir "Environnement de dev sous Windows (WSL + Nix)" dans le [README.md](README.md) -- `pxe-server` ne s'évalue qu'avec `--impure` **sur la machine réelle**, c'est normal ailleurs.
|
Environnement de dev sans accès à un vrai serveur PXE : voir "Environnement de dev sous Windows (WSL + Nix)" dans le [README.md](README.md) -- `pxe-server` ne s'évalue qu'avec `--impure` **sur la machine réelle**, c'est normal ailleurs.
|
||||||
|
|
||||||
|
## Sources -- pour vérifier au lieu de deviner
|
||||||
|
|
||||||
|
En cas de doute sur le comportement réel d'une option ou d'un mécanisme, chercher ici avant de supposer :
|
||||||
|
|
||||||
|
- NixOS manual : https://nixos.org/manual/nixos/stable/
|
||||||
|
- Recherche d'options NixOS (n'importe quel module : `services.dnsmasq`, `services.caddy`, `system.autoUpgrade`, `programs.firefox`...) : https://search.nixos.org/options
|
||||||
|
- Recherche de paquets nixpkgs : https://search.nixos.org/packages
|
||||||
|
- Code source nixpkgs (la vérité de dernier recours sur le comportement réel d'un module) : https://github.com/NixOS/nixpkgs
|
||||||
|
- Module image ISO (`installer-iso`) : https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/cd-dvd/iso-image.nix
|
||||||
|
- Module image netboot (`installer-netboot`) : https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/netboot/netboot.nix
|
||||||
|
- NixOS Wiki (officiel, `wiki.nixos.org` -- pas `nixos.wiki`, non-officiel et moins à jour) :
|
||||||
|
- Netboot : https://wiki.nixos.org/wiki/Netboot
|
||||||
|
- Creating a NixOS live CD : https://wiki.nixos.org/wiki/Creating_a_NixOS_live_CD
|
||||||
|
- disko (partitionnement déclaratif) : https://github.com/nix-community/disko -- Quickstart : https://github.com/nix-community/disko/blob/master/docs/quickstart.md -- Référence : https://github.com/nix-community/disko/blob/master/docs/reference.md
|
||||||
|
- home-manager : https://home-manager.dev/manual/
|
||||||
|
- iPXE (premier étage du boot réseau, `undionly.kpxe`/`ipxe.efi`) : https://ipxe.org/
|
||||||
|
- dnsmasq (DHCP/TFTP) : https://thekelleys.org.uk/dnsmasq/doc.html
|
||||||
|
- Caddy (serveur HTTP) : https://caddyserver.com/docs/
|
||||||
|
- systemd.timer (`pxe-publish.timer`) : https://www.freedesktop.org/software/systemd/man/systemd.timer.html
|
||||||
|
- Policies Firefox (`RequestedLocales`, `FirefoxHome`...) : https://firefox-admin-docs.mozilla.org/reference/policies/
|
||||||
|
|||||||
Reference in New Issue
Block a user