#!/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 "$@"