#!/bin/bash # nas-update-system — Vérifie les mises à jour système disponibles (apt) # Usage : nas-update-system # Output : JSON (mode non-interactif) ou texte coloré (mode terminal) set -euo pipefail if [ -t 1 ]; then INTERACTIVE=true; else INTERACTIVE=false; fi # Couleurs (mode terminal uniquement) if $INTERACTIVE; then RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' BOLD='\033[1m' RESET='\033[0m' else RED='' GREEN='' YELLOW='' CYAN='' BOLD='' RESET='' fi if $INTERACTIVE; then echo -e "${BOLD}--- Mise à jour de la liste des paquets ---${RESET}" fi apt-get update -qq 2>/dev/null # Parser apt list --upgradable # Format : nom/suite version arch [upgradable from: ancienne_version] packages_json="" count=0 while IFS= read -r line; do # Ignorer la ligne d'avertissement "Listing..." [[ "$line" =~ ^Listing ]] && continue [[ -z "$line" ]] && continue # Extraire le nom (avant le /) name=$(echo "$line" | cut -d'/' -f1) # Extraire la version disponible (2ème champ) available=$(echo "$line" | awk '{print $2}') # Extraire la version actuelle (après "upgradable from:") current=$(echo "$line" | grep -oP 'upgradable from: \K[^\]]+' || echo "inconnue") if $INTERACTIVE; then echo -e " ${CYAN}${name}${RESET} : ${YELLOW}${current}${RESET} → ${GREEN}${available}${RESET}" fi # Construire JSON entry="{\"name\":\"${name}\",\"current\":\"${current}\",\"available\":\"${available}\"}" if [ $count -eq 0 ]; then packages_json="${entry}" else packages_json="${packages_json},${entry}" fi count=$((count + 1)) done < <(apt list --upgradable 2>/dev/null) # Vérifier si reboot requis reboot_required=false if [ -f /var/run/reboot-required ]; then reboot_required=true fi if $INTERACTIVE; then echo "" echo -e "${BOLD}--- Bilan ---${RESET}" if [ $count -eq 0 ]; then echo -e "${GREEN}✅ Système à jour.${RESET}" else echo -e "${YELLOW}📦 ${count} paquet(s) à mettre à jour.${RESET}" fi if $reboot_required; then echo -e "${RED}⚠️ Redémarrage requis.${RESET}" fi else printf '{"count":%d,"reboot_required":%s,"packages":[%s]}\n' \ "$count" "$reboot_required" "$packages_json" fi