cron-apt

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Einen Editor öffnen

  4. Root-Rechte

Inhaltsverzeichnis
  1. Installation
  2. Einrichtung
    1. Wichtige Konfigurationsdateien
    2. Zeitsteuerung
  3. Cron-apt testen
  4. Besondere Fälle
    1. Updates automatisch installieren
    2. Spezielle sources.list
    3. Aptitude, apt-get oder apt-file benutzen...
  5. Links

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:

Paketliste zum Kopieren:

sudo apt-get install cron-apt 

Oder mit apturl die Pakete 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).