docs: procédures de bootstrap et miroir du dépôt (dépendance circulaire) #29

Closed
opened 2026-08-01 07:51:20 +00:00 by Damien · 0 comments
Owner

Contexte

Dépendance circulaire identifiée avant le rebuild complet : les scripts se téléchargent depuis Gitea, qui est précisément ce qu'on reconstruit. Le proxy a le même problème, puisque c'est lui qui route gitea.arnodo.fr.

Le mécanisme exact, vérifié dans le code : exec_in_lxc() fait le curl sur l'hôte Proxmox puis pousse le script dans le LXC via le tuyau — ça, ça passe. Mais une fois à l'intérieur, le script recharge lib/common.sh tout seul :

LIB_COMMON_URL="$(dirname "$(dirname "$SCRIPT_URL")")/lib/common.sh"
source <(curl -fsSL "$LIB_COMMON_URL")

Lancé via bash -s, il n'a pas de fichier sur disque et tombe toujours dans la branche curl. Un simple git clone sur pve01 ne suffit donc pas : le conteneur ira quand même taper sur un Gitea mort.

La porte de sortie est déjà dans le code — LIB_COMMON_URL dérive de SCRIPT_URL par deux dirname. Surcharger SCRIPT_URL suffit, sans modification.

Décisions retenues

  • Pas de pct push : le contournement par SCRIPT_URL est jugé suffisant. Cette issue est purement documentaire.
  • Miroir git clone --mirror sur pve01 comme filet permanent.
  • Tailscale installé manuellement avant de lancer les scripts — condition forte, à documenter comme prérequis explicite. Sur pve01 c'est déjà le cas.
  • Gitea est sauvegardé chaque nuit ; une restauration reste possible en cas de problème.

1. Miroir sur pve01

Documenter la mise en place, à faire pendant que Gitea est vivant :

git clone --mirror https://gitea.arnodo.fr/Damien/infra-scripts.git /root/infra-scripts.git

Rafraîchissement quotidien par cron :

0 3 * * * git -C /root/infra-scripts.git remote update --prune

Procédure de reprise :

git clone /root/infra-scripts.git /root/infra-scripts
cd /root/infra-scripts && python3 -m http.server 8000 &

2. Bootstrap du proxy

Prérequis : Tailscale installé et authentifié manuellement sur la machine du proxy avant de lancer le script. Le script réinstallera Tailscale — idempotent, sans effet.

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Une fois sur le tailnet, MagicDNS résout et la dérivation fonctionne :

export SCRIPT_URL="https://gitea.taila5ad8.ts.net/Damien/infra-scripts/raw/branch/main/proxy/install.sh"
bash -c "$(curl -fsSL $SCRIPT_URL)"

Documenter que tous les échanges passent par le tailnet — c'est une condition forte, pas une commodité.

3. Bootstrap de Gitea

Serveur HTTP temporaire sur le poste de travail :

cd ~/infra-scripts
uv run --no-project python -m http.server 8000

Puis depuis pve01 :

export SCRIPT_URL="http://<ip-lan-du-mac>:8000/gitea/install.sh"
bash -c "$(curl -fsSL $SCRIPT_URL)"

Piège à documenter explicitement : utiliser l'IP LAN du poste, pas son nom tailnet. Le LXC fraîchement créé est en DHCP sur vmbr0 et télécharge lib/common.sh tout en haut du script, bien avant la ligne qui installe Tailscale. À cet instant il n'a que le LAN.

Mentionner aussi le pare-feu macOS, qui demandera l'autorisation d'accepter les connexions entrantes pour Python.

4. README racine

Ajouter à la section Philosophy le principe qui sous-tend tout ce qui précède :

Le dépôt qui reconstruit l'infrastructure ne doit pas dépendre de cette infrastructure.

Et une section « Bootstrap / reprise après sinistre » renvoyant vers les README de service.

Fichiers touchés

  • README.md racine — principe + section bootstrap + mise en place du miroir
  • proxy/README.md — prérequis Tailscale, override SCRIPT_URL via tailnet
  • gitea/README.md — procédure serveur HTTP local, piège de l'IP LAN

Critères d'acceptation

  • La commande de miroir et le cron sont documentés et testés
  • Chaque README de service a sa section bootstrap avec la commande exacte, copiable telle quelle
  • Le prérequis Tailscale du proxy est écrit comme condition forte, pas comme suggestion
  • Le piège IP LAN vs nom tailnet est explicite dans gitea/README.md
  • Le principe figure dans la section Philosophy du README racine
  • Aucune modification de code — issue documentaire uniquement

Dépendances

Dépend de #19 pour l'existence de gitea/README.md. Peut être rédigée en parallèle, mergée après.

