infra : bundle Git quotidien du dépôt, hors serveur #240
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!240
Loading…
Reference in a new issue
No description provided.
Delete branch "lenaic/74-bundle-depot"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ferme le #74.
L'archive de secours emporte les données, pas le code. Si le serveur disparaît, la forge disparaît avec lui : le dépôt, les tickets et l'historique de la chaîne vivent tous les trois dessus.
Ce que ça pose
/usr/local/bin/depot-bundle.sh, tous les jours à 03:10, sept bundles conservés dans/var/backups/depot.Sous
deployet non sousroot. Le dépôt cloné appartient àdeploy, et Git refuse d'opérer sur un dépôt dont l'utilisateur courant n'est pas propriétaire depuis CVE-2022-24765. Un cron root échouait sur « detected dubious ownership » — constaté en essai réel sur le serveur, pas déduit. Le script pose quand mêmesafe.directorypour qu'un rejeu à la main soussudo, le geste naturel en incident, ne casse pas au pire moment.Le serveur ne pousse rien vers l'extérieur. Le critère « aucun secret en clair dans la conf du cron » se tient le plus simplement en n'en ayant aucun : le cron écrit un fichier local, et c'est le poste d'un équipier qui vient le chercher avec sa propre clé. Une machine compromise ne donne alors accès à rien de plus qu'elle-même.
Deux garde-fous qui ne sont pas décoratifs
Un bundle invalide ne prend pas la place du précédent. Écriture sous un nom temporaire,
git bundle verify, renommage seulement après. Un bundle tronqué a la bonne taille apparente et ne se voit qu'au clonage.La rotation compte des fichiers, pas des jours. Sept jours sans passage de cron laisseraient sinon zéro sauvegarde, ce qui est exactement le cas où on en a besoin.
Les cinq critères
git bundle --allhorodaté~/eadl/secours/depot/, nommée dans le runbookgit clonedepuis un bundle vérifié, résultat consigné (ci-dessous)Éprouvé de bout en bout le 09/09
Bundle produit sur le serveur, récupéré sur le poste, cloné pour de vrai : 584 commits, 3 branches. Rotation éprouvée séparément — quatre passages avec une garde de deux ne laissent que les deux plus récents.
Un piège évité en route, qui mérite d'être lu
La ligne de cron dépassait cent caractères et
ansible-lintla refusait. La couper par un antislash aurait produit une ligne de cron invalide : cron ne connaît pas la continuation de ligne. La sauvegarde quotidienne aurait été cassée en silence pour satisfaire un linter. C'est la variable qui a raccourci, pas la ligne.Ce que ça débloque
#102 — repasser la forge en réseau bridge. Ce ticket est risqué à deux jours du jury parce qu'un faux pas fait perdre dépôt, tickets et chaîne d'un coup. Avec un bundle vérifié hors serveur, le dépôt survit. Le faire dans cet ordre est ce qui rend #102 tenable.