apt

unattended-upgrades

16. November 2024 · Betriebssysteme · andreas · 1 Kommentar

In der Vergangenheit habe ich Server so konfiguriert, daß Updates automatisiert über cron-apt heruntergeladen und installiert wurden. Seit der Einführung von systemd steht mit den uattended-upgrades eine weitere Möglichkeit zur Verfügung, welche eine detailliertere Konfiguration erlaubt.

$ sudo apt-get install unattended-upgrades

Die Grundkonfiguration erfolgt über die Datei “/etc/apt/apt.conf.d/50unattended-upgrades”, in der nach erfolgter Installation zumindest die Parameter “Unattended-Upgrade::Mail” sowie “Unattended-Upgrade::MailReport” angepasst werden sollten.

/etc/apt/apt.conf.d/50unattended-upgrades
... Unattended-Upgrade::Mail "an.wen.auch.immer@wo.auch.immer"; ... Unattended-Upgrade::MailReport "always"; ...

“Unattended-Upgrade::MailReport” kann nach erfolgreicher Testphase auch wieder zurück auf den Default-Wert “on-change” gestellt werden, falls das tägliche “es gab nix zu tun” nervt.

Um die Funktionalität zu aktivieren, kann entweder die Datei “/etc/apt/apt.conf.d/20auto-upgrades” manuell angepasst oder “dpkg-reconfigure” verwendet werden. Nach dem Aufruf von

$ sudo dpkg-reconfigure unattended-upgrades

die Frage “Aktualisierungen für Stable automatisch herunterladen und installieren?” mit “ja” beantworten.

Für einen Testlauf kann “unattended-upgrade” mit dem Parameter “-d” für Debug manuell gestartet werden:

$ sudo unattended-upgrade -d

Anpassung Zeitsteuerung

Der Zeitpunkt, zu dem das Herunterladen bzw. Installieren tatsächlich durchgeführt wird, lässt sich über zwei Overrides definieren. Wichtig ist hierbei, im ersten Schritt mit “OnCalendar=” erst einmal bestehende Einträge zu löschen, bevor dann die eigenen Werte gesetzt werden - sonst werden die angegebenen Werte zusätlich übernommen.

$ sudo mkdir /etc/systemd/system/apt-daily.timer.d $ sudo vi /etc/systemd/system/apt-daily.timer.d/override.conf
/etc/systemd/system/apt-daily.timer.d/override.conf
[Timer] OnCalendar= OnCalendar=04:00 RandomizedDelaySec=0
$ sudo mkdir /etc/systemd/system/apt-daily-upgrade.timer.d $ sudo vi /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer] OnCalendar= OnCalendar=05:00 RandomizedDelaySec=0

Anschließend müssen die geänderten Konfigurationsdateien noch eingelesen und die Timer neu gestartet werden:

$ sudo systemctl daemon-reload $ sudo systemctl restart apt-daily.timer $ sudo systemctl restart apt-daily-upgrade.timer

Der Status der Einplanung lässt sich mittels “systemctl” einsehen

$ sudo systemctl status apt-daily.timer ● apt-daily.timer - Daily apt download activities Loaded: loaded (/lib/systemd/system/apt-daily.timer; enabled; preset: enabled) Drop-In: /etc/systemd/system/apt-daily.timer.d └─override.conf Active: active (waiting) since Tue 2024-09-17 11:29:25 CEST; 46s ago Trigger: Wed 2024-09-18 04:00:00 CEST; 16h left Triggers: ● apt-daily.service
$ sudo systemctl status apt-daily-upgrade.timer ● apt-daily-upgrade.timer - Daily apt upgrade and clean activities Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; preset: enabled) Drop-In: /etc/systemd/system/apt-daily-upgrade.timer.d └─override.conf Active: active (waiting) since Tue 2024-09-17 11:29:33 CEST; 53s ago Trigger: Wed 2024-09-18 05:00:00 CEST; 17h left Triggers: ● apt-daily-upgrade.service

Was unattended-upgrades tatsächlich so angestellt hat, lässt sich auch mit Hilfe von “journalctl” auswerten:

$ sudo journalctl --since yesterday -u apt-daily.service $ sudo journalctl --since yesterday -u apt-daily-upgrade.service

Drittanbieterquellen

