Update apt-update.sh

This commit is contained in:
2026-03-04 09:18:36 +01:00
parent 0f6db10a0b
commit d9406280d5
+111 -21
View File
@@ -1,30 +1,120 @@
#!/bin/bash
#!/usr/bin/env bash
#
# Automatische veilige package-upgrade voor Debian/Ubuntu
# - Draait stil als er geen updates zijn (geschikt voor cron)
# - Toont output alleen bij echte upgrades
# - Robuuste foutafhandeling
#
# Stil stdout/stderr behalve bij echte actie
exec 3>&1 4>&2
set -euo pipefail
# Systeem bijwerken
apt-get -qq update
# Veilige cron-omgeving
PATH=/usr/sbin:/usr/bin:/sbin:/bin
export DEBIAN_FRONTEND=noninteractive
# Upgradable packages ophalen (alleen namen)
listUpgrades=$(apt list --upgradable 2>/dev/null | grep -F '[upgradable from:' | cut -d/ -f1)
log() {
printf "[%s] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
}
# Als er GEEN upgrades zijn, netjes afsluiten
if [ -z "$listUpgrades" ]; then
# ---- Lock timeout configuratie ----
APT_LOCK_TIMEOUT=60
# ---- Update package index ----
if ! apt-get -qq -o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" update; then
log "FOUT: apt-get update mislukt."
exit 1
fi
# ---- Detecteer beschikbare upgrades (robuste parsing) ----
readarray -t packages < <(
apt-get -s upgrade \
-o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" \
| awk '/^Inst / {print $2}'
)
# ---- Stop als er geen upgrades zijn ----
if [ "${#packages[@]}" -eq 0 ]; then
log "Geen updates"
exit 0
fi
# Anders: upgrades uitvoeren en output tonen (zodat cron mailt)
echo "De volgende pakketten worden bijgewerkt:"
echo "$listUpgrades"
echo "=============================="
log "De volgende pakketten worden bijgewerkt:"
printf ' - %s\n' "${packages[@]}"
log "======================================="
# Upgrade uitvoeren
DEBIAN_FRONTEND=noninteractive apt-get --yes --assume-yes \
-o DPkg::options::="--force-confdef" \
-o DPkg::options::="--force-confold" \
--only-upgrade -qq install $listUpgrades
# ---- Voer upgrade uit ----
if ! apt-get -y \
-o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" \
-o DPkg::options::="--force-confdef" \
-o DPkg::options::="--force-confold" \
upgrade; then
log "FOUT: upgrade mislukt."
exit 1
fi
# Opruimen
DEBIAN_FRONTEND=noninteractive apt-get --yes -qq autoremove
DEBIAN_FRONTEND=noninteractive apt-get -qq clean
# ---- Opruimen ----
apt-get -y -o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" autoremove
apt-get -qq clean
log "Upgrade succesvol voltooid."
root@dt27:~# bash test.sh
[2026-03-04 09:17:10] Geen updates
root@dt27:~# cat test.sh
#!/usr/bin/env bash
#
# Automatische veilige package-upgrade voor Debian/Ubuntu
# - Draait stil als er geen updates zijn (geschikt voor cron)
# - Toont output alleen bij echte upgrades
# - Robuuste foutafhandeling
#
set -euo pipefail
# Veilige cron-omgeving
PATH=/usr/sbin:/usr/bin:/sbin:/bin
export DEBIAN_FRONTEND=noninteractive
log() {
printf "[%s] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
}
# ---- Lock timeout configuratie ----
APT_LOCK_TIMEOUT=60
# ---- Update package index ----
if ! apt-get -qq -o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" update; then
log "FOUT: apt-get update mislukt."
exit 1
fi
# ---- Detecteer beschikbare upgrades (robuste parsing) ----
readarray -t packages < <(
apt-get -s upgrade \
-o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" \
| awk '/^Inst / {print $2}'
)
# ---- Stop als er geen upgrades zijn ----
if [ "${#packages[@]}" -eq 0 ]; then
exit 0
fi
log "De volgende pakketten worden bijgewerkt:"
printf ' - %s\n' "${packages[@]}"
log "======================================="
# ---- Voer upgrade uit ----
if ! apt-get -y \
-o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" \
-o DPkg::options::="--force-confdef" \
-o DPkg::options::="--force-confold" \
upgrade; then
log "FOUT: upgrade mislukt."
exit 1
fi
# ---- Opruimen ----
apt-get -y -o DPkg::Lock::Timeout="${APT_LOCK_TIMEOUT}" autoremove
apt-get -qq clean
log "Upgrade succesvol voltooid."