71 lines
3.7 KiB
Bash
Executable File
71 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# 08-decommission.sh — T6.4 : Décommissionnement du xpenology
|
|
#
|
|
# Garde-fous : G3 (destructif — validation explicite), G4 (double-run terminé), G5 (IP .25), G7 (rollback), G8 (journalisation).
|
|
#
|
|
# ⚠️ OPÉRATION IRRÉVERSIBLE CÔTÉ RÉSEAU (garde-fous G3 + G4) :
|
|
# Ce script ARRÊTE le xpenology (arrêt des conteneurs + consignes d'arrêt GUI + débranchement).
|
|
# **AUCUN WIPE n'est exécuté par ce script** — décision utilisateur 12/10 : disques conservés
|
|
# intacts, récupération documentée dans `RESTORE-NAS-USB.md`. Le wipe physique reste une
|
|
# décision séparée (réutilisation/vente), hors périmètre du kit.
|
|
# Il ne s'exécute QUE si :
|
|
# 1. Toutes les briques sont validées sur le G9 (double-run terminé, G4).
|
|
# 2. Le backup 3-2-1 est fonctionnel + restauration testée (G2).
|
|
# 3. L'IP du G9 est passée à .25 (G5).
|
|
# 4. Validation explicite de l'utilisateur (drapeau + saisie de confirmation).
|
|
#
|
|
# Usage :
|
|
# sudo ./08-decommission.sh --i-understand
|
|
#
|
|
# Le script EXIGE de cocher chaque prérequis avant de continuer.
|
|
|
|
set -euo pipefail
|
|
|
|
log() { echo -e "\n[decom] $*"; }
|
|
die() { echo -e "\n[ERREUR] $*" >&2; exit 1; }
|
|
journal() {
|
|
local action="$1" raison="$2" resultat="$3" rollback="$4"
|
|
printf '| %s | 6 | decommission : %s | %s | %s | %s |\n' "$(date '+%Y-%m-%d %H:%M')" "$action" "$raison" "$resultat" "$rollback" >> "$(dirname "$0")/../journal.md"
|
|
}
|
|
|
|
[[ "${1:-}" == "--i-understand" ]] || die "Drapeau --i-understand requis (opération irréversible)."
|
|
|
|
XP_HOST="192.168.1.25"
|
|
|
|
log "=== PRÉREQUIS (cocher chacun : y/n) ==="
|
|
prereq() {
|
|
local label="$1"
|
|
read -r -p " [ ] $label — confirmé ? (y/N) : " a
|
|
[[ "$a" == "y" || "$a" == "Y" ]] || die "Prérequis non confirmé : $label"
|
|
}
|
|
prereq "Toutes les briques (Vaultwarden, Nextcloud, PhotoPrism, Gitea, n8n, Jellyfin) validées sur le G9"
|
|
prereq "Backup 3-2-1 fonctionnel + restauration testée (données IA incluses)"
|
|
prereq "IP du G9 passée à .25, tous les services résolus et accessibles"
|
|
prereq "Sauvegarde FINALE complète du xpenology effectuée et vérifiée"
|
|
prereq "Je comprends que le xpenology sera ÉTEINT et DÉBRANCHÉ, disques conservés intacts (0 effacement)"
|
|
|
|
echo
|
|
read -r -p "Saisir 'ETEINDRE XPENOLOGY' pour confirmer l'arrêt et le débranchement : " CONF
|
|
[[ "$CONF" == "ETEINDRE XPENOLOGY" ]] || die "Confirmation non saisie. Abandon."
|
|
|
|
log "Arrêt des conteneurs + arrêt du système xpenology"
|
|
# L'arrêt propre se fait de préférence via la GUI DSM (arrêt système).
|
|
# En SSH, on arrête les conteneurs puis le système :
|
|
ssh -p 222 Master@"$XP_HOST" "sudo /var/packages/ContainerManager/target/usr/bin/docker stop \$(/var/packages/ContainerManager/target/usr/bin/docker ps -q) 2>/dev/null || true"
|
|
journal "Conteneurs xpenology arrêtés" "Arrêt propre avant débranchement (G3)" "docker stop sur tous les conteneurs" "redémarrage du xpenology"
|
|
|
|
echo
|
|
echo "⚠️ ÉTAPE MANUELLE OBLIGATOIRE :"
|
|
echo " 1. Dans la GUI DSM : arrêter proprement le système."
|
|
echo " 2. Débrancher le xpenology."
|
|
echo " 3. Étiqueter les disques et les CONSERVER INTACTS (0 effacement — décision 12/10)."
|
|
echo " 4. Récupération ultérieure possible : procédure testée dans RESTORE-NAS-USB.md."
|
|
echo " (le wipe physique n'est PAS dans le périmètre du kit ; réutilisation/vente = décision séparée)"
|
|
echo
|
|
read -r -p "Une fois le xpenology éteint et débranché, saisir 'DONE' pour journaliser : " FINAL
|
|
[[ "$FINAL" == "DONE" ]] || die "Non confirmé."
|
|
|
|
journal "xpenology éteint et débranché (disques intacts)" "G9 = seul cœur famille (G4/G5)" "éteint + débranché, G9 sur .25, 0 effacement" "rebrancher le xpenology (données intactes) ; backup 3-2-1 testé au préalable"
|
|
log "Terminé. Le G9 est maintenant le seul cœur famille."
|