124 lines
2.7 KiB
Bash
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" |