Beschreibung:
Dieses Bash-Skript automatisiert den Upgrade-Prozess von Debian und stellt sicher, dass alle wichtigen Schritte berücksichtigt werden, um ein reibungsloses Update zu gewährleisten. Es bietet Funktionen wie die Überprüfung der aktuellen Debian-Version, das Erkennen der neuesten verfügbaren Version, das Sichern von Konfigurationsdateien, das Entfernen von Fremdpaketen und PPAs, sowie das Prüfen auf ausstehende Konfigurationsänderungen und ausreichenden Speicherplatz. Das Skript führt den Upgrade-Prozess durch, passt die Paketquellen an und stellt sicher, dass das System nach Abschluss des Updates sauber und betriebsbereit ist. Ein eingebauter Neustart-Mechanismus stellt sicher, dass das System nach dem Update ordnungsgemäß neu gestartet wird.
Das Skript führt folgende Aufgaben aus:
🛡 Sicherheit: Verhindert Mehrfachausführungen durch Verwendung einer Lock-Datei.
🔑 Root-Rechte Prüfung: Stellt sicher, dass das Skript mit Root-Rechten ausgeführt wird.
🌐 Lokalisierung: Unterstützt Deutsch und Englisch. Zu Beginn können Sie Ihre bevorzugte Sprache auswählen.
📡 Automatische Versionserkennung: Erkennt automatisch die aktuelle Debian-Version.
✍️ Manuelle Zielversion: Ermöglicht das Festlegen einer Ziel-Debian-Version durch Anpassen der TARGET_VERSION-Variable im Skript.
🌐 Verbindungsprüfung: Überprüft die Erreichbarkeit der Debian-Server.
🔧 Quellenaktualisierung: Aktualisiert die Paketquellen und sichert bestehende Konfigurationen.
🗑 Fremdpakete erkennen: Identifiziert und bietet an, nicht-offizielle Debian-Pakete zu entfernen.
🗄️ Ausstehende Konfigurationsänderungen: Erkennt ausstehende Konfigurationsänderungen und bietet Optionen zu deren Behandlung.
💾 Speicherplatzprüfung: Überprüft den verfügbaren Speicherplatz vor dem Upgrade.
📋 Log-Verwaltung: Implementiert eine Logrotation, um das unkontrollierte Wachsen der Log-Datei zu verhindern.
🔍 Konfigurations-Backup: Erstellt Backups der bestehenden Konfigurationsdateien und Paketquellen.
🛠 Systemaktualisierung: Aktualisiert das System auf die neuesten Pakete der aktuellen Version.
🔄 Interaktive Entscheidungen: Bietet dem Benutzer Kontrolle über kritische Schritte während des Upgrades.
🔁 Automatischer Neustart: Option, das System nach Abschluss des Upgrades automatisch neu zu starten.
Das Skript: (aktuelle Version 1.0.5 – Update 01.12.2024)
#!/bin/bash
# Hinweis: Bitte führen Sie vor dem Upgrade ein vollständiges System-Backup durch!
# Skript-Optionen initialisieren
AUTO_REBOOT=false
ASSUME_YES=false
KEEP_FOREIGN_PACKAGES=false
KEEP_EXTERNAL_REPOS=false
# Umgebungsvariable für nicht-interaktiven Modus setzen
export DEBIAN_FRONTEND=noninteractive
# Sprachunterstützung (Deutsch und Englisch)
LANGUAGE="de"
select_language() {
echo "Please select your language / Bitte wählen Sie Ihre Sprache:"
echo "1) English"
echo "2) Deutsch"
read -p "Selection [1-2]: " LANG_CHOICE
case $LANG_CHOICE in
1)
LANGUAGE="en"
;;
2)
LANGUAGE="de"
;;
*)
echo "Invalid selection, defaulting to Deutsch."
LANGUAGE="de"
;;
esac
}
# Sprachabhängige Texte
set_language_strings() {
if [ "$LANGUAGE" == "en" ]; then
TEXT_USAGE="Usage: $0 [options]"
TEXT_OPTIONS="Options:"
TEXT_AUTO_REBOOT="--auto-reboot Automatically reboot after upgrade"
TEXT_ASSUME_YES="--assume-yes, --non-interactive Automatically answer 'Yes' to prompts"
TEXT_KEEP_FOREIGN_PACKAGES="--keep-foreign-packages Keep foreign packages"
TEXT_KEEP_EXTERNAL_REPOS="--keep-external-repos Keep external repositories"
TEXT_HELP="-h, --help Display this help message"
TEXT_UNKNOWN_OPTION="Unknown option: "
TEXT_ERROR="Error"
TEXT_ALREADY_RUNNING="Another upgrade script is already running."
TEXT_NOT_ROOT="This script must be run as root."
TEXT_STARTING="Starting Debian upgrade script..."
TEXT_CHECK_FOREIGN="Checking for installed foreign packages..."
TEXT_FOREIGN_FOUND="Foreign packages found:"
TEXT_KEEPING_FOREIGN="Keeping foreign packages due to --keep-foreign-packages option."
TEXT_REMOVE_FOREIGN_PROMPT="Do you want to remove foreign packages before the upgrade? [y/N]: "
TEXT_REMOVING_FOREIGN="Removing foreign packages..."
TEXT_NO_FOREIGN="No foreign packages found."
TEXT_CHECK_EXTERNAL="Checking for non-official Debian repositories..."
TEXT_EXTERNAL_FOUND="Non-official repositories found:"
TEXT_KEEPING_EXTERNAL="Keeping external repositories due to --keep-external-repos option."
TEXT_DISABLE_EXTERNAL_PROMPT="Do you want to disable external repositories before the upgrade? [y/N]: "
TEXT_DISABLING_EXTERNAL="Disabling external repositories..."
TEXT_NO_EXTERNAL="No external repositories found."
TEXT_CHECK_SPACE="Checking available disk space..."
TEXT_LOW_SPACE="Warning: Less than 5 GB of free space available. This may hinder the upgrade."
TEXT_SPACE_OK="Sufficient disk space available:"
TEXT_CHECK_PENDING_CONFIGS="Checking for pending configuration changes..."
TEXT_PENDING_CONFIGS_FOUND="Pending configuration changes found:"
TEXT_HANDLE_PENDING_PROMPT="Do you want to resolve pending configuration changes now? [y/N]: "
TEXT_RESOLVING_PENDING="Resolving pending configuration changes..."
TEXT_NO_PENDING_CONFIGS="No pending configuration changes found."
TEXT_CURRENT_VERSION="Current Debian version detected:"
TEXT_TARGET_VERSION="Target Debian version:"
TEXT_ALREADY_UP_TO_DATE="The system is already up-to-date."
TEXT_UPGRADE_FROM_TO="The system will be upgraded from"
TEXT_CHECK_CONNECTION="Checking the reachability of Debian servers..."
TEXT_SERVERS_REACHABLE="Debian servers are reachable."
TEXT_INVALID_VERSION="Error: The Debian version '$TARGET_VERSION' is not valid or not available."
TEXT_VALID_VERSION="The Debian version '$TARGET_VERSION' is valid."
TEXT_BACKUP_SOURCES="Creating backup of sources.list files..."
TEXT_BACKUP_COMPLETED="Backup completed and stored in:"
TEXT_UPDATING_SYSTEM="Updating the current system and fixing possible package errors..."
TEXT_UPDATING_SOURCES="Updating package sources to"
TEXT_SOURCES_UPDATED="Package sources successfully updated to"
TEXT_UPGRADE_SYSTEM="Starting system upgrade to Debian"
TEXT_MINIMAL_UPGRADE="Performing minimal system upgrade..."
TEXT_FULL_UPGRADE="Performing full system upgrade..."
TEXT_UPGRADE_COMPLETE="Upgrade is complete. The system needs to be rebooted to apply all changes."
TEXT_REBOOT_PROMPT="Do you want to reboot the system now? [y/N]: "
TEXT_REBOOTING="Rebooting the system now..."
TEXT_REBOOT_LATER="Please reboot the system manually to complete the upgrade."
TEXT_LOG_ROTATION="Rotating log file..."
else
TEXT_USAGE="Verwendung: $0 [Optionen]"
TEXT_OPTIONS="Optionen:"
TEXT_AUTO_REBOOT="--auto-reboot Führt am Ende des Upgrades automatisch einen Neustart durch"
TEXT_ASSUME_YES="--assume-yes, --non-interactive Beantwortet alle Eingabeaufforderungen automatisch mit 'Ja'"
TEXT_KEEP_FOREIGN_PACKAGES="--keep-foreign-packages Behält Fremdpakete bei"
TEXT_KEEP_EXTERNAL_REPOS="--keep-external-repos Behält externe Repositories bei"
TEXT_HELP="-h, --help Zeigt diese Hilfe an"
TEXT_UNKNOWN_OPTION="Unbekannte Option: "
TEXT_ERROR="Fehler"
TEXT_ALREADY_RUNNING="Ein anderes Upgrade-Skript wird bereits ausgeführt."
TEXT_NOT_ROOT="Dieses Skript muss als root ausgeführt werden."
TEXT_STARTING="Starte Debian Upgrade Skript..."
TEXT_CHECK_FOREIGN="Überprüfe auf installierte Fremdpakete..."
TEXT_FOREIGN_FOUND="Es wurden Fremdpakete gefunden:"
TEXT_KEEPING_FOREIGN="Fremdpakete werden beibehalten aufgrund der Option --keep-foreign-packages."
TEXT_REMOVE_FOREIGN_PROMPT="Möchten Sie die Fremdpakete vor dem Upgrade entfernen? [j/N]: "
TEXT_REMOVING_FOREIGN="Entferne Fremdpakete..."
TEXT_NO_FOREIGN="Keine Fremdpakete gefunden."
TEXT_CHECK_EXTERNAL="Überprüfe auf nicht offizielle Debian-Repositories..."
TEXT_EXTERNAL_FOUND="Es wurden nicht offizielle Debian-Repositories gefunden:"
TEXT_KEEPING_EXTERNAL="Externe Repositories werden beibehalten aufgrund der Option --keep-external-repos."
TEXT_DISABLE_EXTERNAL_PROMPT="Möchten Sie die externen Repositories vor dem Upgrade deaktivieren? [j/N]: "
TEXT_DISABLING_EXTERNAL="Deaktiviere externe Repositories..."
TEXT_NO_EXTERNAL="Keine externen Repositories gefunden."
TEXT_CHECK_SPACE="Überprüfe den verfügbaren Speicherplatz..."
TEXT_LOW_SPACE="Warnung: Weniger als 5 GB freier Speicherplatz verfügbar. Dies könnte das Upgrade behindern."
TEXT_SPACE_OK="Genügend Speicherplatz verfügbar:"
TEXT_CHECK_PENDING_CONFIGS="Überprüfe auf ausstehende Konfigurationsänderungen..."
TEXT_PENDING_CONFIGS_FOUND="Es wurden ausstehende Konfigurationsänderungen gefunden:"
TEXT_HANDLE_PENDING_PROMPT="Möchten Sie die ausstehenden Konfigurationsänderungen jetzt bearbeiten? [j/N]: "
TEXT_RESOLVING_PENDING="Bearbeite ausstehende Konfigurationsänderungen..."
TEXT_NO_PENDING_CONFIGS="Keine ausstehenden Konfigurationsänderungen gefunden."
TEXT_CURRENT_VERSION="Aktuelle Debian-Version erkannt:"
TEXT_TARGET_VERSION="Ziel-Debian-Version:"
TEXT_ALREADY_UP_TO_DATE="Das System ist bereits auf dem neuesten Stand."
TEXT_UPGRADE_FROM_TO="Das System wird aktualisiert von"
TEXT_CHECK_CONNECTION="Überprüfe die Erreichbarkeit der Debian-Server..."
TEXT_SERVERS_REACHABLE="Debian-Server sind erreichbar."
TEXT_INVALID_VERSION="Fehler: Die Debian-Version '$TARGET_VERSION' ist nicht gültig oder nicht verfügbar."
TEXT_VALID_VERSION="Die Debian-Version '$TARGET_VERSION' ist gültig."
TEXT_BACKUP_SOURCES="Erstelle Backup der sources.list Dateien..."
TEXT_BACKUP_COMPLETED="Backup abgeschlossen und gespeichert unter:"
TEXT_UPDATING_SYSTEM="Aktualisiere das aktuelle System und behebe mögliche Paketfehler..."
TEXT_UPDATING_SOURCES="Aktualisiere Paketquellen auf"
TEXT_SOURCES_UPDATED="Paketquellen wurden erfolgreich geändert auf"
TEXT_UPGRADE_SYSTEM="Starte Systemaktualisierung auf Debian"
TEXT_MINIMAL_UPGRADE="Führe minimale Systemaktualisierung durch..."
TEXT_FULL_UPGRADE="Führe vollständige Systemaktualisierung durch..."
TEXT_UPGRADE_COMPLETE="Das Upgrade ist abgeschlossen. Das System muss neu gestartet werden, um alle Änderungen anzuwenden."
TEXT_REBOOT_PROMPT="Möchten Sie das System jetzt neu starten? [j/N]: "
TEXT_REBOOTING="System wird jetzt neu gestartet..."
TEXT_REBOOT_LATER="Bitte starten Sie das System manuell neu, um das Upgrade abzuschließen."
TEXT_LOG_ROTATION="Rotieren der Log-Datei..."
fi
}
# Sprache auswählen
select_language
set_language_strings
usage() {
echo "$TEXT_USAGE"
echo "$TEXT_OPTIONS"
echo " $TEXT_AUTO_REBOOT"
echo " $TEXT_ASSUME_YES"
echo " $TEXT_KEEP_FOREIGN_PACKAGES"
echo " $TEXT_KEEP_EXTERNAL_REPOS"
echo " $TEXT_HELP"
exit 0
}
# Kommandozeilenoptionen verarbeiten
while [[ $# -gt 0 ]]; do
case $1 in
--auto-reboot)
AUTO_REBOOT=true
shift
;;
--assume-yes|--non-interactive)
ASSUME_YES=true
shift
;;
--keep-foreign-packages)
KEEP_FOREIGN_PACKAGES=true
shift
;;
--keep-external-repos)
KEEP_EXTERNAL_REPOS=true
shift
;;
-h|--help)
usage
;;
*)
echo "$TEXT_UNKNOWN_OPTION$1"
usage
;;
esac
done
# Funktion zur Fehlerprüfung nach Befehlen
run_command() {
"$@"
local EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
log "$TEXT_ERROR: Command '$*' failed (Exit Code $EXIT_CODE)." >&2
exit $EXIT_CODE
fi
}
# Funktion für Logging mit Zeitstempel
log() {
local message="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$message"
echo "$message" >> "$LOGFILE"
}
# Logrotation implementieren
rotate_log() {
if [ -f "$LOGFILE" ]; then
local LOG_SIZE=$(stat -c%s "$LOGFILE")
local MAX_SIZE=$((10 * 1024 * 1024)) # 10 MB
if [ $LOG_SIZE -ge $MAX_SIZE ]; then
log "$TEXT_LOG_ROTATION"
mv "$LOGFILE" "$LOGFILE.$(date '+%Y%m%d%H%M%S')"
touch "$LOGFILE"
fi
fi
}
# Lock-File einrichten, um Mehrfachausführung zu verhindern
LOCKFILE="/tmp/debian-upgrade.lock"
exec 200>"$LOCKFILE"
flock -n 200 || { log "$TEXT_ALREADY_RUNNING"; exit 1; }
# Ziel-Debian-Version festlegen (kann angepasst werden)
TARGET_VERSION="bookworm" # Beispiel: "bookworm" für Debian 12
# Funktion zum Überprüfen der Erreichbarkeit der Debian-Server
check_connection() {
if command -v curl &> /dev/null; then
if ! curl -s --head http://deb.debian.org/ | grep "200 OK" > /dev/null; then
log "$TEXT_ERROR: Debian servers are not reachable. Please check your network connection." >&2
exit 1
fi
elif command -v wget &> /dev/null; then
if ! wget -q --spider http://deb.debian.org/; then
log "$TEXT_ERROR: Debian servers are not reachable. Please check your network connection." >&2
exit 1
fi
else
log "$TEXT_ERROR: Neither 'curl' nor 'wget' is installed. Installing 'curl'..."
run_command apt-get update -y
run_command apt-get install -y curl
if ! curl -s --head http://deb.debian.org/ | grep "200 OK" > /dev/null; then
log "$TEXT_ERROR: Debian servers are not reachable. Please check your network connection." >&2
exit 1
fi
fi
}
# Sicherstellen, dass das Skript als root ausgeführt wird
if [ "$(id -u)" -ne 0 ]; then
echo "$TEXT_NOT_ROOT" >&2
exit 1
fi
# Logging einrichten
LOGFILE="/var/log/debian-upgrade.log"
LOGDIR=$(dirname "$LOGFILE")
mkdir -p "$LOGDIR" # Log-Verzeichnis erstellen, falls nicht vorhanden
rotate_log # Logrotation prüfen
log "$TEXT_STARTING"
# Überprüfung auf installierte Fremdpakete
log "$TEXT_CHECK_FOREIGN"
if ! command -v aptitude &> /dev/null; then
run_command apt-get update -y
run_command apt-get install -y aptitude
fi
FOREIGN_PACKAGES=$(aptitude search '~i!~ODebian' -F '%p')
if [ -n "$FOREIGN_PACKAGES" ]; then
log "$TEXT_FOREIGN_FOUND"
log "$FOREIGN_PACKAGES"
if [ "$KEEP_FOREIGN_PACKAGES" = true ]; then
log "$TEXT_KEEPING_FOREIGN"
else
if [ "$ASSUME_YES" = true ]; then
REMOVE_FOREIGN="y"
else
echo -n "$TEXT_REMOVE_FOREIGN_PROMPT" > /dev/tty
read REMOVE_FOREIGN < /dev/tty
fi
if [[ "$REMOVE_FOREIGN" =~ ^[YyJj]$ ]]; then
log "$TEXT_REMOVING_FOREIGN"
run_command apt-get remove --purge -y $FOREIGN_PACKAGES
else
log "$TEXT_WARNING: Foreign packages may affect the upgrade."
fi
fi
else
log "$TEXT_NO_FOREIGN"
fi
# Überprüfung auf nicht offizielle Debian-Repositories
log "$TEXT_CHECK_EXTERNAL"
EXTERNAL_REPOS=$(grep -rE '^(deb|deb-src) ' /etc/apt/sources.list /etc/apt/sources.list.d/ | grep -vE 'debian\.org|security\.debian\.org|ftp\.debian\.org|deb\.debian\.org')
if [ -n "$EXTERNAL_REPOS" ]; then
log "$TEXT_EXTERNAL_FOUND"
log "$EXTERNAL_REPOS"
if [ "$KEEP_EXTERNAL_REPOS" = true ]; then
log "$TEXT_KEEPING_EXTERNAL"
else
if [ "$ASSUME_YES" = true ]; then
DISABLE_EXTERNAL="y"
else
echo -n "$TEXT_DISABLE_EXTERNAL_PROMPT" > /dev/tty
read DISABLE_EXTERNAL < /dev/tty
fi
if [[ "$DISABLE_EXTERNAL" =~ ^[YyJj]$ ]]; then
log "$TEXT_DISABLING_EXTERNAL"
while IFS= read -r LINE; do
FILE=$(echo "$LINE" | cut -d: -f1)
if [ -f "$FILE" ]; then
mv "$FILE" "${FILE}.disabled"
log "$TEXT_DISABLED: $FILE"
fi
done <<< "$EXTERNAL_REPOS"
else
log "$TEXT_WARNING: External repositories may affect the upgrade."
fi
fi
else
log "$TEXT_NO_EXTERNAL"
fi
# Überprüfung des verfügbaren Speicherplatzes
log "$TEXT_CHECK_SPACE"
FREE_SPACE=$(df --output=avail -BG / | tail -1 | tr -d 'G')
if [ "$FREE_SPACE" -lt 5 ]; then # 5 GB
log "$TEXT_LOW_SPACE"
exit 1
else
log "$TEXT_SPACE_OK ${FREE_SPACE}G"
fi
# Überprüfung auf ausstehende Konfigurationsänderungen
log "$TEXT_CHECK_PENDING_CONFIGS"
PENDING_CONFIGS=$(find /etc -name '*.dpkg-new' -o -name '*.ucf-dist')
if [ -n "$PENDING_CONFIGS" ]; then
log "$TEXT_PENDING_CONFIGS_FOUND"
log "$PENDING_CONFIGS"
if [ "$ASSUME_YES" = true ]; then
HANDLE_PENDING="y"
else
echo -n "$TEXT_HANDLE_PENDING_PROMPT" > /dev/tty
read HANDLE_PENDING < /dev/tty
fi
if [[ "$HANDLE_PENDING" =~ ^[YyJj]$ ]]; then
log "$TEXT_RESOLVING_PENDING"
for CONFIG_FILE in $PENDING_CONFIGS; do
ORIGINAL_FILE="${CONFIG_FILE%.dpkg-new}"
if [ -f "$ORIGINAL_FILE" ]; then
mv "$CONFIG_FILE" "$ORIGINAL_FILE"
log "Updated configuration: $ORIGINAL_FILE"
else
mv "$CONFIG_FILE" "$ORIGINAL_FILE"
log "Added new configuration: $ORIGINAL_FILE"
fi
done
else
log "$TEXT_WARNING: Pending configuration changes may affect the upgrade."
fi
else
log "$TEXT_NO_PENDING_CONFIGS"
fi
# Aktuelle Debian-Version automatisch erkennen
if ! command -v lsb_release &> /dev/null; then
run_command apt-get update -y
run_command apt-get install -y lsb-release
fi
CURRENT_VERSION=$(lsb_release -cs)
log "$TEXT_CURRENT_VERSION $CURRENT_VERSION"
log "$TEXT_TARGET_VERSION $TARGET_VERSION"
# Überprüfung, ob ein Upgrade erforderlich ist
if [ "$CURRENT_VERSION" == "$TARGET_VERSION" ]; then
log "$TEXT_ALREADY_UP_TO_DATE"
exit 0
fi
log "$TEXT_UPGRADE_FROM_TO $CURRENT_VERSION $TEXT_TO $TARGET_VERSION."
# Verbindungstest zu den Debian-Servern
log "$TEXT_CHECK_CONNECTION"
check_connection
log "$TEXT_SERVERS_REACHABLE"
# Automatische Überprüfung der Paketquellen
log "$TEXT_VALIDATING_VERSION '$TARGET_VERSION'..."
if ! curl -sI "http://ftp.debian.org/debian/dists/$TARGET_VERSION/Release" | grep -q "200 OK"; then
log "$TEXT_INVALID_VERSION" >&2
exit 1
fi
log "$TEXT_VALID_VERSION"
# Backup-Verzeichnis erstellen
BACKUP_DIR="/root/sources_backup_$(date +%Y%m%d%H%M%S)"
mkdir -p "$BACKUP_DIR"
log "$TEXT_BACKUP_SOURCES"
# Backup der sources.list und zugehöriger Dateien
run_command cp -r /etc/apt/sources.list* "$BACKUP_DIR"
log "$TEXT_BACKUP_COMPLETED $BACKUP_DIR"
# System auf den neuesten Stand bringen und Fehler beheben
log "$TEXT_UPDATING_SYSTEM"
run_command apt-get update -y
run_command apt-get upgrade -y
run_command apt-get dist-upgrade -y
run_command apt-get --fix-broken install -y
run_command apt-get --purge autoremove -y
run_command apt-get autoclean -y
# Paketquellen auf die neue Version ändern
log "$TEXT_UPDATING_SOURCES '$TARGET_VERSION'..."
for FILE in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
if [ -f "$FILE" ]; then
sed -i.bak -E "s/^(deb.* )(stable|testing|unstable|sid|$CURRENT_VERSION)( .*)/\1$TARGET_VERSION\3/" "$FILE"
if [ $? -ne 0 ]; then
log "$TEXT_ERROR beim Aktualisieren der Datei $FILE." >&2
exit 1
fi
fi
done
log "$TEXT_SOURCES_UPDATED '$TARGET_VERSION'."
# Systemaktualisierung auf die neue Debian-Version
log "$TEXT_UPGRADE_SYSTEM $TARGET_VERSION..."
run_command apt-get update -y
log "$TEXT_MINIMAL_UPGRADE"
run_command apt-get upgrade -y
log "$TEXT_FULL_UPGRADE"
run_command apt-get dist-upgrade -y
run_command apt-get --purge autoremove -y
run_command apt-get autoclean -y
# Letzter Neustart
log "$TEXT_UPGRADE_COMPLETE"
if [ "$AUTO_REBOOT" = true ]; then
if [ "$ASSUME_YES" = true ]; then
REBOOT_CONFIRM="y"
else
echo -n "$TEXT_REBOOT_PROMPT" > /dev/tty
read REBOOT_CONFIRM < /dev/tty
fi
if [[ "$REBOOT_CONFIRM" =~ ^[YyJj]$ ]]; then
log "$TEXT_REBOOTING"
reboot
else
log "$TEXT_REBOOT_LATER"
fi
else
log "$TEXT_REBOOT_LATER"
fi
Debian-Upgrade-Skript: Anleitung zur Nutzung
1. Skript ausführbar machen:
Um das Skript verwenden zu können, müssen Sie es zunächst ausführbar machen. Gehen Sie folgendermaßen vor:
- Speichern Sie das Skript als Datei, zum Beispiel
debian-upgrade.sh. - Öffnen Sie das Terminal.
- Navigieren Sie zu dem Verzeichnis, in dem sich die Datei befindet:bash
cd /pfad/zum/verzeichnis
Machen Sie die Datei ausführbar, indem Sie den folgenden Befehl ausführen:
chmod +x debian-upgrade.sh
2. Skript ausführen:
Um das Skript auszuführen, stellen Sie sicher, dass Sie als root oder mit sudo arbeiten, da das Skript Administratorrechte benötigt. Führen Sie dann folgenden Befehl im Terminal aus:
sudo ./debian-upgrade.sh
Wichtige Hinweise zur Nutzung:
- Root-Rechte: Das Skript muss als
rootausgeführt werden. Es überprüft automatisch, ob es mit ausreichenden Rechten läuft. Falls nicht, wird es mit einer entsprechenden Fehlermeldung beendet. - Interaktivität: Während des Ausführens werden Sie möglicherweise aufgefordert, bestimmte Entscheidungen zu treffen, wie z.B. das Entfernen von Fremdpaketen oder das Deaktivieren von PPA-Repositories. Lesen Sie die Meldungen aufmerksam durch und treffen Sie die entsprechenden Entscheidungen.
- System-Neustart: Nach dem Upgrade wird das Skript möglicherweise einen Neustart des Systems erfordern. Sie können den Neustart sofort durchführen oder später manuell vornehmen.
- Logdatei: Das Skript protokolliert den gesamten Upgrade-Prozess in der Datei
/var/log/debian-upgrade.log. Überprüfen Sie diese Datei, um sicherzustellen, dass das Upgrade erfolgreich war, und um eventuelle Probleme zu identifizieren.
Zusätzliche Tipps:
- Backup: Das Skript erstellt automatisch Backups der Paketquellen. Diese werden in einem Verzeichnis unter
/rootgespeichert, damit Sie bei Bedarf auf die alten Konfigurationen zurückgreifen können. - Verbindungstest: Das Skript überprüft vor dem Upgrade die Erreichbarkeit der Debian-Server, um sicherzustellen, dass keine Verbindungsprobleme den Upgrade-Prozess behindern.
Mit diesem Skript können Sie den Upgrade-Prozess auf einem Debian-System sicher und automatisiert durchführen, wobei mögliche Fallstricke wie Fremdpakete und Speicherplatzprobleme berücksichtigt werden.
Schreibe einen Kommentar