Files
scripts/debian12to13-upgrade.sh
2026-01-07 22:14:13 +01:00

286 lines
7.5 KiB
Bash

#!/bin/bash
###############################################################################
# Script: Debian 12 (Bookworm) naar Debian 13 (Trixie) Upgrade
# Beschrijving: Veilige automatische upgrade van Debian 12 naar Debian 13
# Auteur: Auto-generated
# Datum: $(date +%Y-%m-%d)
###############################################################################
set -euo pipefail # Exit on error, undefined vars, pipe failures
# Kleuren voor output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging
LOG_FILE="/var/log/debian-upgrade-$(date +%Y%m%d-%H%M%S).log"
exec 1> >(tee -a "$LOG_FILE")
exec 2> >(tee -a "$LOG_FILE" >&2)
# Functies
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Controleer of script als root wordt uitgevoerd
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "Dit script moet als root worden uitgevoerd (gebruik sudo)"
exit 1
fi
log_success "Root check geslaagd"
}
# Controleer huidige Debian versie
check_debian_version() {
if [[ ! -f /etc/debian_version ]]; then
log_error "Dit is geen Debian systeem"
exit 1
fi
DEBIAN_VERSION=$(cat /etc/debian_version)
log_info "Huidige Debian versie: $DEBIAN_VERSION"
if [[ ! -f /etc/os-release ]]; then
log_error "Kan /etc/os-release niet lezen"
exit 1
fi
source /etc/os-release
if [[ "$VERSION_CODENAME" != "bookworm" ]]; then
log_error "Dit script is alleen voor Debian 12 (Bookworm). Huidige versie: $VERSION_CODENAME"
exit 1
fi
log_success "Debian 12 (Bookworm) gedetecteerd"
}
# Controleer schijfruimte
check_disk_space() {
log_info "Schijfruimte controleren..."
AVAILABLE_SPACE=$(df -BG / | awk 'NR==2 {print $4}' | sed 's/G//')
if [[ $AVAILABLE_SPACE -lt 5 ]]; then
log_error "Onvoldoende schijfruimte. Minimaal 5GB vereist, beschikbaar: ${AVAILABLE_SPACE}GB"
exit 1
fi
log_success "Voldoende schijfruimte beschikbaar: ${AVAILABLE_SPACE}GB"
}
# Maak backup van belangrijke bestanden
backup_important_files() {
log_info "Backup maken van belangrijke configuratiebestanden..."
BACKUP_DIR="/root/debian-upgrade-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Backup sources.list
if [[ -f /etc/apt/sources.list ]]; then
cp /etc/apt/sources.list "$BACKUP_DIR/sources.list.backup"
fi
# Backup sources.list.d directory
if [[ -d /etc/apt/sources.list.d ]]; then
cp -r /etc/apt/sources.list.d "$BACKUP_DIR/"
fi
# Backup belangrijke configuraties
IMPORTANT_FILES=(
"/etc/fstab"
"/etc/network/interfaces"
"/etc/hosts"
"/etc/hostname"
)
for file in "${IMPORTANT_FILES[@]}"; do
if [[ -f "$file" ]]; then
cp "$file" "$BACKUP_DIR/"
fi
done
log_success "Backup gemaakt in: $BACKUP_DIR"
echo "$BACKUP_DIR" > /tmp/debian-upgrade-backup-location.txt
}
# Update huidige systeem
update_current_system() {
log_info "Huidige systeem updaten..."
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
log_success "Huidige systeem bijgewerkt"
}
# Ruim onnodige packages op
cleanup_packages() {
log_info "Onnodige packages opruimen..."
apt-get autoremove -y
apt-get autoclean
apt-get clean
log_success "Systeem opgeruimd"
}
# Update sources.list naar Debian 13 (Trixie)
update_sources_list() {
log_info "Sources.list updaten naar Debian 13 (Trixie)..."
# Backup originele sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.backup.$(date +%Y%m%d)
# Vervang bookworm door trixie in sources.list
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
# Update ook sources.list.d bestanden
if [[ -d /etc/apt/sources.list.d ]]; then
find /etc/apt/sources.list.d -type f -name "*.list" -exec sed -i 's/bookworm/trixie/g' {} \;
fi
log_success "Sources.list bijgewerkt naar Debian 13 (Trixie)"
}
# Minimal upgrade (aanbevolen Debian upgrade methode)
minimal_upgrade() {
log_info "Minimale upgrade uitvoeren..."
apt-get update
# Minimal upgrade zoals aanbevolen door Debian
apt-get upgrade --without-new-packages -y || true
apt-get full-upgrade -y
log_success "Minimale upgrade voltooid"
}
# Full upgrade
full_upgrade() {
log_info "Volledige upgrade uitvoeren..."
apt-get update
apt-get full-upgrade -y
log_success "Volledige upgrade voltooid"
}
# Handleer configuratiebestand wijzigingen
handle_config_changes() {
log_info "Configuratiebestand wijzigingen verwerken..."
# Gebruik 'yes' voor standaard opties, maar vraag om bevestiging voor belangrijke wijzigingen
# Dit kan interactief zijn, dus we gebruiken DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND=noninteractive
# Voor belangrijke configuraties, gebruik de oude versie als standaard
# Dit voorkomt dat belangrijke configuraties worden overschreven
apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" full-upgrade -y || true
log_success "Configuratiebestand wijzigingen verwerkt"
}
# Final cleanup
final_cleanup() {
log_info "Finale opruiming..."
apt-get autoremove -y
apt-get autoclean
apt-get clean
log_success "Finale opruiming voltooid"
}
# Verifieer upgrade
verify_upgrade() {
log_info "Upgrade verifiëren..."
if [[ -f /etc/os-release ]]; then
source /etc/os-release
if [[ "$VERSION_CODENAME" == "trixie" ]]; then
log_success "Upgrade succesvol! Huidige versie: Debian 13 (Trixie)"
return 0
else
log_warning "Versie check: $VERSION_CODENAME (verwacht: trixie)"
return 1
fi
else
log_error "Kan /etc/os-release niet lezen"
return 1
fi
}
# Main functie
main() {
log_info "========================================="
log_info "Debian 12 naar Debian 13 Upgrade Script"
log_info "========================================="
log_info "Log bestand: $LOG_FILE"
echo ""
# Pre-upgrade checks
check_root
check_debian_version
check_disk_space
# Bevestiging vragen
echo ""
log_warning "LET OP: Dit script zal uw systeem upgraden van Debian 12 naar Debian 13"
log_warning "Zorg ervoor dat u een backup heeft gemaakt voordat u doorgaat!"
echo ""
read -p "Wilt u doorgaan met de upgrade? (ja/nee): " -r
echo ""
if [[ ! $REPLY =~ ^[Jj][Aa]$ ]]; then
log_info "Upgrade geannuleerd door gebruiker"
exit 0
fi
# Pre-upgrade stappen
backup_important_files
update_current_system
cleanup_packages
# Upgrade stappen
update_sources_list
minimal_upgrade
handle_config_changes
full_upgrade
# Post-upgrade stappen
final_cleanup
verify_upgrade
echo ""
log_success "========================================="
log_success "Upgrade proces voltooid!"
log_success "========================================="
echo ""
log_warning "BELANGRIJK: Herstart uw systeem om de upgrade volledig te voltooien:"
log_info " sudo reboot"
echo ""
log_info "Backup locatie: $(cat /tmp/debian-upgrade-backup-location.txt 2>/dev/null || echo 'Onbekend')"
log_info "Log bestand: $LOG_FILE"
echo ""
}
# Script uitvoeren
main "$@"