Last active 1 week ago

apt-auto-update.sh Raw
1#!/usr/bin/env bash
2set -euo pipefail
3
4# --- Réglages ---
5LOGFILE="/var/log/auto-upgrade.log"
6LOCKFILE="/var/run/auto-upgrade.lock"
7export DEBIAN_FRONTEND=noninteractive
8APT_OPTS=(-y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold)
9
10# --- Vérification root ---
11if [ "$(id -u)" -ne 0 ]; then
12 echo "Ce script doit être exécuté en root." >&2
13 exit 1
14fi
15
16# --- Logging ---
17umask 022
18mkdir -p "$(dirname "$LOGFILE")"
19if [ -t 1 ]; then
20 exec > >(tee -a "$LOGFILE") 2>&1
21else
22 exec >>"$LOGFILE" 2>&1
23fi
24
25echo "===== $(date -Is) : démarrage auto-upgrade (Debian/Ubuntu) ====="
26
27# --- Lock pour éviter les collisions ---
28exec 9>"$LOCKFILE"
29if ! flock -n 9; then
30 echo "Un autre auto-upgrade est déjà en cours, arrêt."
31 exit 0
32fi
33
34# --- Update & upgrade ---
35echo "[1/4] apt-get update"
36apt-get update
37
38echo "[2/4] apt-get upgrade"
39apt-get upgrade "${APT_OPTS[@]}"
40
41# --- Full-upgrade/disto si besoin ---
42echo "[3/4] Vérification si un full-upgrade est nécessaire…"
43if apt-get -s dist-upgrade | awk '/^Inst / { found=1; exit } END { exit !found }'; then
44 echo "Des paquets nécessitent un full-upgrade → exécution."
45 apt-get dist-upgrade "${APT_OPTS[@]}"
46else
47 echo "Full-upgrade non nécessaire."
48fi
49
50# --- Autoremove ---
51echo "[4/4] apt-get autoremove --purge"
52apt-get autoremove --purge -y
53
54# --- Reboot si requis ---
55if [ -f /var/run/reboot-required ]; then
56 PKG_COUNT=$(wc -l < /var/run/reboot-required.pkgs 2>/dev/null || echo 0)
57 echo "Reboot nécessaire (${PKG_COUNT} paquet(s) impliqué(s))."
58 /sbin/reboot
59else
60 echo "Pas besoin de reboot."
61fi
62
63echo "===== $(date -Is) : fin auto-upgrade ====="
64echo "--------------------------------------------------------"
65exit 0