From 5e4d711b974c1c4ce6ddbbd68a405af6c42d57e3 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Fri, 28 Aug 2026 15:05:11 -0400 Subject: [PATCH] =?UTF-8?q?socle=20:=20la=20source=20d'artefacts=20d'amorc?= =?UTF-8?q?age=20=E2=80=94=20nourrir=20la=20premiere=20machine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LA PREMIERE MACHINE D'UN ECOSYSTEME N'A NI RESOLVEUR NI CACHE, ET C'EST ELLE QUI DOIT LES CONSTRUIRE. Mesure sur ops-01, premiere machine de la reconstruction de Chezlepro : le socle restait bloque sur son premier apt update. sortie Internet TCP 443 OK DNS UDP 53 -> 9.9.9.9 MUET Le DNS sortant est ferme PAR CONCEPTION — un tenant resout chez lui. Or apt vise deb.debian.org par son NOM, et le cache de l'ecosysteme n'existe pas encore. UN MANDATAIRE HTTP RESOUT CE QUE LE CLIENT NE PEUT PAS RESOUDRE : apt lui envoie l'URL absolue et c'est lui qui traduit. La machine n'a besoin d'aucun DNS, seulement d'une ADRESSE. Symetrique exacte de , meme place dans le socle. AUCUN FLUX A OUVRIR : accepte deja le 3142 depuis , qui resout les SUPERNETS des tenants — donc toute machine, pas seulement leur cache. Verifie depuis ops-01 : HTTP 200 en 0,158 s. C'EST DE LA FILIATION, PAS UNE RUSTINE. L'emprunt est declare (l'intrant nomme l'amont) et il s'efface : ecrit 00-setops-artefacts, qui trie APRES, donc gagne des que l'ecosysteme a sa source. Le plancher reste dessous, comme /etc/hosts reste sous le DNS. Le retirer le jour venu est une emancipation — un geste, pas un effet. DIAGNOSTIC CORRIGE EN CHEMIN : j'avais lu "BLOQUE" vers le resolveur, le cache et la PKI du tenant comme un pare-feu. C'etait une ABSENCE — ops-01 est la seule VM de Chezlepro qui existe. Un port muet ressemble a un refus. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on --- playbooks/groupes/serveur_debian.yml | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/playbooks/groupes/serveur_debian.yml b/playbooks/groupes/serveur_debian.yml index fa067a5..00cb249 100644 --- a/playbooks/groupes/serveur_debian.yml +++ b/playbooks/groupes/serveur_debian.yml @@ -27,6 +27,58 @@ # PASSAGE DE RELAIS : `client_resolveur` reprend ce fichier plus tard pour le basculer # vers `127.0.0.1`. La garde ci-dessous le respecte — sans elle, chaque déploiement # défairait la bascule, et deux rôles se disputeraient le même fichier sans fin. + # SOURCE D'ARTEFACTS D'AMORÇAGE, posée avant le premier `apt` — symétrique exacte du + # résolveur d'amorçage ci-dessous, et pour la même raison de fond : LA PREMIÈRE + # MACHINE D'UN ÉCOSYSTÈME N'A NI RÉSOLVEUR NI CACHE, ET C'EST ELLE QUI DOIT LES + # CONSTRUIRE. + # + # Mesuré le 2026-08-28 sur `ops-01`, première machine de la reconstruction de + # Chezlepro. Le socle restait bloqué sur son premier `apt update`, sans message qui + # parle de réseau : + # + # sortie Internet TCP 443 OK + # DNS UDP 53 -> 9.9.9.9 MUET + # + # Le DNS sortant est fermé PAR CONCEPTION — un tenant résout chez lui, son DNS ne + # traverse jamais la frontière. Or apt vise `deb.debian.org` PAR SON NOM, et le cache + # de l'écosystème n'existe pas encore. + # + # UN MANDATAIRE HTTP RÉSOUT CE QUE LE CLIENT NE PEUT PAS RÉSOUDRE : apt lui envoie + # l'URL absolue, et c'est LUI qui traduit le nom. La machine n'a donc besoin d'aucun + # DNS pour installer ses paquets — seulement d'une ADRESSE. + # + # C'EST DE LA FILIATION, PAS UNE RUSTINE (docs/filiation-emancipation.md). L'hébergeur + # nourrit la première machine de son locataire le temps que celui-ci monte son propre + # cache. L'emprunt est DÉCLARÉ — l'intrant nomme l'amont — et il s'efface de lui-même : + # `client_artefacts` écrit `00-setops-artefacts`, qui trie APRÈS ce fichier-ci, donc + # gagne dès que l'écosystème a sa propre source. Le plancher reste dessous, comme + # `/etc/hosts` reste sous le DNS. + # + # Aucun flux à ouvrir : `serveur_cache_site` accepte déjà le 3142 depuis + # `voisins_site`, qui résout les SUPERNETS des tenants — donc toute machine, pas + # seulement leur cache. Vérifié depuis `ops-01` : HTTP 200 en 0,158 s. + - name: Poser la source d'artefacts d'amorçage (avant tout apt) + ansible.builtin.copy: + dest: /etc/apt/apt.conf.d/00-setops-amorcage-artefacts + owner: root + group: root + mode: "0644" + content: | + // GÉNÉRÉ par Set-OPS (socle) — source d'artefacts d'AMORÇAGE, intrant + // `artefacts_amorcage`. Remplacé par `client_artefacts` (00-setops-artefacts, + // qui trie après) dès que l'écosystème a sa propre source. + // + // UNE ADRESSE, JAMAIS UN NOM : au moment où ce fichier sert, la machine n'a pas + // encore de résolveur, et le DNS sortant d'un tenant est fermé par conception. + Acquire::http::Proxy "http://{{ artefacts_amorcage }}"; + // `DIRECT` est obligatoire : apt fait HÉRITER la valeur HTTPS de la valeur HTTP + // quand elle n'est pas définie, et enverrait les dépôts tiers en HTTPS dans un + // cache qui refuse les tunnels (mesuré le 2026-08-23). + Acquire::https::Proxy "DIRECT"; + when: + - artefacts_amorcage is defined + - artefacts_amorcage | string | length > 0 + - name: Lire le résolveur en place ansible.builtin.slurp: src: /etc/resolv.conf