apt-get / aptitude

Steuerung über die APT-Konfiguration

Wie der lokale Paket-Manager funktioniert kann man nicht nur per Script und Cronjobs sondern auch über die umfangreiche APT-Konfigurations-Syntax steuern. Die wichtigsten Parameter sind direkt im standardmäßig angelegten Cronjob „/etc/cron.daily/apt“ beschrieben.

Konfiguration eines Apt-Proxys

Dazu einfach unter

/etc/apt/apt.conf.d/

eine Konfigurations-Datei anlegen:

vi /etc/apt/apt.conf.d/01proxy

und in diese den folgenden Inhalt schreiben:

Acquire::http::Proxy "http://[[user][:pass]@]host[:port]/";

Hier z.B. die Konfiguration wenn lokal der apt-cacher installiert wurde:

Acquire::http::Proxy "http://localhost:3128/";

Automatische Installation von Sicherheits-Updates

Dafür ist erst einmal das zusätzliche Paket „unattended-upgrades“ notwendig.

aptitude install unattended-upgrades

Mit der Installation wird die notwendige Konfigurationsdatei „/etc/apt/apt.conf.d/50unattended-upgrades“ (beschrieben für Debian)

// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
 "${distro_id} stable";
 "${distro_id} ${distro_codename}-security";
// "${distro_id} ${distro_codename}-updates";
// "${distro_id} ${distro_codename}-proposed-updates";
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
 "^linux-image.*";
};

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
//Unattended-Upgrade::Mail "root@localhost";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";

installiert. Hier wird bestimmt, welche Pakete automatisch installiert bzw. von der automatischen Installation ausgenommen werden. Man kann sich auch per Email bei Fehlern benachrichtigen lassen.

Damit sind die automatischen Updates aber noch nicht aktiv!

Dafür müssen erst die folgenden drei Zeilen

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

in die Datei „/etc/apt/apt.conf.d/10periodic“ geschrieben/angehängt werden. Durch diese zwei Zeilen werden die Paket-Listen einmal täglich aktualisiert und die Pakete, die in „/etc/apt/apt.conf.d/50unattended-upgrades“ konfiguriert sind, installiert.

Für die Benamung der Datei habe ich bisher noch keine Beschreibung gefunden. Da diese für die Funktion aber ohne Bedeutung ist, habe ich mich nach dem Eintrag im Ubuntu-Wiki gerichtet, in dem ich diese Konfiguration auch gefunden habe.

Die Ausführung erfolgt dann durch das vorhandene APT-Script „/etc/cron.daily/apt“, das täglich ausgeführt wird.

Update-Download

Wer möchte kann sich die anstehenden Updates ja bereits downloaden. Dann braucht es bei der Installation nicht so lange. Dazu muss man einfach eine Zeile der umfangreichen APT-Konfiguration aktivieren, in dem man sie in eine Datei unterhalb von „/etc/apt/apt.conf.d/“ schreibt.

Hat man es z.B. wie oben bei den automatischen Updates eingerichtet, kann man die folgende Zeile in die Datei „/etc/apt/apt.conf.d/10periodic“ eintragen:

APT::Periodic::Download-Upgradeable-Packages "1";

Damit werden die anstehenden Update-Dateien einmal täglich heruntergeladen, aber nicht installiert.

Cache aufräumen

Damit das standardmäßig vorhandene Script „/etc/cron.daily/apt“ auch das Aufräumen übernimmt, braucht man nur eine Zeile aktivieren.

APT::Periodic::AutocleanInterval "7";

Damit wird „apt-get autoclean“ alle 7 Tage ausgeführt.

Logs rotieren

Ich richte immer noch eine erweiterte Konfiguration für logrotate ein.

Fehlerbehebung

Wer seine anstehenden Linux-Updates per Nagios/Icinga überwacht, kann nach dem manuellen Neuanlegen der o.g. Dateien auf folgenden Fehler treffen:

'/usr/bin/apt-get -o 'Debug::NoLocking=true' -s -qq upgrade' exited with non-zero status.
APT WARNING: 0 packages available for upgrade (0 critical updates). warnings detected, errors detected. run with -v for information

Beim Testen des angezeigten Befehls treten wie immer keine Fehler auf. Man ist ja root. Also sollte der Befehl als der Benutzer ausgeführt werden, unter dem die Monitoring-Software läuft:

su <monitoringbenutzer> -s /bin/bash

Der Parameter -s für die Shell ist optional, aber bei Systembenutzern ohne Shell notwendig. Danach sieht man dann erst den eigentlichen Fehler:

/usr/bin/apt-get -o 'Debug::NoLocking=true' -s -qq upgrade
E: Konfigurationsdatei /etc/apt/apt.conf.d/10periodic wird geöffnet - ifstream::ifstream (13: Keine Berechtigung)

Einfach Leseberechtigungen für „Others“ auf die gemeldete Datei setzen und schon klappt’s mit dem Nachbarn ;-). Bei mir war die Ursache die restriktiv gesetzte UMASK im Profil.