Helperscripts/system/upgrade_debian_12_to_13.sh

90 lines
No EOL
2.9 KiB
Bash

#!/bin/bash
set -e
# --- Configuration & Colors ---
RED='\e[31m'
GREEN='\e[32m'
YELLOW='\e[33m'
BLUE='\e[34m'
NC='\e[0m'
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}Error: This script must be run as root.${NC}"
exit 1
fi
echo -e "${BLUE}=== Debian 12 to 13 (Trixie) Upgrade Suite ===${NC}"
# --- 1. HEALTH CHECKS ---
echo -e "${YELLOW}[1/6] Running system health checks...${NC}"
if dpkg --get-selections | grep -q 'hold'; then
echo -e "${RED}Error: You have packages on hold. Unhold them before upgrading.${NC}"
exit 1
fi
apt update && apt upgrade -y
apt autoremove -y
# --- 2. UPDATE SOURCES (Standard Format) ---
echo -e "${YELLOW}[2/6] Updating APT sources to Trixie...${NC}"
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Swap codenames
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
find /etc/apt/sources.list.d/ -type f -name "*.list" -exec sed -i 's/bookworm/trixie/g' {} +
# Enforce non-free-firmware
sed -i '/^deb .* main/ { /non-free-firmware/ ! s/$/ non-free-firmware/ }' /etc/apt/sources.list
# --- 3. ATTEMPT MODERNIZATION (Skip on failure) ---
echo -e "${YELLOW}[3/6] Attempting to modernize sources...${NC}"
# Try to update apt binary first to unlock the command
apt update || true
apt install -y apt python3-debian || true
if apt modernize-sources --assume-yes 2>/dev/null; then
echo -e "${GREEN}Successfully modernized sources to DEB822 format.${NC}"
[ -f /etc/apt/sources.list ] && mv /etc/apt/sources.list /etc/apt/sources.list.modernized
else
echo -e "${RED}Warning: 'apt modernize-sources' not supported yet. Continuing with standard format...${NC}"
fi
# --- 4. TAILSCALE SPECIAL HANDLING ---
echo -e "${YELLOW}[4/6] Finalizing Tailscale configuration...${NC}"
# Refresh Keyring
mkdir -p /usr/share/keyrings
curl -fsSL https://pkgs.tailscale.com/stable/debian/trixie.noarmor.gpg -o /usr/share/keyrings/tailscale-archive-keyring.gpg || \
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg -o /usr/share/keyrings/tailscale-archive-keyring.gpg
# Remove legacy list file to prevent duplicates
rm -f /etc/apt/sources.list.d/tailscale.list
# Create/Overwrite modern DEB822 file
cat <<EOF > /etc/apt/sources.list.d/tailscale.sources
Types: deb
URIs: https://pkgs.tailscale.com/stable/debian/
Suites: trixie
Components: main
Signed-By: /usr/share/keyrings/tailscale-archive-keyring.gpg
EOF
# --- 5. MINIMAL UPGRADE ---
echo -e "${BLUE}[5/6] Performing Minimal Upgrade...${NC}"
apt update
DEBIAN_FRONTEND=noninteractive apt upgrade -y --without-new-pkgs -o Dpkg::Options::="--force-confold"
# --- 6. FULL SYSTEM UPGRADE ---
echo -e "${BLUE}[6/6] Performing Full System Upgrade...${NC}"
DEBIAN_FRONTEND=noninteractive apt full-upgrade -y -o Dpkg::Options::="--force-confold"
# Final Cleanup
apt autoremove -y && apt clean
echo -e "${GREEN}Upgrade complete!${NC}"
read -p "Reboot now? (y/N) " answer
if [[ "$answer" =~ ^[Yy]$ ]]; then
reboot
fi