From f130500531b658c1cbed55a8ace4eb74369dc796 Mon Sep 17 00:00:00 2001 From: rogier Date: Wed, 7 Jan 2026 21:44:12 +0100 Subject: [PATCH] Add debian12to13-upgrade.sh --- debian12to13-upgrade.sh | 285 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 debian12to13-upgrade.sh diff --git a/debian12to13-upgrade.sh b/debian12to13-upgrade.sh new file mode 100644 index 0000000..6a7c2bd --- /dev/null +++ b/debian12to13-upgrade.sh @@ -0,0 +1,285 @@ +#!/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 "$@"