cron-apt
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Das Programm cron-apt 🇬🇧 hat den Zweck, (Sicherheits-)Updates automatisch herunterzuladen und auf Wunsch zu installieren. Eine ähnliche Funktionalität bietet auch Synaptic, jedoch wird cron-apt durch Einträge in der crontab gestartet und benötigt keinen angemeldeten Benutzer und/oder eine Passworteingabe vor dem Durchführen der Aktionen. Dies kann vor allem bei Systemen hilfreich sein, die nur sporadisch von einem menschlichen Administrator gewartet werden können. Ebenso ist eine Einrichtung für das automatische Installieren von Sicherheitsupdates auf Servern zu empfehlen.
Jegliche Verwendung benötigt Root-Rechte[4].
Installation¶
Folgendes Paket muss installiert [1] werden:
cron-apt (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install cron-apt
Oder mit apturl installieren, Link: apt://cron-apt
Einrichtung¶
Die Konfigurationsdateien von cron-apt liegen im Verzeichnis /etc/cron-apt/.
Wichtige Konfigurationsdateien¶
Neben der Hauptkonfigurations-Datei /etc/cron-apt/config befinden sich nach der Installation die wichtigsten Konfigurationsdateien im Ordner /etc/cron-apt/action.d.
config¶
Im Folgenden werden die wichtigsten Einstellungsmöglichkeiten in der config-Datei erläutert:
Einstellungsmöglichkeiten von config | ||
Parameter | Wert | Beschreibung |
APTCOMMAND | /usr/bin/aptitude | Pfad zum Paketmanager, der von cron-apt verwendet werden soll. Hier wird aptitude verwendet, weitere Möglichkeiten sind apt-get oder apt-file |
MAILTO | "Deine@Emailadresse.de; Weitere@Emailadresse" | An diese E-Mailadressen werden Benachrichtigungen versendet. (Beispiel nach einem Upgrade ⮷ ) |
MAILON | upgrade | Benachrichtigungen werden nur bei einem Paketupgrade verschickt. Man kann sich auch immer benachrichtigen lassen (always ) oder auch nur bei Fehlern (error ). |
action.d/0-update¶
Der Inhalt der Datei ist:
update -o quiet=2
Experten-Info:
Die Parameter bewirken ein Update der Paketquellen, die auch von aptitude oder apt-get (zu finden unter /etc/apt/sources.list) benutzt werden. Die Ausgabe wird bis auf eine Zeile unterdrückt (Parameter -o quiet=2
). Weitere Parameter kann man den Manpages von aptitude bzw. apt-get entnehmen.
action.d/3-download¶
In dieser Datei steht:
autoclean -y dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
Der erste Befehl bewirkt das Löschen veralteter Pakete aus dem Paketcache. Anschließend werden Updates herunter geladen und angezeigt, aber nicht installiert. Der Parameter -d
weist den Paketmanager an, die neuen Pakete nur herunter zu laden. Auszug aus der Man-Page von aptitude:
-d, --download-only Die erforderlichen Paketdateien herunterladen und im Paketcache speichern, aber nichts installieren oder löschen.
Weitergehende Einstellungen¶
Wenn man die Updates nicht nur herunter laden, sondern sich auch darüber informieren lassen will, dann ist unter /usr/share/doc/cron-apt/examples/9-notify ein Beispiel vorhanden, um das zu verwirklichen:
-q -q --no-act upgrade
Die Datei muss nach /etc/cron-apt/action.d/ kopiert werden und in /etc/cron-apt/config muss die Mailadresse angegeben werden, an die die Nachrichten verschickt werden soll. Weiterhin muss das Ereignis definiert werden, wann eine Nachricht gesendet werden soll (siehe config-Datei).
Zeitsteuerung¶
In der Standard-Installation würde bei einem dauerhaft online befindlichen System cron-apt immer um 04:00 Uhr ausgeführt werden. Dies ist geregelt unter /etc/cron.d/cron-apt:
# Every night at 4 o'clock. 0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt # Every hour. # 0 * * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2 # Every five minutes. # */5 * * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2
Bei einem nicht dauerhaft online befindlichen System würde dieser Croneintrag dazu führen, dass bei Systemstart cron-apt ausgeführt werden würde. Wenn dies nicht gewünscht ist, sollte dieser Eintrag gelöscht werden und statt dessen ein Eintrag in cron.daily, cron.hourly oder cron.weekly mit einem Softlink (Symlink) erstellt werden:
ln -s /usr/sbin/cron-apt /etc/cron.daily/cron-apt
Experten-Info:
In der Config-Datei von cron-apt kann ein zufälliger Offset eingerichtet werden, der die Zeit der Ausführung um eine gewisse Dauer versetzt (RUNSLEEP=3600
). Diese Einstellung würde ein Update zwischen 04:00 und 05:00 Uhr bewirken, obwohl der Cron-Job um 04:00 Uhr gestartet wird. Dies ist hilfreich um die Server, die die Updates bereitstellen, nicht zu einem gewissen Zeitpunkt zu sehr zu belasten.
Cron-apt testen¶
Um cron-apt zu testen, im Terminal[2] den folgenden Befehl ausführen:
sudo cron-apt -s
Besondere Fälle¶
Updates automatisch installieren¶
Unter /etc/cron-apt/action.d/3-download das -d
(only download) entfernen.
Zusätzlich sollte unter Startprogramme die Aktualisierungsbenachrichtigung deaktiviert werden. Sonst wird der Benutzer einer grafischen Desktop-Umgebung über Updates informiert, wenn im Hintergrund eine Updateprüfung Updates gefunden hat. Das würde nur dazu verleiten, die Updates selbst zu starten. Dann würden aber zwei Updates gleichzeitig angestoßen, was zu Fehlermeldungen führt.
Außerdem sollte in den Einstellungen der Aktualisierungsverwaltung (unter dem Reiter Aktualisierungen) "Automatische Aktualisierungen" deaktiviert werden.
Achtung!
Es kann passieren, dass der Benutzer das System herunterfährt, während Updates installiert werden, da die Updates ja nun im Hintergrund stattfinden. Dies kann zu einem nicht mehr bootbarem System führen. Eine Lösung wäre es, den Rechner so einzustellen, dass er nicht mehr herunterfährt, sondern stattdessen in den Ruhezustand geht.
Ein anderer Workaround für dieses Problem ist das Paket unattended-upgrades. Dieses stellte einen Mechanismus bereit, um das Herunterfahren zu verzögern, bis die Updates installiert sind. Mithilfe dieses Scripts, das anstelle des eigentlichen cron-apt-Befehls aufgerufen wird, sollte man auf der sicheren Seite sein:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh # create lockfile so the shutdown ist postponed when cron-apt is running python -c 'import apt_pkg, gtk; apt_pkg.get_lock("/var/run/unattended-upgrades.lock"); gtk.main()' & # execute cron-apt /usr/sbin/cron-apt # remove lockfile after end of cron-apt rm -rf /var/run/unattended-upgrades.lock |
Das Paket unattended-upgrades ist standardmäßig installiert und prüft beim Herunterfahren in /etc/init.d/unattended-upgrades auf Vorhandensein eines Lockfiles in /var/run/. Außerdem wird das Paket python-gtk2 benötigt, um den Lock zu erzeugen (auch dieses Paket sollte standardmäßig installiert sein, fehlt aber bei der Server-Variante von Ubuntu).
Spezielle sources.list¶
Man kann cron-apt eine spezielle sources.list zuweisen, um beispielsweise nur security-updates einspielen zu können. Dazu setzt man den entsprechenden Pfad in /etc/cron-apt/config:
OPTIONS="-q -o Dir::Etc::SourceList=/etc/apt/security-sources.list"
Dieser Eintrag würde cron-apt veranlassen, die Datei /etc/apt/security-sources.list als Quellenangabe zu verwenden. Eine mögliche security-sources.list sieht zum Beispiel so aus:
deb http://security.ubuntu.com/ubuntu precise-security main restricted multiverse universe deb-src http://security.ubuntu.com/ubuntu precise-security restricted main multiverse universe
Aptitude, apt-get oder apt-file benutzen¶
cron-apt kann verschiedene Paketmanager verwenden (aptitude, apt-get oder apt-file). In der Datei /etc/cron-apt/config ist der entsprechende Wert einzusetzen (siehe APTCOMMAND).
Hinweis:
Es ist darauf zu achten, dass einige Parameter in den Config-Dateien verändert werden müssen, wie beispielsweise -o quiet
statt -q
in der Datei 0-update bei Verwendung von apt-get statt aptitude).
Links¶
APT Übersichtsseite