Files
Docker/update.sh
2026-03-05 15:18:51 +01:00

124 lines
2.7 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
METHOD="${1:-unknown}"
LOG_DIR="/var/log/lxc-updater-TM"
LOG_FILE="${LOG_DIR}/lxc-updater-update.log"
mkdir -p "$LOG_DIR"
: > "$LOG_FILE"
log() {
echo "$1"
echo "$1" >> "$LOG_FILE"
}
run_cmd() {
local msg="$1"
shift
echo "$msg..."
"$@" >>"$LOG_FILE" 2>&1
echo "$msg terminé"
}
update_apt() {
log "📦 Mise à jour Debian / Ubuntu (APT)"
export DEBIAN_FRONTEND=noninteractive
run_cmd "Mise à jour des dépôts" apt-get update -y
run_cmd "Installation des mises à jour" apt-get upgrade -y
systemctl daemon-reload >>"$LOG_FILE" 2>&1 || true
}
update_apk() {
log "📦 Mise à jour Alpine (APK)"
run_cmd "Mise à jour des dépôts" apk update
run_cmd "Installation des mises à jour" apk upgrade
}
update_docker() {
log "🐳 Mise à jour Docker"
if ! docker ps >>"$LOG_FILE" 2>&1; then
log "❌ Docker n'est pas accessible"
return 1
fi
log "🔍 Recherche de projets Docker Compose"
mapfile -t dirs < <(
docker ps -q | while read -r cid; do
docker inspect -f '{{ index .Config.Labels "com.docker.compose.project.working_dir" }}' "$cid" 2>/dev/null || true
done | sed '/^<no value>$/d;/^$/d' | sort -u
)
valid_dirs=()
for d in "${dirs[@]}"; do
if [[ -d "$d" ]] && { [[ -f "$d/docker-compose.yml" ]] || [[ -f "$d/compose.yml" ]]; }; then
valid_dirs+=("$d")
else
log "⚠️ Dossier Compose ignoré : $d"
fi
done
if (( ${#valid_dirs[@]} > 0 )); then
log "📁 Projet(s) Compose détecté(s) : ${#valid_dirs[@]}"
for d in "${valid_dirs[@]}"; do
log "📂 Projet : $d"
if docker compose version >>"$LOG_FILE" 2>&1; then
run_cmd "Téléchargement des images" bash -c "cd '$d' && docker compose pull"
run_cmd "Redéploiement des services" bash -c "cd '$d' && docker compose up -d"
elif command -v docker-compose >>"$LOG_FILE" 2>&1; then
run_cmd "Téléchargement des images" bash -c "cd '$d' && docker-compose pull"
run_cmd "Redéploiement des services" bash -c "cd '$d' && docker-compose up -d"
else
log "❌ Docker Compose n'est pas installé"
return 2
fi
done
else
log "⚠️ Aucun projet Compose détecté"
log "⬇️ Mise à jour des images Docker utilisées"
while read -r img; do
[[ -n "$img" ]] || continue
run_cmd "Téléchargement $img" docker pull "$img"
done < <(docker ps --format '{{.Image}}' | sort -u)
fi
}
case "$METHOD" in
apt)
update_apt
;;
apk)
update_apk
;;
docker)
update_docker
;;
*)
log "❌ Méthode inconnue : $METHOD"
exit 1
;;
esac
log "🧾 Log update : $LOG_FILE"
log "🎉 Mise à jour terminée"