In der Standardkonfiguration aktualisiert unattended-upgrades nur die vom System bereitgestellten Quellen, alle weiteren Quellen müssen in der Datei “/etc/apt/apt.conf.d/50unattended-upgrades” noch hinzugefügt werden. Dies sieht man im Debug-Modus hier auch am Beispiel von “zammad”:

$ sudo unattended-upgrade -d | grep zammad Marking not allowed <apt_pkg.PackageFile object: filename:'/var/lib/apt/lists/dl.packager.io_srv_deb_zammad_zammad_stable_debian_dists_12_main_binary-amd64_Packages' a=,c=main,v=,o=https://packager.io/gh/zammad/zammad,l=Debian 12 packages for zammad/zammad arch='amd64' site='dl.packager.io' IndexType='Debian Package Index' Size=56880 ID:33> with -32768 pin Applying pin -32768 to package_file: <apt_pkg.PackageFile object: filename:'/var/lib/apt/lists/dl.packager.io_srv_deb_zammad_zammad_stable_debian_dists_12_main_binary-amd64_Packages' a=,c=main,v=,o=https://packager.io/gh/zammad/zammad,l=Debian 12 packages for zammad/zammad arch='amd64' site='dl.packager.io' IndexType='Debian Package Index' Size=56880 ID:33> Checking: zammad ([<Origin component:'main' archive:'' origin:'https://packager.io/gh/zammad/zammad' label:'Debian 12 packages for zammad/zammad' site:'dl.packager.io' isTrusted:True>]) adjusting candidate version: zammad=6.3.1-1726553725.106af4c8.bookworm Package zammad has a higher version available, checking if it is from an allowed origin and is not pinned down.

Die benötigten Angaben kann man direkt aus der Debugausgabe entnehmen

"origin=https://packager.io/gh/zammad/zammad,component=main,label=Debian 12 packages for zammad/zammad"

und die Zeile dann der Sektion “Unattended-Upgrade::Origins-Pattern” hinzufügen:

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern { ... "origin=https://packager.io/gh/zammad/zammad,component=main,label=Debian 12 packages for zammad/zammad"; ... };

Anschließend wird Zammad wie geplant aktualisiert:

$ sudo unattended-upgrade -d | grep zammad Erlaubte Ursprünge sind: origin=Debian,codename=bookworm,label=Debian, origin=Debian,codename=bookworm,label=Debian-Security, origin=Debian,codename=bookworm-security,label=Debian-Security, origin=https://packager.io/gh/zammad/zammad,component=main,label=Debian 12 packages for zammad/zammad Checking: zammad ([<Origin component:'main' archive:'' origin:'https://packager.io/gh/zammad/zammad' label:'Debian 12 packages for zammad/zammad' site:'dl.packager.io' isTrusted:True>]) pkgs that look like they should be upgraded: zammad ... Pakete, welche aktualisiert werden: zammad ... zammad (6.3.1-1726721589.817498f6.bookworm) wird eingerichtet ...

Kernel aus Backports installieren

21. Juli 2022 · Betriebssysteme · andreas · Kein Kommentar

Je nach verwendeter Hardware fehlt mit ein bißchen Pech im Kernel der Debian-Stable-Version altersbedingt die Unterstützung für einige Hardware-Komponenten.

Das aktuelle Debian Bullseye verwendet standardmäßig den Kernel 5.10

$ uname -a Linux *** 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64 GNU/Linux

Glücklicherweise gibt es als einfache und Distributions-konforme Lösung für solche Fälle das Backports-Repository:

Backports are packages taken from the next Debian release (called “testing”), adjusted and recompiled for usage on Debian stable. Because the package is also present in the next Debian release, you can easily upgrade your stable+backports system once the next Debian release comes out. [Quelle]

Die Backports bieten die Möglichkeit, mit Hilfe der gewohnten Paketverwaltung - sofern bereitgestellt - auf eine neuere Version eines Pakets zu aktualisieren, ohne dabei ein Franken-Debian zu erschaffen.

Als erstes müssen, sofern dies nicht bei der Installation des Systems bereits angewählt wurde, die Backports in der Datei “/etc/apt/sources.list” ergänzt werden:

# bullseye-backports, previously on backports.debian.org deb http://deb.debian.org/debian/ bullseye-backports main contrib non-free deb-src http://deb.debian.org/debian/ bullseye-backports main contrib non-free

Dann kann man sich nach einem “apt update” auf die Suche nach einem passenden Kernel machen:

$ sudo apt search linux-image Sortierung… Fertig Volltextsuche… Fertig ... linux-image-5.10.0-11-amd64/stable-security 5.10.92-2 amd64 Linux 5.10 for 64-bit PCs (signed) ... linux-image-5.18.0-0.bpo.1-amd64/bullseye-backports 5.18.2-1~bpo11+1 amd64 Linux 5.18 for 64-bit PCs (signed) ...

In der Liste werden alle Kernel-Versionen angezeigt, die installiert werden können, i.d.R. ist die Version mit möglichst wenigen Zusätzen im Namen die richtige:

$ sudo apt install linux-image-5.18.0-0.bpo.1-amd64/bullseye-backports ... Version »5.18.2-1~bpo11+1« (Debian Backports:bullseye-backports [amd64]) für »linux-image-5.18.0-0.bpo.1-amd64« gewählt. ... Die folgenden NEUEN Pakete werden installiert: linux-image-5.18.0-0.bpo.1-amd64 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.

Nach erfolgreicher Installation reicht ein Neustart, um mit dem aktualisierten Kernel zu starten.

$ uname -a Linux *** 5.18.0-0.bpo.1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.18.2-1~bpo11+1 (2022-06-14) x86_64 GNU/Linux

Im GRUB-Menü kann jederzeit wieder der bisher verwendete Kernel gestartet werden und falls der neue Kernel wieder entfernt werden soll, reicht ein einfaches “sudo apt purge …”, um die Installation rückgängig zu machen.


Metapakete 'gnome' und 'gnome-desktop-environment'

19. November 2008 · Betriebssysteme · andreas · Kein Kommentar

Versucht man nach der Installation ein paar der GNOME-Pakete (wie z.B. Evolution) loszuwerden, verunsichert apt mit dem freundlchen Hinweis, daß man mit diesem Schritt auch gleich die Pakete “gnome” sowie “gnome-desktop-environment” entsorgt:

Die folgenden Pakete werden ENTFERNT: evolution evolution-exchange evolution-plugins gnome gnome-desktop-environment

Was auf den ersten Blick gefährlich aussieht, ist auf den zweiten Blick glücklicherweise harmlos, handelt es sich bei den beiden Paketen doch um sogenannte Metapakete, was auch erklärt, warum diese bei der Deinstallation eines ihrer Teile gehen müssen.

Gefährlich wird es erst nach der Deinstallation, denn dann meint apt jedesmal, etwas autoremove wäre angebracht:

Die folgenden Pakete wurden automatisch installiert und werden nicht länger benötigt: bluez-gnome evolution-common libsdl1.2debian libgnomekbd2 libsdl1.2debian-alsa libepc-ui-1.0-1 evolution-webcal ekiga python-gst0.10 libmtp7 gcalctool libpth20 gnome-nettool gnome-media metacity libepc-1.0-1 gnome-desktop-data libgtk-vnc-1.0-0 nautilus libgksu1.2-0 python-notify aspell pkg-config genisoimage gnome-settings-daemon libvorbisfile3 libgda3-common python-gnome2-extras gucharmap zenity libgksuui1.0-1 cheese liburi-perl libspectre1 gnome-network-admin libsvga1 libgnome-media0 app-install-data gnome-power-manager libexchange-storage1.2-3 unzip gnome-cards-data totem-plugins gnome-screensaver rhythmbox libgtksourceview1.0-0 python-gdata alacarte gedit gnome-menus liblircclient0 python-gtksourceview2 gtk2-engines-pixbuf system-config-printer dvd+rw-tools gnome-control-center libhtml-parser-perl libapm1 libpisock9 libcamel1.2-11 libpt-1.10.10-plugins-alsa gnome-themes libtrackerclient0 metacity-common seahorse libggzmod4 libxml-twig-perl mysql-common libtotem-plparser10 totem-common vinagre swfdec-gnome libedata-cal1.2-6 libpt-1.10.10 gnome-media-common nautilus-data libgpod3 libxml-parser-perl libgalago3 system-tools-backends libgweather1 gtkhtml3.14 guile-1.8-libs libmysqlclient15off python-gtkmozembed python-gtkhtml2 libgnomekbd-common p7zip gedit-common gnome-utils gnome-themes-extras libdmx1 libgnome-pilot2 gdm-themes libmusicbrainz4c2a libnet-dbus-perl fast-user-switch-applet arj gnome-about gnome-volume-manager nautilus-cd-burner libexempi3 gtk2-engines libgnomeprint2.2-data libgtksourceview2.0-common libkpathsea4 libgnomekbdui2 eog gdm libgtksourceview2.0-0 libslab0 capplets-data gnome-backgrounds python-eggtrayicon libegroupwise1.2-13 python-sexy python-xdg gnome-spell libggz2 libgweather-common libecal1.2-7 wodim libgdata1.2-1 libgtksourceview-common vino gnome-system-monitor libao2 evince libbluetooth2 gnome-games-data libgdata-google1.2-1 gnome-app-install gnome-user-guide libebook1.2-9 libopal-2.2 libedataserverui1.2-8 totem-gstreamer libgnome-window-settings1 libmetacity0 libedata-book1.2-2 evolution-data-server cdrdao libgnomevfs2-bin libedataserver1.2-9 zip python-gdbm gnome-core gnome-netstatus-applet dmz-cursor-theme python-4suite-xml libxklavier12 liboobs-1-4 libgucharmap6 gnome-applets libgda3-3 svgalibg1 libpt-1.10.10-plugins-v4l libgpgme11 python-gmenu libggzcore9 libgmyth0 gconf-editor gnome-system-tools libhtml-tree-perl gnome-panel libwww-perl gnuchess gstreamer0.10-gnomevfs deskbar-applet libnautilus-burn4 python-gnome2-desktop evolution-data-server-common gnome-applets-data libgnomeprint2.2-0 libhtml-tagset-perl desktop-file-utils libavahi-ui0 transmission-common gnome-session libgtkglext1 gstreamer0.10-tools libgnomeprintui2.2-0 totem-mozilla libgdl-1-0 libgtkhtml3.14-19 libgnomeprintui2.2-common file-roller serpentine libopenobex1 libspeexdsp1 transmission-gtk gnome-panel-data sound-juicer libgnomecups1.0-1 libpisync1 libgdl-1-common gnome-vfs-obexftp

