Multi Debian 10 Buster Server Update / Upgrade (howto)
Hallo zusammen,
ihr kennt es sicher auch – das ledige Thema von Updates auf eurern Linux-Servern. Wer einen oder zwei Server verwaltet kann das Problem vielleicht nicht so sehr nachvollziehen wie jemand der 10 oder mehr Linux Server verwaltet.
Ich zumindest stand genau vor diesem Problem: über 25 Hosts sollten dauerhaft up to date gehalten werden, da sonst mein Monitoring anschlägt und mich alle 2 Stunden darüvber informiert, dass Updates ausstehend sind. Damals hieß es dann “Ab auf alle Server per SSH und diese updaten”. Ich habe nach vielen Lösungen im Netz gesucht. Es gibt einige Anbieter die das Ganze remote machen (gegen Preise ab 10€ im Monat un mehr) oder Tools, die zu viel drum herum habern (Webmin). Also habe ich nach einer schlanken Alternatigve gesucht und bin im Debian-Repo fündig geworden.
APT-Dater
Mit apt-dater habe ich genau das gefunden was ich suchte. APT-Dater ist ein Tool, welches mittels des Austauschs von SSH-Keys auf eine SSH-Session auf einen anderen Server verbindet, auf Wunsch auf Updates prüft und diese so installiert wie ich es will – es werden keine automatischen Updates durchgeführt!
Ich möchte euch gerne die Einrichtung und Funktionsweise erklären. Für die Einrichtung benutze ich in meinem Fall einen Host, von dem aus ich update, und binde auf diesem Host einen weiteren Host ein, dessen Updates ich verwalten möchte.
Systemanforderungen:
Da dieses Tool wirklich enorm klein und Ressourcensparend ist, vernachlässige ich diesen Punkt. Ich nutze für dieses HowTo Tutorial lediglich 1 vCore und 256MB Ram für den Host mit apt-dater als Software.
Anleitung zur Einrichtung von apt-dater:
Installationsschritte
- APT-Dater auf host1 installieren und konfigurieren
- APT-Dater auf host2 installieren und konfigurieren
- Durchführen eines Updates und Upgrades
APT-Dater auf host1 installieren und konfigurieren
host1.beispiel.de -> Von diesem Hostsystem aus werden die Updates später durchgeführt.
host2.beispiel.de -> Dies ist ein Testsystem um Updates durchzuführen.
Zunächst installieren wir die Hauptsoftware auf host1:
@host1
$ sudo apt-get install apt-dater
Die Installation wird ziemlich schnell durchlaufen. Anschließend müssen wir das Tool erstmals starten, damit die Konfigurationsdatei initialisiert wird.
@host1
$ sudo apt-dater
Mittels “q” können wir das Tool wieder beenden. Nun widmen wir uns der Konfiguration des Tools und um die Einrichtung des host2.
@host1
$ vi ~/.config/apt-dater/hosts.xml
In dieser Datei findet ihr nun eine Beispielkonfiguration vor, damit ihr wisst, wie diese Datei aufgebaut ist.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hosts SYSTEM "file:///usr/share/xml/schema/apt-dater/hosts.dtd">
<!--
Hosts file of apt-dater (parsed by libxml2)
===========================================
hosts.xml configures the hosts which are managed by
apt-dater. Host options (except 'name') are lookuped as attributes
at the host node itself, the parent group node and the global
/hosts/default node.
The following attributes are known:
- name : visible name of the host or group (required)
- comment : text shown in 'host details' screen
- type : transport type (default: 'generic-ssh')
- ssh-user: overwrite SSH username
- ssh-host: overwrite SSH host (defaults to @name)
- ssh-port: overwrite SSH port
- ssh-id : overwrite SSH identification file
Example:
<hosts>
<default ssh-user="admin"/>
<group name="Internal Hosts" ssh-user="root">
<host name="server1.internal"/>
<host name="server2.internal"/>
<host name="John's Machine" ssh-host="workstation.internal" />
</group>
<group name="External Hosts">
<host name="external.ibh.net" ssh-port="443"/>
</group>
...
</hosts>
-->
<hosts xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- Include global config file if available. -->
<xi:include href="file:///etc/apt-dater/hosts.xml" xpointer="xpointer(/hosts/*)">
<xi:fallback />
</xi:include>
<group name="Localnet">
<host name="localhost" comment="Edit ~/.config/apt-dater/hosts.xml!"/>
</group>
</hosts>
In diesem Beispiel habe ich eine Gruppe angelegt mit dem Namen “Testgruppe”. Gruppierungen helfen euch im späteren Verlauf dabei, Gewisse Hosts in eurer Umgebung zu sortieren und priorisieren.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hosts SYSTEM "file:///usr/share/xml/schema/apt-dater/hosts.dtd">
<hosts xmlns:xi="http://www.w3.org/2001/XInclude">
<group name="Testgruppe" ssh-user="debiandev">
<host name="host2.beispiel.de" ssh-port="22"/>
</group>
</hosts>
Den “fett” markierten text möchte ich gerne erläutern:
<group name="Testgruppe" ssh-user="root"> <-- Gibt den Gruppennamen "Testgruppe" und den Standard SSH-Benutzer an, der für die Updates auf allen Hosts verwendet werden soll.
<host name="host2.beispiel.de" ssh-port="22"/> <-- "name" ist der Hostname oder die IP Adresse zum Server. "ssh-port" ist der entsprechende SSH-Port zum Server
Das waren schon die Einstellungen auf Host1. Nun müssen wir noch dafür sorgen, dass sich Host1 mittels SSH und ohne Passwort auf Host2 verbinden kann. Dies machen wir mittels der SSH-Keys – diese generieren und exportieren wir auf dem Host2. Zudem sollten wir auf Host2 die sudoers so editieren, dass wir nicht den root-Login sondern einen anderen User verwenden. In meinem Fall wird das der User debiandev sein.
APT-Dater auf host2 installieren und konfigurieren
@host2:
$ adduser debiandev
$ vi /etc/sudoers
In die sudoers Datei fügen wir folgende Zeile hinzu:
debiandev ALL=NOPASSWD: /usr/bin/aptitude, /usr/bin/apt-get
Das Hinzufügen der letzten Zeile in die sudoers Datei stellt sicher, dass wir das System updaten und upgraden können.
Nun müssen wir auf host1 einen SSH-Schlüssel generieren, den wir auf host2 exportieren, damit host1 sich ohne Passwort am Host2 anmelden kann. Dies erledigen wir mittels der folgenden Befehle:
Achtung: Ich empfehle kein Passwort für den SSH-Key zu verwenden. Das führt zu Problemen.
@host1
$ ssh-keygen -t rsa -b 4096
$ ssh-copy-id -i ~/.ssh/id_rsa.pub debiandev@host2.beispiel.de
Mit dem Eingeben des Passworts, welches ihr zuvor für den Benutzer vergeben habt, wird der Key auf den Server exportiert. Wenn ihr auf Nummer sicher gehen wollt ob alles klappt, dann versucht euch gerne mittels ssh von host1 auf host2 zu verbinden “ssh debiandev@host2.beispiel.de“. Funktioniert dies ohne die Passworteingabe, waren alle vorherigen Schritte erfolgreich.
Als letzten Schritt müssen wir noch den apt-dater-host Client auf dem Host2 installieren.
@host2
$ apt-get install apt-dater-host
Fertig!
Nun sind wir mit der Installation fertig. Auf dem Host1 könnt ihr nun das Tool öffnen:
@host1
$ apt-dater
Durchführen eines Updates und Upgrades
Das Ganze sieht dann wie folgt aus. Ihr könnt mit den Pfeiltasten auf eurer Tastatur in die entsprechenden Bereiche Navigieren.
Um die Gruppe “Unknown” zu öffnen, benutzt den rechten Pfeil auf eurer Tastatur (->).
Dort findet ihr dann die Gruppen, die ihr zuvor angelegt habt.
Wenn ihr nun die Testgruppe öffnet, dann könnt ihr auf den Host navigieren oder die Gruppe Testgruppe markiert lassen und die Taste “g” benutzen. Dann wird Host2 oder die gesamte Gruppe mittels “apt-get update” auf den neusten Stand gebracht.
Nun navigiert auf die Kategorie “Update pending” und navigiert zum Server. Dort bekommt ihr eine Übersicht der updatebaren Pakete auf dem Server.
Auch hier gilt:
- “u”-Taste auf dem Server updatet den Server
- “u”-Taste auf der Gruppe updatet alle Server der Gruppe gleichzeitig
Wenn ihr den Server nun upgaradet, dann öffnet er eine Shell und zeigt euch den Output. Am Ende wird dieses mittels “q” geschlossen. Solltet ihr eine Ganze Gruppe updaten, öffnet die GUI nicht alle Shells, sondern verschiebt diese in die Kategorie “Sessions” – dort könnt ihr euch dann den Updateverlauf oder die offenen manuellen Interaktionen anschauen und durchlaufen.
Das wars 🙂
Fragen, Anregungen und Wünsche gerne in die Kommentare.
Danke für die Anleitung.
Wenn die Datei ~/.config/apt-dater/hosts.xml konfiguriert wird, sollte man apt-dater mit -c ~/.config/apt-dater/hosts.xml aufgerufen werden.
Sonst greift das Programm auf Default unter /etc/apt-dater/hosts.xml.