## Contexte Dépendance circulaire identifiée avant le rebuild complet : les scripts se téléchargent depuis Gitea, qui est précisément ce qu'on reconstruit. Le proxy a le même problème, puisque c'est lui qui route `gitea.arnodo.fr`. Le mécanisme exact, vérifié dans le code : `exec_in_lxc()` fait le `curl` **sur l'hôte Proxmox** puis pousse le script dans le LXC via le tuyau — ça, ça passe. Mais une fois à l'intérieur, le script recharge `lib/common.sh` tout seul : ```bash LIB_COMMON_URL="$(dirname "$(dirname "$SCRIPT_URL")")/lib/common.sh" source <(curl -fsSL "$LIB_COMMON_URL") ``` Lancé via `bash -s`, il n'a pas de fichier sur disque et tombe **toujours** dans la branche `curl`. Un simple `git clone` sur pve01 ne suffit donc pas : le conteneur ira quand même taper sur un Gitea mort. La porte de sortie est déjà dans le code — `LIB_COMMON_URL` dérive de `SCRIPT_URL` par deux `dirname`. Surcharger `SCRIPT_URL` suffit, sans modification. ## Décisions retenues - **Pas de `pct push`** : le contournement par `SCRIPT_URL` est jugé suffisant. Cette issue est purement documentaire. - **Miroir `git clone --mirror` sur pve01** comme filet permanent. - **Tailscale installé manuellement** avant de lancer les scripts — condition forte, à documenter comme prérequis explicite. Sur pve01 c'est déjà le cas. - Gitea est sauvegardé chaque nuit ; une restauration reste possible en cas de problème. ## 1. Miroir sur pve01 Documenter la mise en place, à faire pendant que Gitea est vivant : ```bash git clone --mirror https://gitea.arnodo.fr/Damien/infra-scripts.git /root/infra-scripts.git ``` Rafraîchissement quotidien par cron : ``` 0 3 * * * git -C /root/infra-scripts.git remote update --prune ``` Procédure de reprise : ```bash git clone /root/infra-scripts.git /root/infra-scripts cd /root/infra-scripts && python3 -m http.server 8000 & ``` ## 2. Bootstrap du proxy Prérequis : Tailscale installé et authentifié manuellement sur la machine du proxy **avant** de lancer le script. Le script réinstallera Tailscale — idempotent, sans effet. ```bash curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up ``` Une fois sur le tailnet, MagicDNS résout et la dérivation fonctionne : ```bash export SCRIPT_URL="https://gitea.taila5ad8.ts.net/Damien/infra-scripts/raw/branch/main/proxy/install.sh" bash -c "$(curl -fsSL $SCRIPT_URL)" ``` Documenter que **tous les échanges passent par le tailnet** — c'est une condition forte, pas une commodité. ## 3. Bootstrap de Gitea Serveur HTTP temporaire sur le poste de travail : ```bash cd ~/infra-scripts uv run --no-project python -m http.server 8000 ``` Puis depuis pve01 : ```bash export SCRIPT_URL="http://<ip-lan-du-mac>:8000/gitea/install.sh" bash -c "$(curl -fsSL $SCRIPT_URL)" ``` **Piège à documenter explicitement** : utiliser l'**IP LAN** du poste, pas son nom tailnet. Le LXC fraîchement créé est en DHCP sur `vmbr0` et télécharge `lib/common.sh` tout en haut du script, bien avant la ligne qui installe Tailscale. À cet instant il n'a que le LAN. Mentionner aussi le pare-feu macOS, qui demandera l'autorisation d'accepter les connexions entrantes pour Python. ## 4. README racine Ajouter à la section Philosophy le principe qui sous-tend tout ce qui précède : > Le dépôt qui reconstruit l'infrastructure ne doit pas dépendre de cette infrastructure. Et une section « Bootstrap / reprise après sinistre » renvoyant vers les README de service. ## Fichiers touchés - `README.md` racine — principe + section bootstrap + mise en place du miroir - `proxy/README.md` — prérequis Tailscale, override `SCRIPT_URL` via tailnet - `gitea/README.md` — procédure serveur HTTP local, piège de l'IP LAN ## Critères d'acceptation - [ ] La commande de miroir et le cron sont documentés et testés - [ ] Chaque README de service a sa section bootstrap avec la commande exacte, copiable telle quelle - [ ] Le prérequis Tailscale du proxy est écrit comme condition forte, pas comme suggestion - [ ] Le piège IP LAN vs nom tailnet est explicite dans `gitea/README.md` - [ ] Le principe figure dans la section Philosophy du README racine - [ ] Aucune modification de code — issue documentaire uniquement ## Dépendances Dépend de **#19** pour l'existence de `gitea/README.md`. Peut être rédigée en parallèle, mergée après.
Damien added this to the gitea-lxc-migration milestone 2026-08-01 07:51:20 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Damien/infra-scripts#29