No description
Find a file
Daniel Allaire 33ca12d2db voute : vingt secrets fabriques, et deux qui restent a toi
`ansible-vault` chiffre avec la cle de voute de l'exploitant — le mot de passe n'a jamais
transite, seul son chemin. Les valeurs sont tirees au hasard (40 caracteres) et n'ont ete
affichees nulle part. La voute est ignoree par git : seul le gabarit est versionne.

CAS PARTICULIER, `vault_backup_ssh_privkey` : une VRAIE paire de cles ed25519 a ete
generee. La privee est en voute ; la PUBLIQUE est dans cle-publique-sauvegarde.txt, a
poser sur le depot restic le jour venu. Une cle publique n'est pas un secret.

DEUX SECRETS MANQUENT DELIBEREMENT — `proxmox_api_token_id` et `_secret`. Ils
n'ont pas le prefixe `vault_` et echappaient au reperage : le gabarit les nomme
desormais. Ils doivent etre CREES DANS PROXMOX, propres a patient 0 (Datacenter >
Permissions > API Tokens). Recopier le jeton d'un autre tenant leur donnerait la meme
clef, et on ne pourrait plus en revoquer un sans revoquer l'autre.

P18 refuse donc encore patient 0, et c'est le comportement voulu : la preuve attend une
action humaine, elle ne l'invente pas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 13:00:30 -04:00
inventories/production voute : vingt secrets fabriques, et deux qui restent a toi 2026-08-21 13:00:30 -04:00
plan federe : patient 0 entre dans la politique du site 2026-08-20 21:15:43 -04:00
.gitignore patient 0 : le plan de l'ecosysteme dont les autres descendront 2026-08-20 20:51:00 -04:00
cle-publique-sauvegarde.txt voute : vingt secrets fabriques, et deux qui restent a toi 2026-08-21 13:00:30 -04:00
parente.yml parente : patient 0 sait de quel moteur il descend 2026-08-21 12:56:41 -04:00
README.md patient 0 : le plan de l'ecosysteme dont les autres descendront 2026-08-20 20:51:00 -04:00

OPS-Patient0 — l'écosystème d'origine

Pour qui : l'exploitant de la lignée. Ce dépôt est le plan d'un écosystème Set-OPS comme les autres — mais de celui dont les autres descendent.

Ce qu'il est

Patient 0 est le plus petit écosystème complet : PKI, DNS, edge, courriel, PostgreSQL, et une forge. Six machines. Sa raison d'être tient en une phrase :

porter les dépôts qui fabriquent les écosystèmes, et les servir à ses enfants.

Aujourd'hui, ce rôle est tenu par eregion.chezlepro.ca — une machine hors flotte, montée à la main, que Set-OPS ne déploie pas, ne sauvegarde pas et ne prouve pas. Tout ce qui fabrique Chezlepro dépend d'elle. Patient 0 la remplace par un écosystème bâti par le moteur, sauvegardé par le moteur, vérifié par le harnais. On ne déplace pas le point unique de défaillance : on l'élimine.

La boucle, et comment elle se casse

Pour rebâtir patient 0, il faut le dépôt du moteur — qui vit sur patient 0. On n'échappe pas à ça par la ruse, mais par le nombre. Le génome doit exister en au moins trois endroits vivants, sans coordination :

patient 0 (la forge mère)  ·  le poste de l'exploitant  ·  restic hors cluster
        + chaque écosystème enfant, qui en porte un miroir

N'importe quel survivant réamorce les autres. Une famille, pas un maître.

Ce que ce dépôt contient, et ce qu'il ne contiendra jamais

plan/ les six machines, leurs zones, leurs applications
inventories/production/group_vars/ les intrants, le placement Proxmox, le gabarit de voûte
inventories/production/hosts.yml généré depuis le plan — ne jamais l'éditer à la main
le mot de passe de la voûte jamais. Ni ici, ni dans aucun dépôt : c'est le seul objet que la reproduction exige d'un humain

Deux réglages à connaître

index: 29 — tout l'adressage en dérive (10.29.0.0/16, VLAN 1291-1296). Choisi libre : 13 est le lab, 17 Chezlepro, 23 Technolibre. Les index bas (1, 11) ont déjà forcé deux renumérotages, ils tombaient dans des plages occupées par du matériel.

federe: false — patient 0 est exclu des devis du site tant qu'il n'est pas matérialisé : ni la frontière, ni le SDN, ni le pare-feu de l'hyperviseur ne lui réservent quoi que ce soit. C'est délibéré et temporaire. À basculer à true le jour où on le déploie, avant make sdn-appliquer — sinon ses zones n'existeront nulle part.

Ce qui reste à faire avant de le matérialiser

  • Décider où il vit. Sur asgard, la perte du cluster emporte patient 0 et Chezlepro d'un coup. Ailleurs, la famille survit à la perte du cluster. Le déménagement tient en quatre valeurs (group_vars/proxmox.yml) et un symlink.
  • Créer la voûte réelle : ansible-vault create inventories/production/group_vars/all/vault.yml, en couvrant les noms du gabarit (vault.yml.example).
  • Basculer federe: true, puis make instanciermake instancier-appliquer.
  • make placement-plan — confronter les quatre valeurs au cluster avant de cloner quoi que ce soit : quarante minutes de déploiement ne se rattrapent pas.
  • Déployer, puis y pousser les quatre dépôts du génome (moteur, instances, hébergeur, modèles) et inscrire la parenté de chacun.