[PYTHON] Erkennt Linux-Paketaktualisierungen (yum / apt)

Was du machen willst

Es gibt die Prämisse, dass "die Einstellungen immer etwas anders sind". Selbst wenn Sie beispielsweise 1000 Einheiten haben und dieselbe Konfiguration haben, ist die Anzahl der Update-Pakete gleich und Sie sollten in der Lage sein, einen Verteilungsserver einzurichten, sodass Sie kein solches Tool benötigen sollten. Es hat nicht viel mit der viel diskutierten Docker-Infrastruktur zu tun, und es hat nichts mit dem vorübergehenden Start von Vagrant zu tun.

Ich habe ungefähr 5 davon selbst, aber ich benutze sie, wenn ich eine andere Umgebung für Debian / Ubuntu / CentOS habe.

Ich konnte mir einfach keine Software vorstellen, die solche Überprüfungen zwischen Betriebssystemen verwaltet.

Was ich getan habe

https://github.com/dmiyakawa/check_linux_updates

check_updates.py: Beobachten Sie die andere Seite von Ihrem Terminal aus

Dies ist eine Implementierung, mit der Updates für jeden Host über Fabric (ssh) angezeigt werden. Standardmäßig wird parallel eingecheckt.

Beispiel(Der Snip-Teil entsprach tatsächlich dem FQDN):
$ check_updates.py
hansode.(snip)     :   0(0) (REBOOT-REQUIRED)
gobusode.(snip)    :  40(0)
shichibusode.(snip):   1(0)
mowa-net.jp        :   3(2)
centos64.(snip)    :   2(?) (REBOOT_REQUIRED)

Gobusode ist Debian Sid. Es wird so sein, sobald es unbeaufsichtigt bleibt. Etwas wichtiger ist jedoch mowa-net.jp, das zwei Sicherheitsupdates (in Klammern) enthält. Daher sollte dieses Update aktualisiert werden. Natürlich verfügt Debian über einen Mechanismus zum automatischen Anwenden von Sicherheitsupdates. Dies ist eine Bestrafung, wenn Sie diese nicht verwenden.

$ check_updates.py --upgrade mowa-net

Wird aktualisiert. In diesem Fall wird es seriell auf einem Host ausgeführt, daher ist es in Ordnung, nach dem Kennwort zu fragen.

Ich habe den Hostnamen auf verschiedene Arten geändert, aber es funktioniert im Allgemeinen so. Es kann mit CentOS gemischt werden (Centos64 oben ist ein Beispiel), aber ich überspringe die Implementierung und habe keine Sicherheitsupdates unter CentOS gesehen. So ist es "?". (Ich sehe es mit den später beschriebenen Werkzeugen. Das)

Die Implementierung auf meiner Seite um Paramiko (SSH-Verbindung) ist zu angemessen. Wenn Sie parallel ausgeführt werden und keine Authentifizierung mit öffentlichem Schlüssel durchführen, schlägt dies an der Kennwortabfrage fehl. sudo Ich sterbe immer noch an der Passwortabfrage, wenn ich es brauche.

Sie können eine Gruppe wie "eigene Servergruppe" festlegen. Das folgende Beispiel führt durch die Hosts in der Minengruppe und trifft interaktive Aktualisierungs- und Neustartentscheidungen. (Fabric erlaubt kein interaktives Ja / Nein, wenn es parallel ausgeführt wird.)

$ check_updates.py --serial --ask-upgrade mine

Es wird angenommen, dass die ausführende Seite Python 2.7 ist.

$ check_updates.py -h
usage: check_updates.py [-h] [-s] [-q] [-n] [-v] [--ask-upgrade]
                        [--auto-upgrade] [--dist-upgrade]
                        [--auto-upgrade-restart] [--refresh] [--show-packages]
                        [--sanity-check]
                        [HOST [HOST ...]]

Checks if remote hosts need update or not.

positional arguments:
  HOST                  Host names or host groups. If not specified, default
                        hosts configuration will be used. This may allow
                        special command "all" "list", "groups" (=
                        "list_groups").

