Automatisiertes Update-Script für verschiedene Linux-Distributionen mit optionaler E-Mail-Benachrichtigung und detailliertem Logging.
- Debian-basiert: Debian, Ubuntu, Linux Mint
- RedHat-basiert: RHEL, CentOS, Fedora, Rocky Linux, AlmaLinux
- SUSE-basiert: openSUSE (Leap/Tumbleweed), SLES
- Arch-basiert: Arch Linux, Manjaro, EndeavourOS, Garuda Linux, ArcoLinux
- Solus: Solus
- Void Linux: Void Linux
- ✅ Mehrsprachigkeit: Deutsch und Englisch (weitere Sprachen via Community)
- ✅ Desktop-Benachrichtigungen: Popup-Notifications für Updates, Upgrades, Fehler (v1.5.1)
- ✅ Upgrade-Check System: Automatische Erkennung verfügbarer Distribution-Upgrades (v1.5.0)
- ✅ Kernel-Schutz: Verhindert versehentliches Entfernen von Fallback-Kerneln (v1.5.0)
- ✅ Automatische Distribution-Erkennung
- ✅ Vollautomatische System-Updates
- ✅ Detailliertes Logging mit Zeitstempel
- ✅ Optionale E-Mail-Benachrichtigung (DMA empfohlen)
- ✅ Interaktives Installations-Script
- ✅ Cron-Job-Unterstützung für automatische Updates
- ✅ Optionaler automatischer Neustart
- ✅ Einfache Konfiguration über Config-Datei
❌ NICHT im Dateimanager doppelklicken!
Die Scripts müssen im Terminal ausgeführt werden, nicht durch Doppelklick im GUI-Dateimanager (Nautilus, Dolphin, Thunar, etc.).
✅ Korrekt - Terminal verwenden:
# Terminal öffnen (Strg+Alt+T oder über Anwendungsmenü)
# Dann ins Script-Verzeichnis wechseln:
cd ~/linux-update-script
./install.sh❌ Falsch:
- Doppelklick auf
install.shim Dateimanager - Script aus falschem Verzeichnis ausführen
- Alte/falsche Script-Versionen verwenden
Nach der Installation sollte die Struktur so aussehen:
~/linux-update-script/ ← Hier müssen die Scripts sein!
├── update.sh ← Haupt-Update-Script
├── install.sh ← Installations-Script
├── log-viewer.sh ← Log-Viewer
├── config.conf.example ← Konfigurations-Vorlage
├── config.conf ← Deine Konfiguration (nach Installation)
└── lang/ ← Sprachdateien
Falls du bereits frühere Versionen oder Test-Downloads hast:
# Prüfe was in deinem Verzeichnis liegt:
ls -la
# Lösche ALTE Versionen (z.B.):
# - system-update.sh ← Alter Name, NICHT verwenden!
# - README_mitMail.md ← Alte Doku, NICHT verwenden!Nur diese Scriptnamen sind offiziell:
- ✅
update.sh - ✅
install.sh - ✅
log-viewer.sh
Falls du Dateien mit anderen Namen siehst (z.B. system-update.sh), sind das alte/inoffizielle Versionen!
git clone herunterladen möchtest. Für die ZIP-Download-Methode (siehe unten) wird Git nicht benötigt.
Prüfen ob Git installiert ist:
git --versionGit installieren (falls nicht vorhanden):
# Debian/Ubuntu/Mint
sudo apt-get update
sudo apt-get install git
# RHEL/CentOS/Fedora/Rocky/AlmaLinux
sudo dnf install git
# openSUSE/SUSE
sudo zypper install git
# Arch Linux/Manjaro
sudo pacman -S git
# Solus
sudo eopkg install git
# Void Linux
sudo xbps-install -S gitOption A: Mit Git (empfohlen für einfache Updates)
Installation im Home-Verzeichnis:
cd ~
git clone https://github.com/nicolettas-muggelbude/Automatisiertes-Update-Script-fuer-Linux.git linux-update-script
cd linux-update-scriptInstallation in /opt (system-weit):
cd /opt
sudo git clone https://github.com/nicolettas-muggelbude/Automatisiertes-Update-Script-fuer-Linux.git linux-update-script
sudo chown -R $USER:$USER linux-update-script
cd linux-update-scriptVorteil: Einfaches Update mit git pull
Option B: Ohne Git (ZIP-Download)
Falls Git nicht verfügbar oder gewünscht:
# Download als ZIP
cd ~
wget https://github.com/nicolettas-muggelbude/Automatisiertes-Update-Script-fuer-Linux/archive/refs/heads/main.zip
# Oder mit curl:
curl -L -o main.zip https://github.com/nicolettas-muggelbude/Automatisiertes-Update-Script-fuer-Linux/archive/refs/heads/main.zip
# Entpacken
unzip main.zip
mv Automatisiertes-Update-Script-fuer-Linux-main linux-update-script
cd linux-update-script
# ZIP-Datei aufräumen (optional)
rm ~/main.zipHinweis: Bei ZIP-Download musst du bei Updates die ZIP-Datei erneut herunterladen und entpacken.
Ohne sudo ausführen (als normaler User):
./install.shHinweis: Das Installations-Script benötigt keine root-Rechte. Es erstellt nur die Konfigurationsdatei und richtet optional einen Cron-Job ein. Das eigentliche Update-Script (
update.sh) wird später mit sudo ausgeführt.
Das Installations-Script führt dich interaktiv durch die Einrichtung:
Schritt-für-Schritt:
-
E-Mail-Benachrichtigung aktivieren oder deaktivieren
- Bei Aktivierung: E-Mail-Adresse eingeben
- Script prüft automatisch, ob Mail-Programm installiert ist
- Zeigt distributionsspezifische Installationsanweisungen
-
Automatischer Neustart (optional)
- System wird automatisch neu gestartet, wenn Updates dies erfordern
-
Log-Verzeichnis (optional ändern)
- Standard:
/var/log/system-updates - Script legt Verzeichnis mit sudo an, falls nötig
- Standard:
-
Cron-Job einrichten (optional)
- Täglich um 3:00 Uhr
- Wöchentlich (Sonntag, 3:00 Uhr)
- Monatlich (1. des Monats, 3:00 Uhr)
- Benutzerdefiniert
- Script richtet automatisch im root-Crontab ein
Alle Schritte werden mit klaren Bestätigungsmeldungen quittiert.
Nach der Installation wird die Datei config.conf erstellt:
cat config.conf# Terminal öffnen (Strg+Alt+T)
# Ins Script-Verzeichnis wechseln:
cd ~/linux-update-script
# ODER bei /opt Installation:
cd /opt/linux-update-script
# Jetzt das Update-Script ausführen:
sudo ./update.shHäufiger Fehler:
# ❌ FALSCH - ohne cd ins richtige Verzeichnis:
sudo ./update.sh
# Fehler: ./update.sh: Datei oder Verzeichnis nicht gefunden
# ✅ RICHTIG - erst mit cd ins Verzeichnis:
cd ~/linux-update-script
sudo ./update.shDas Script führt automatisch folgende Schritte durch:
- System-Updates installieren
- Prüfung auf verfügbare Distribution-Upgrades
- Optional: E-Mail-Benachrichtigung versenden
- Optional: Desktop-Benachrichtigung anzeigen
NEU in v1.5.0: Das Script kann jetzt auch Distribution-Upgrades erkennen und durchführen.
Nach jedem erfolgreichen Update prüft das Script automatisch, ob ein Distribution-Upgrade verfügbar ist:
sudo ./update.sh
# [INFO] System-Update erfolgreich abgeschlossen
# [INFO] Prüfe auf verfügbare Distribution-Upgrades
# [INFO] Upgrade verfügbar: Ubuntu 22.04 → Ubuntu 24.04
# [INFO] Für Upgrade ausführen: sudo ./update.sh --upgradeUm ein verfügbares Distribution-Upgrade durchzuführen:
# Ins Script-Verzeichnis wechseln:
cd ~/linux-update-script
# Upgrade durchführen:
sudo ./update.sh --upgradeDas Script zeigt eine Backup-Warnung und fragt nach Bestätigung:
[WARNUNG] Erstelle ein Backup vor dem Upgrade!
Möchtest du das Upgrade durchführen? [j/N]: j
[INFO] Starte Upgrade zu Ubuntu 24.04
[INFO] Distribution-Upgrade erfolgreich abgeschlossen
- Debian/Ubuntu: Erkennt neue Release-Versionen (z.B. Ubuntu 22.04 → 24.04)
- Fedora: Erkennt neue Fedora-Versionen (z.B. Fedora 39 → 40)
- Arch/Manjaro: Prüft auf wichtige Updates (Rolling Release)
- Solus: Prüft auf ausstehende Updates (Rolling Release)
# Ins Script-Verzeichnis wechseln:
cd ~/linux-update-script
# Hilfe anzeigen:
sudo ./update.sh --helpWährend der Installation kannst du einen Cron-Job einrichten. Das Script richtet den Cron-Job automatisch im root-Crontab ein (du wirst einmal nach dem sudo-Passwort gefragt).
Verfügbare Optionen:
- Täglich um 3:00 Uhr
- Wöchentlich (Sonntag, 3:00 Uhr)
- Monatlich (1. des Monats, 3:00 Uhr)
- Benutzerdefiniert
Root-Cron-Jobs anzeigen:
sudo crontab -lRoot-Cron-Jobs bearbeiten:
sudo crontab -eDas Script unterstützt mehrere Sprachen. Die Sprache wird automatisch erkannt oder kann manuell konfiguriert werden.
- Deutsch (de) - German
- English (en) - English
Weitere Sprachen können von der Community beigetragen werden! Siehe lang/README.md für Anleitung.
Option 1: Automatische Erkennung (Standard)
Das Script erkennt automatisch die System-Sprache aus der LANG Umgebungsvariable.
Option 2: Manuelle Einstellung
In der config.conf:
# Sprache (auto|de|en)
LANGUAGE=de # Deutsch
LANGUAGE=en # English
LANGUAGE=auto # AutomatischOption 3: Temporär für einen Lauf
LANGUAGE=en sudo ./update.shWährend der Installation (./install.sh) wirst du nach deiner bevorzugten Sprache gefragt.
XDG-konform seit v1.6.0:
Die Konfigurationsdatei liegt jetzt standardmäßig in:
~/.config/linux-update-script/config.confVorteile:
- ✅ Config bleibt erhalten beim Script-Update (git pull)
- ✅ Linux-Standard-konform (XDG Base Directory Specification)
- ✅ Multi-User-fähig (jeder User eigene Config)
- ✅ Saubere Trennung von Code und Konfiguration
Automatische Migration:
Beim ersten Start nach Update auf v1.6.0 wird die alte Config automatisch migriert:
sudo ./update.sh
# [INFO] Migriere Konfiguration nach ~/.config/ (XDG-Standard)
# [INFO] Konfiguration erfolgreich migriert nach: ~/.config/linux-update-script/config.conf
# [INFO] Alte Konfiguration gesichert als: config.conf.migratedConfig-Pfade (Fallback-Reihenfolge):
~/.config/linux-update-script/config.conf(bevorzugt)/etc/linux-update-script/config.conf(system-weit)./config.conf(deprecated, wird in v2.0.0 entfernt)
Die Konfigurationsdatei config.conf enthält folgende Optionen:
# Sprache (auto|de|en)
LANGUAGE=auto
# E-Mail-Benachrichtigung aktivieren (true/false)
ENABLE_EMAIL=false
# E-Mail-Empfänger
EMAIL_RECIPIENT="admin@domain.de"
# Log-Verzeichnis
LOG_DIR="/var/log/system-updates"
# Automatischer Neustart bei Bedarf (true/false)
AUTO_REBOOT=false
# Kernel-Schutz (true/false)
# Verhindert autoremove wenn zu wenige Kernel installiert sind
KERNEL_PROTECTION=true
# Minimale Anzahl stabiler Kernel (Standard: 3)
MIN_KERNELS=3
# Upgrade-Check aktivieren (true/false)
# Prüft nach regulären Updates, ob Distribution-Upgrades verfügbar sind
ENABLE_UPGRADE_CHECK=true
# Automatisches Upgrade durchführen (true/false)
# WARNUNG: Kann Breaking Changes verursachen! Nur für erfahrene User
AUTO_UPGRADE=false
# Upgrade-Benachrichtigungen per E-Mail (true/false)
UPGRADE_NOTIFY_EMAIL=true
# Desktop-Benachrichtigungen aktivieren (true/false)
ENABLE_DESKTOP_NOTIFICATION=true
# Notification-Dauer in Millisekunden
NOTIFICATION_TIMEOUT=5000Option 1: Installations-Script erneut ausführen
./install.shOption 2: Config-Datei manuell bearbeiten
Ab v1.6.0 (XDG-konform):
nano ~/.config/linux-update-script/config.confVor v1.6.0 (deprecated):
cd ~/linux-update-script
nano config.confHinweis: Nach Bearbeitung der Config ist kein Neustart nötig - die Änderungen werden beim nächsten Script-Lauf übernommen.
Es gibt zwei verschiedene Arten von E-Mail-Benachrichtigungen:
| Art | Empfänger | Verwendung | Konfigurationsaufwand |
|---|---|---|---|
| Lokal | nicole, root |
Mails bleiben auf dem System | ⭐ Minimal (empfohlen!) |
| Extern | user@gmail.com |
Mails gehen raus ins Internet | ⚙️ Aufwändig (SMTP nötig) |
Empfehlung für Einsteiger: Start mit lokalen Mails - einfacher, funktioniert sofort!
Lokale Mails werden nicht ins Internet verschickt, sondern landen direkt in deiner Mailbox auf dem System.
✅ Vorteile:
- Keine externe SMTP-Konfiguration nötig
- Funktioniert sofort nach Installation
- Perfekt für System-Benachrichtigungen
- Keine Spam-Probleme
- Keine Internet-Verbindung erforderlich
./install.sh
# Bei der Frage:
E-Mail-Adresse oder Benutzername [dein-username]: dein-username ← Einfach Username!
# Beispiel: Wenn du als "max" eingeloggt bist → maxDas installiert automatisch:
- ✅ mailutils (liefert den
mail-Befehl) - ✅ DMA (DragonFly Mail Agent - leichtgewichtiger MTA)
Option 1: mail-Kommando (empfohlen)
# Mailbox öffnen
mail
# Ausgabe:
# Mail version 8.1.2 01/15/2001. Type ? for help.
# "/var/mail/max": 3 messages 2 new
# >N 1 max@hostname Sat Jan 25 10:30 23/699 Linux Update-Script - Test
# N 2 max@hostname Sat Jan 25 11:15 18/543 System-Update erfolgreich
# 3 max@hostname Sat Jan 25 12:00 21/612 System-Update FEHLGESCHLAGENWichtige Befehle im mail-Programm:
# Erste Mail lesen
& 1
# Nächste Mail
& n
# Mail löschen
& d 1
# Mehrere Mails löschen
& d 1-5
# Alle Mails löschen
& d *
# Beenden
& qOption 2: Direkt in Mailbox-Datei schauen
# Mailbox anzeigen (ersetze $USER mit deinem Username)
cat /var/mail/$USER
# Oder mit Pager (scrollbar)
less /var/mail/$USER
# Neueste Mails anzeigen
tail -50 /var/mail/$USEROption 3: Mailbox komplett leeren
# Alle Mails löschen (ersetze $USER mit deinem Username)
> /var/mail/$USER
# ODER
sudo rm /var/mail/$USEROption 4: Graphischer Mail-Client (für Desktop-User)
💡 Empfehlung: Für gelegentliches Lesen ist der mail-Befehl (Option 1) am einfachsten!
Falls du trotzdem eine GUI möchtest:
Thunderbird mit ImportExportTools NG:
# 1. Thunderbird installieren
sudo apt-get install thunderbird
thunderbirdIn Thunderbird:
-
Add-on installieren:
- Menü (☰) → Add-ons und Themes
- Suche: ImportExportTools NG
- Zu Thunderbird hinzufügen → Installieren
- Thunderbird neu starten
-
Mails importieren:
- Rechtsklick auf Lokale Ordner (linke Seitenleiste)
- ImportExportTools NG → Import mbox file
- Datei wählen:
/var/mail/$USER(z.B./var/mail/max) - OK → Mails werden importiert! ✓
-
Automatische Updates (optional):
- Rechtsklick auf den importierten Ordner
- ImportExportTools NG → Schedule automatic import
- Wähle
/var/mail/$USER - Intervall: z.B. alle 5 Minuten
Andere Clients:
Mutt (Terminal mit besserer UI als mail):
sudo apt-get install mutt
mutt # Liest automatisch /var/mail/$USEREvolution (GNOME), KMail (KDE): Unterstützen auch lokale mbox-Dateien, Setup ist aber aufwändiger.
Vorteile graphischer Clients:
- Übersichtliche GUI
- Suchfunktion, Sortierung
- Mehrere Mails gleichzeitig verwalten
Nachteile:
- Setup erforderlich
- Zusätzliche Software
- Für gelegentliche System-Mails übertrieben
💡 Unser Tipp: Start mit mail - wenn dir das nicht reicht, probiere Mutt (Terminal mit GUI-Feeling) oder Thunderbird (volle GUI).
# Einfache Test-Mail an dich selbst
echo "Dies ist ein Test" | mail -s "Test-Betreff" $USER
# Mit mehrzeiligem Text
mail -s "Mehrzeiliger Test" $USER << EOF
Zeile 1
Zeile 2
Zeile 3
EOF
# Mail lesen
mailProblem: Mails kommen nicht an
# 1. Prüfe ob mailutils installiert ist
command -v mail && echo "✓ mail vorhanden" || echo "✗ mail fehlt"
# 2. Prüfe ob DMA installiert ist
dpkg -l | grep dma
# 3. DMA-Queue prüfen (wartende Mails)
sudo mailq
# 4. DMA-Logs prüfen
sudo journalctl -u dma -n 50Problem: Bounce-Mails (Zustellfehler)
Wenn du versehentlich externe Adressen verwendet hast:
# Queue leeren (alle wartenden Mails löschen)
sudo rm -rf /var/spool/dma/*
# Bounces aus Mailbox löschen
mail
& d * # Alle löschen
& q
# Config korrigieren
nano ~/.config/linux-update-script/config.conf
# EMAIL_RECIPIENT="dein-username" ← Dein lokaler Username!Falls du Mails an externe Adressen (Gmail, Outlook, etc.) senden möchtest.
- Gültiger SMTP-Server (Gmail, Posteo, dein Provider)
- App-Passwort (bei Gmail, Outlook) NICHT dein normales Passwort!
- SMTP-Zugangsdaten (Server, Port, Username, Passwort)
# 1. DMA-Config bearbeiten
sudo nano /etc/dma/dma.confFür Gmail beispielsweise:
# SMTP-Server
SMARTHOST smtp.gmail.com
PORT 587
# Authentifizierung
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
STARTTLS
# Absender-Domain
MAILNAME gmail.com# 2. Zugangsdaten speichern
sudo nano /etc/dma/auth.confInhalt:
deine@gmail.com|smtp.gmail.com:dein-app-passwort
# 3. Berechtigungen setzen
sudo chmod 640 /etc/dma/auth.conf
sudo chown root:mail /etc/dma/auth.conf
# 4. Mailname setzen
echo "gmail.com" | sudo tee /etc/mailnameGmail App-Passwort erstellen:
- Google Account → Sicherheit
- 2-Faktor-Authentifizierung aktivieren
- App-Passwörter → Neues Passwort generieren
- Passwort in
/etc/dma/auth.confeintragen
# 1. ssmtp installieren
sudo apt-get install ssmtp
# 2. Konfiguration
sudo nano /etc/ssmtp/ssmtp.confFür Gmail:
root=deine@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=deine@gmail.com
AuthPass=dein-app-passwort
UseTLS=YES
UseSTARTTLS=YES
FromLineOverride=YES# Test-Mail an externe Adresse
echo "Test von $(hostname)" | mail -s "Externer Test" deine@gmail.com
# Queue prüfen (falls Mail wartet)
sudo mailq
# Logs prüfen
sudo tail -f /var/log/mail.logProblem: "Invalid HELO" oder "550 Rejected"
# MAILNAME muss gültige Domain sein!
sudo nano /etc/dma/dma.conf
# MAILNAME gmail.com ← NICHT "hostname.localdomain"!
echo "gmail.com" | sudo tee /etc/mailnameProblem: "Authentication failed"
# Prüfe App-Passwort (NICHT normales Passwort!)
sudo cat /etc/dma/auth.conf
# Format muss sein:
# user@gmail.com|smtp.gmail.com:16-stelliges-app-passwortProblem: Mails bleiben in Queue
# Queue anzeigen
sudo mailq
# Queue manuell abarbeiten (DMA)
sudo dma -q
# Oder Queue komplett leeren (ACHTUNG: löscht alle wartenden Mails!)
sudo rm -rf /var/spool/dma/*✅ Lokale Mails (dein-username, root)
✅ mailutils + DMA
✅ Keine SMTP-Konfiguration nötig
✅ Mails mit "mail" lesen
⚙️ Externe Mails (user@gmail.com)
⚙️ DMA oder ssmtp mit SMTP
⚙️ App-Passwörter einrichten
⚙️ MAILNAME konfigurieren
# 1. Installation
./install.sh
# Bei E-Mail: Deinen Benutzernamen eingeben (z.B. max, anna, peter)
# Tipp: Aktueller Username wird automatisch vorgeschlagen!
# 2. Test-Mail senden (ersetze mit deinem Username)
echo "Test" | mail -s "Test" $USER
# 3. Mails lesen
mail
# Fertig! ✓NEU in v1.5.1: Das Script zeigt Popup-Benachrichtigungen für wichtige Events!
Desktop-Benachrichtigungen werden angezeigt bei:
- ✅ Update erfolgreich: Grüner Hinweis nach abgeschlossenem Update
- ✅ Upgrade verfügbar: Info über neue Distribution-Version
- ✅ Update fehlgeschlagen: Kritische Warnung bei Fehler
- ✅ Neustart erforderlich: Hinweis wenn Reboot nötig
# Debian/Ubuntu/Mint
sudo apt-get install libnotify-bin
# Fedora/RHEL
sudo dnf install libnotify
# Arch Linux
sudo pacman -S libnotify
# openSUSE
sudo zypper install libnotify-tools- GNOME
- KDE Plasma
- XFCE
- Cinnamon
- MATE
- LXQt
- Budgie
# In config.conf
# Desktop-Benachrichtigungen aktivieren
ENABLE_DESKTOP_NOTIFICATION=true
# Notification-Dauer (Millisekunden)
NOTIFICATION_TIMEOUT=5000Hinweis: Funktioniert automatisch auch wenn Script als sudo ausgeführt wird - Notifications werden für den eigentlichen User angezeigt.
Alle Updates werden in Logdateien mit Zeitstempel gespeichert:
/var/log/system-updates/update_YYYY-MM-DD_HH-MM-SS.log
Interaktiver Log Viewer (empfohlen):
# Ins Script-Verzeichnis wechseln:
cd ~/linux-update-script
# Log-Viewer starten:
./log-viewer.shDer Log Viewer bietet folgende Optionen:
- Neueste Logdatei komplett anzeigen
- Letzte 50 Zeilen des neuesten Logs
- Alle Logdateien auflisten
- Nach Fehlern in Logs suchen
- Beenden
Manuelle Log-Anzeige:
Neueste Logdatei komplett:
cat /var/log/system-updates/$(ls -t /var/log/system-updates/ | head -n 1)Letzte 50 Zeilen:
tail -n 50 /var/log/system-updates/$(ls -t /var/log/system-updates/ | head -n 1)Alle Logdateien auflisten:
ls -lth /var/log/system-updates/Lösung: Script muss als root ausgeführt werden
sudo ./update.shLösung: Prüfen ob /etc/os-release existiert
cat /etc/os-releaseFehlermeldung: "Cannot start /usr/sbin/sendmail"
Dies bedeutet, dass kein MTA (Mail Transfer Agent) installiert ist.
Lösung:
# Option 1: Einfacher MTA (ssmtp für Gmail, etc.)
sudo apt install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# Option 2: Vollwertiger MTA
sudo apt install postfix
# Während Installation: "Internet Site" wählenÜberprüfungen:
-
Ist
mailutilsodermailxinstalliert?which mail which sendmail
-
Ist ein MTA installiert?
systemctl status postfix # oder dpkg -l | grep ssmtp
-
Ist die E-Mail-Adresse korrekt in
config.conf?cat config.conf | grep EMAIL -
Ist E-Mail aktiviert?
cat config.conf | grep ENABLE_EMAIL -
Test-E-Mail senden:
echo "Test" | mail -s "Test" deine@email.de # Prüfe /var/log/mail.log für Fehler
Lösung: Script beim ersten Mal als root ausführen
sudo ./update.shOder Log-Verzeichnis manuell erstellen:
sudo mkdir -p /var/log/system-updates
sudo chown $USER:$USER /var/log/system-updatesÜberprüfungen:
-
Ist der Cron-Job korrekt eingetragen?
crontab -l
-
Prüfen Sie die Cron-Logs:
tail -f /var/log/cron.log # oder tail -f /var/log/system-updates/cron.log -
Script-Pfad absolut angeben:
# Beispiel für Installation im Home-Verzeichnis: 0 3 * * * /home/USERNAME/linux-update-script/update.sh # Beispiel für Installation in /opt: 0 3 * * * /opt/linux-update-script/update.sh
Hinweis: Ersetze
USERNAMEmit deinem tatsächlichen Benutzernamen oder verwende den absoluten Pfad zu deiner Installation.
Das Update-Script selbst kann auf neue Versionen aktualisiert werden. Die Methode hängt davon ab, wie du es installiert hast.
Vorteil: Einfachstes Update-Verfahren, Config bleibt automatisch erhalten
# Ins Script-Verzeichnis wechseln
cd ~/linux-update-script
# Oder bei /opt Installation:
cd /opt/linux-update-script
# Neueste Version holen
git pull
# Beim ersten Start nach Update auf v1.6.0+ wird Config automatisch migriert
sudo ./update.shDeine Config bleibt erhalten! Seit v1.6.0 liegt die Config in ~/.config/linux-update-script/ und wird bei git pull nicht überschrieben.
Wenn du das Script als ZIP heruntergeladen hast:
# WICHTIG: Zuerst Config sichern (nur bei v1.5.1 oder früher nötig)
# Seit v1.6.0 liegt Config in ~/.config/ und muss nicht gesichert werden
cp ~/linux-update-script/config.conf ~/config.conf.backup 2>/dev/null || true
# Alte Version löschen
rm -rf ~/linux-update-script
# Neue Version herunterladen
cd ~
wget https://github.com/nicolettas-muggelbude/Automatisiertes-Update-Script-fuer-Linux/archive/refs/heads/main.zip
unzip main.zip
mv Automatisiertes-Update-Script-fuer-Linux-main linux-update-script
# Alte Config wiederherstellen (nur bei v1.5.1 oder früher)
# Seit v1.6.0 liegt Config in ~/.config/ und wird automatisch gefunden
if [ -f ~/config.conf.backup ]; then
cp ~/config.conf.backup ~/linux-update-script/config.conf
rm ~/config.conf.backup
fi
# Aufräumen
rm main.zipTipp: Bei regelmäßigen Updates ist die Git-Methode deutlich einfacher!
cd ~/linux-update-script
# Wenn dieser Befehl ein Git-Repository zeigt, hast du mit git clone installiert:
git status
# Wenn Fehler "not a git repository", hast du ZIP-Download verwendetDie Version wird im Script angezeigt oder kann in den Dateien nachgeschaut werden:
# In CHANGELOG.md (erste Zeilen)
head -20 ~/linux-update-script/CHANGELOG.md | grep "##"NEU in v1.5.0: Das Script schützt automatisch vor versehentlichem Entfernen von Fallback-Kerneln.
- Zählt installierte stabile Kernel-Versionen vor
autoremove - Überspringt
autoremovewenn weniger alsMIN_KERNELSvorhanden - Standard: Mindestens 3 Kernel (aktuell laufend + 2 Fallback-Versionen)
- Unterstützt Debian/Ubuntu und RHEL/Fedora
sudo ./update.sh
# [INFO] Prüfe installierte Kernel-Versionen
# [INFO] Gefunden: 5 stabile Kernel-Versionen
# [INFO] Aktuell laufend: 6.5.0-28-generic
# [INFO] Genügend Kernel vorhanden, führe autoremove ausWenn zu wenige Kernel vorhanden:
# [WARNUNG] Nur 2 Kernel gefunden, überspringe autoremove zur Sicherheit
# [INFO] Minimum erforderlich: 3 stabile Kernel (aktuell + Fallbacks)
# [INFO] Kernel-Schutz aktiv: Mindestens 2 stabile Kernel werden behalten# Kernel-Schutz deaktivieren (nicht empfohlen)
KERNEL_PROTECTION=false
# Mindestanzahl ändern
MIN_KERNELS=5 # Behält mehr Fallback-KernelNEU in v1.6.0: Das Script prüft automatisch die NVIDIA-Treiber-Kompatibilität VOR Kernel-Updates!
Proprietäre NVIDIA-Treiber müssen nach Kernel-Updates neu kompiliert werden (DKMS). Ohne funktionierende Treiber startet das System nach dem Neustart möglicherweise nicht richtig:
- Schwarzer Bildschirm
- Kein X11/Wayland
- System bootet in Textmodus
Das Script prüft vor dem Update:
- Ob NVIDIA-Treiber installiert sind
- Welcher Kernel im Update verfügbar ist
- Ob DKMS-Module für den neuen Kernel existieren
- Bietet automatischen DKMS-Rebuild an
sudo ./update.sh
# [INFO] NVIDIA-Treiber erkannt: 535.129.03
# [INFO] Prüfe NVIDIA-Treiber-Kompatibilität
# [INFO] Kernel-Update verfügbar: 6.5.0-35-generic
# [INFO] Prüfe DKMS-Status für Kernel 6.5.0-35-genericFalls DKMS-Module fehlen:
# [WARNUNG] DKMS-Module müssen für neuen Kernel neu gebaut werden
# Möchtest du DKMS-Module jetzt neu bauen? [j/N]: j
# [INFO] Führe DKMS autoinstall durch...
# [INFO] DKMS-Module erfolgreich neu gebautFalls DKMS-Rebuild fehlschlägt:
# [FEHLER] Fehler beim Neu-Bauen der DKMS-Module
# [WARNUNG] Trotzdem mit Update fortfahren? [j/N]: n
# [INFO] Update abgebrochen - bitte NVIDIA-Treiber aktualisierenFür Server/automatisierte Umgebungen kannst du den Rebuild automatisieren:
# In config.conf:
NVIDIA_AUTO_DKMS_REBUILD=trueDas Script führt dann dkms autoinstall automatisch durch, ohne nachzufragen.
Wenn Secure Boot aktiv ist, müssen NVIDIA-Module nach dem DKMS-Build signiert werden:
# [INFO] Secure Boot ist aktiv
# [INFO] Prüfe MOK (Machine Owner Key) Status
# [INFO] MOK-Schlüssel gefunden
# [INFO] Signiere NVIDIA-Module mit MOK
# [INFO] Module erfolgreich signiertMOK-Keys enrollen (einmalig erforderlich):
# Generiere MOK-Schlüssel (falls nicht vorhanden)
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
# Beim nächsten Neustart: MOK Management Utility nutzen
# Passwort eingeben und Key enrollenAutomatische Signierung:
# In config.conf:
NVIDIA_AUTO_MOK_SIGN=trueProblem: NVIDIA unterstützt manchmal neue Kernel-Versionen noch nicht offiziell.
Standard-Verhalten (sicherer Modus):
Das Script testet DKMS-Build vor dem Update. Bei Inkompatibilität:
# [WARNUNG] NVIDIA-Treiber 535.129.03 unterstützt Kernel 6.8.0-40 noch nicht
# [WARNUNG] Kernel-Update wird zurückgehalten (sicherer Modus)
# [INFO] Kernel erfolgreich zurückgehalten: linux-image-generic
# [INFO] Kernel wird NICHT aktualisiert bis NVIDIA-Treiber bereit ist
# [INFO] Später freigeben mit: sudo apt-mark unhold linux-image-genericDas Update läuft weiter und installiert alle anderen Pakete - nur der Kernel wird übersprungen!
Kernel später freigeben:
# Debian/Ubuntu
sudo apt-mark unhold linux-image-generic linux-headers-generic
# RHEL/Fedora
sudo dnf versionlock delete kernel kernel-core kernel-modules
# openSUSE
sudo zypper removelock kernel-default
# Arch (manuelle /etc/pacman.conf Bearbeitung)
# Entferne: IgnorePkg = linux linux-headersFür erfahrene Benutzer, die trotz offiziell nicht unterstützter Kernel ein Update wagen:
# In config.conf:
NVIDIA_ALLOW_UNSUPPORTED_KERNEL=trueWarnung beim Update:
# [WARNUNG] Power-User-Modus: Versuche Update trotz Warnung
# [WARNUNG] WARNUNG: Risiko von Instabilität oder schwarzem Bildschirm
# Möchtest du DKMS-Module jetzt neu bauen? [j/N]: j- System bootet nicht mehr (schwarzer Bildschirm)
- Kein GUI, nur Textmodus
- NVIDIA-Features funktionieren nicht
- Instabilität und Abstürze
Empfehlung: Nur aktivieren wenn du weißt was du tust und Fallback-Kernel vorhanden sind!
# NVIDIA-Prüfung komplett deaktivieren (nicht empfohlen)
NVIDIA_CHECK_DISABLED=true
# Automatischer DKMS-Rebuild ohne Nachfrage
NVIDIA_AUTO_DKMS_REBUILD=true
# Power-User Modus: Nicht unterstützte Kernel erlauben (risikoreich!)
NVIDIA_ALLOW_UNSUPPORTED_KERNEL=false # Standard: false = sicher
# Automatische MOK-Signierung für Secure Boot
NVIDIA_AUTO_MOK_SIGN=falseFür automatischen DKMS-Rebuild:
# Debian/Ubuntu
sudo apt-get install dkms
# RHEL/Fedora
sudo dnf install dkms
# Arch Linux
sudo pacman -S dkmsDie NVIDIA-Prüfung funktioniert auf allen unterstützten Distributionen:
- ✅ Debian/Ubuntu/Mint (apt-cache)
- ✅ RHEL/Fedora/CentOS/Rocky/AlmaLinux (dnf/yum)
- ✅ Arch Linux/Manjaro/EndeavourOS/Garuda/ArcoLinux (pacman)
- ✅ openSUSE/SLES (zypper)
- ✅ Solus (eopkg)
- ✅ Void Linux (xbps-query)
Falls du DKMS manuell neu bauen möchtest:
# Für alle NVIDIA-Module
sudo dkms autoinstall
# Für spezifischen Kernel
sudo dkms autoinstall -k 6.5.0-35-generic- Das Script benötigt root-Rechte für System-Updates
- Backup empfohlen vor Distribution-Upgrades
- Konfigurationsdatei enthält keine sensiblen Daten
- E-Mail-Passwörter werden nicht im Script gespeichert
- Logs können sensible Systeminformationen enthalten
- Kernel-Schutz verhindert Bootprobleme durch fehlende Fallback-Kernel
crontab -e
# Zeile mit update.sh löschenFür Installation im Home-Verzeichnis:
rm -rf ~/linux-update-script
sudo rm -rf /var/log/system-updatesFür Installation in /opt:
sudo rm -rf /opt/linux-update-script
sudo rm -rf /var/log/system-updatesDieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE Datei für Details.
Bei Problemen oder Fragen:
- Prüfe die Logdateien
- Überprüfen die Konfiguration
- Stelle sicher, dass alle Voraussetzungen erfüllt sind
Die vollständige Versionshistorie findest du in der CHANGELOG.md Datei.
Highlights:
- ✅ NEU: Desktop-Benachrichtigungen - Popup-Notifications für wichtige Events
- Benachrichtigungen bei Update-Erfolg, Upgrade verfügbar, Fehler, Neustart
- Funktioniert automatisch auch als root
- Unterstützt GNOME, KDE, XFCE, Cinnamon, MATE, LXQt, Budgie
- ✅ NEU: DMA-Empfehlung - Einfachste Lösung für E-Mail-Benachrichtigungen
- Keine Konfiguration nötig
- Kein laufender Dienst, kein offener Port
- Perfekt für lokale Mails
- ✅ Upgrade-Check System (v1.5.0)
- ✅ Kernel-Schutz (v1.5.0)
- ✅ ShellCheck-konform (keine Warnungen)
Version 1.4.0:
- ✅ ShellCheck-Warnungen behoben
- ✅ Code-Qualität verbessert
Version 1.3.0:
- ✅ Solus Unterstützung (Community Beitrag von @mrtoadie)
- ✅ Void Linux Unterstützung (Community Beitrag von @tbreswald)
- ✅ GitHub Repository professionell eingerichtet
Siehe CHANGELOG.md für alle Details