#!/bin/sh
# Mises à jour de P2i OS (lancé en administrateur par Réglages ou par le
# service quotidien).
#   maj-outil verifier            relit les dépôts, note les mises à jour disponibles
#   maj-outil installer           installe tout ce qui est disponible
#   maj-outil automatique oui|non installation quotidienne en arrière-plan
set -u
export DEBIAN_FRONTEND=noninteractive LC_ALL=C.UTF-8 PATH=/usr/sbin:/usr/bin:/sbin:/bin
ETAT=/var/lib/p2i
LISTE="$ETAT/maj-disponibles"
[ "$(id -u)" = 0 ] || { echo "À lancer en administrateur." >&2; exit 1; }
mkdir -p "$ETAT"

lister() {
    apt-get -s -o Debug::NoLocking=true dist-upgrade 2>/dev/null \
        | sed -n 's/^Inst \([^ ]*\) .*(\([^ ]*\) .*/\1 \2/p' > "$LISTE.tmp"
    mv "$LISTE.tmp" "$LISTE"
    chmod 644 "$LISTE"
}

case "${1:-}" in
verifier)
    echo "Lecture des dépôts…"
    apt-get update || { echo "Impossible de joindre les dépôts."; exit 1; }
    lister
    n="$(wc -l < "$LISTE")"
    echo "Terminé : $n mise(s) à jour disponible(s)."
    ;;
installer)
    echo "Préparation…"
    dpkg --configure -a || true
    apt-get update || { echo "Impossible de joindre les dépôts."; exit 1; }
    apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold \
        dist-upgrade || { lister; echo "L'installation a échoué."; exit 1; }
    apt-get -y autoremove --purge >/dev/null 2>&1 || true
    lister
    echo "Terminé : P2i OS est à jour."
    [ -f /var/run/reboot-required ] && echo "Un redémarrage est conseillé."
    exit 0
    ;;
automatique)
    case "${2:-}" in
        oui) v=1 ;;
        non) v=0 ;;
        *) echo "oui ou non" >&2; exit 2 ;;
    esac
    cat > /etc/apt/apt.conf.d/52p2i-automatique <<EOT
// Réglages > Mises à jour > Installer automatiquement
APT::Periodic::Update-Package-Lists "$v";
APT::Periodic::Unattended-Upgrade "$v";
EOT
    ;;
*)
    echo "usage : maj-outil verifier | installer | automatique oui|non" >&2; exit 2 ;;
esac