optional arguments:
  -h, --help            show this help message and exit
  -s, --serial          Executes check in serial manner
  -q, --quiet           Suppress unnecessary output.
  -n, --nonregistered   Allow host names that are not registered
  -v, --verbose         Show verbose outputs, including Fabric ones.
  --ask-upgrade         Asks if upgrade should be done when appropriate. Only
                        effective when --serial (-s) option is set
  --auto-upgrade        Requests hosts to upgrade itself when necessary.
  --dist-upgrade        Use "dist-upgrade" instead of "upgrade". Only
                        effective with debian-like systems. Meaningless on
                        redhat-like systems.
  --auto-upgrade-restart
                        Requests hosts to upgrade itself and restart when
                        upgrade is finished. With this option restart will be
                        executed regardless of necessity (with/without
                        "Reboot-Required" status). This will execute "dist-
                        upgrade" on debian(-like) OSes, not "upgrade.
  --refresh             Run "apt-get update" on debian-like systems.
  --show-packages       This will show names of packages to be upgraded.
  --sanity-check        First executes sanity check toward each host serially
                        (not in parallel). If some hosts show prompt in the
                        check phase, this command will abort itself
                        immediately. Might be useful for "debugging" new
                        hosts. If you are considering --serial option, This
                        "check" would be meaningless.

check_update_local.py: Auf der anderen Seite ausführen

Mit dem obigen Skript müssen Sie eine SSH-Verbindung herstellen, und der Authentifizierungs- / Autorisierungsprozess ist schwierig. Es gibt viele Unannehmlichkeiten bei der Überwachung mit Zabbix.

Lassen Sie uns etwas erstellen, das von Zabbix Agent aus überwacht werden kann, selbst wenn auf jedem Host ein Skript (Python) platziert ist.

$ check_update_local.py -h
usage: check_update_local.py [-h] [--log LOG] [-d] [-s] [-r] [-q]

Check if update is available. Returns num of updates

optional arguments:
  -h, --help            show this help message and exit
  --log LOG             Set Python log level. e.g. DEBUG, INFO, WARN
  -d, --debug           Shortcut for --log DEBUG
  -s, --security-updates
                        Instead of showing num of updates, show num of
                        security updates.
  -r, --reboot_required
                        Instead of showing num of updates, return 1 if reboot
                        is required
  -q, --quiet           Logging will be disabled entirely.
$ check_update_local.py 
0
$ check_update_local.py -s
0
$ check_update_local.py -r
1

Debian verwendet den Befehl `` `apt-check```, daher ist das Paket update-notifier-common erforderlich. Sicherlich scheint es von Anfang an enthalten zu sein, wenn es sich um ein Ubuntu-System handelt, aber die Details sind unbekannt.

Bisher war es relativ einfach, Wenn Sie nicht vorsichtig sind und versuchen, dieses Skript mit CentOS 6 kompatibel zu machen Das Standard-Python für CentOS 6 wurde mit 2.6 (statt 2.7) ausgeflippt. Ich habe viele seltsame Hacks gemacht, und wenn ich mit pip in argparse eingetreten bin, habe ich es auf ein Level geschafft, das funktioniert, aber Ich würde gerne eine sauberere Methode erwarten.

Leider ist die Python 3-Unterstützung nicht enthalten. 14.04 Es ist möglicherweise nicht LTS-ähnlich.

Die mit Zabbix zu verwendende Methode ist in README.md beschrieben. Sowohl apt-check als auch yum sind vom Agent sehr schwer zu treffen, daher ist es unangenehm. Bei Verwendung mit vielen überwachten Objekten kann der serverseitige Prozess, der den Agenten trifft, voll werden. Ich habe es früher gemacht, daher kann ich es nicht überprüfen.

was ich möchte

Besseres Werkzeug als dieses

Nachtrag

Recommended Posts

Erkennt Linux-Paketaktualisierungen (yum / apt)
So verhindern Sie Paketaktualisierungen mit apt
[Linux] Aktualisieren Sie das Paket offline
Linux-Hauptpaketverwaltungssystem