und schlägt gleich noch vor

Verwenden Sie »apt-get autoremove«, um sie zu entfernen.

Wer sich auf den hilfreichen Hinweis verlässt, steht anschließend tatsächlich ohne Destktop da, denn u.a. ist in der obigen Liste auch das Paket “gnome-core” zu finden, ohne das wieder Tipparbeit am Terminal angesagt ist.

Sicherlich kann man einfach darauf verzichten, apt-get autoremove auszuführen - sicherer ist aber ein

aptitude keep-all

das die aktuell installierten Pakete alle in die Rubrik “will ich behalten” einsortiert.


Debian-basierte Systeme aktualisieren mit apt-cron

10. September 2008 · Betriebssysteme · andreas · Kein Kommentar

Ähnlich zu den automatischen Updates unter Windows gibt es auch unter Debian-basierten Systemen die Aktualisierungsverwaltung, die mittels Icon in der Taskleiste darauf aufmerksam macht, daß Updates für das System verfügbar sind.

Bei Rechnern, die aber hauptsächlich “in der Ecke” stehen und ohne menschliche Interaktion auskommen sollen, hat dies den Nachteil, daß Updates nur sehr unregelmäßig durchgeführt werden, wenn sich mal wieder jemand aus anderen Gründen am System anmeldet.

Da die Aktualisierungsverwaltung im Westentlichen auch nichts anderes macht, als auf “apt-get” zuzugreifen, könnte ein möglicher Lösungsansatz in einer Automatisierung dieses Vorganges mittels “cron” bestehen - während dessen Realisierung man hoffentlich über das Paket “cron-apt” stolpert, das exakt für diese Aufgabe geschaffen wurde.

Nach der Installation mittels

apt-get install cron-apt

stehen die entsprechenden Konfigurationsdateien im Verzeichnis “/etc/cron-apt” zur Verfügung, wobei in einem ersten Schritt nur die Parameter der Datei “config” an die eigenen Wünsche angepasst werden müssen.

Standardmäßig lädt cron-apt die Pakete nur vom Server herunter und verschickt - je nach Konfiguration - eine entsprechende Mail an den zuständigen Administrator. Soll cron-apt die Pakete auch gleich installieren, so ist die Datei “/etc/cron-apt/action.d/3-download” durch Entfernen des Parameters “-d” anzupassen.

Wer vor dem Produktiveinsatz gerne einen Testlauf unter menschlicher Aufsicht durchführen möchte, kann dies mittels “cron-apt -s” tun.