286 lines
7.5 KiB
Bash
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 "$@"
|