Beim Ausführen des Checkmk Agent Updaters kann folgende Fehlermeldung auftreten:
cmk-update-agent -vv
/usr/lib/check_mk_agent/plugins/3600/cmk-update-agent: error while loading shared libraries: libz.so.1: failed to map segment from shared object
Auf den ersten Blick sieht das nach einem Problem mit einer fehlenden Library aus. In der Praxis liegt die Ursache jedoch meist an einer gehärteten Systemkonfiguration.
Ursache
Der Fehler tritt typischerweise auf, wenn das Verzeichnis /tmp mit der Mount-Option noexec eingebunden ist.
Viele Linux-Systeme werden aus Sicherheitsgründen so konfiguriert, dass aus /tmp keine Dateien ausgeführt werden dürfen. Der Checkmk Agent Updater verwendet jedoch standardmässig genau dieses Verzeichnis für temporäre Dateien. Wenn dort keine ausführbaren Inhalte erlaubt sind, kann der Updater bestimmte Bibliotheken nicht korrekt laden.
Die Meldung wirkt deshalb zwar wie ein klassisches Library-Problem, ist in Wirklichkeit aber meist eine Folge der gesetzten Mount-Optionen.
Temporärer Workaround
Der Fehler lässt sich direkt umgehen, indem ein anderes temporäres Verzeichnis verwendet wird. In vielen Fällen funktioniert /dev/shm problemlos:
TMPDIR=/dev/shm cmk-update-agent -vv
/dev/shm ist ein RAM-basiertes temporäres Dateisystem und erlaubt in der Regel das Ausführen von Dateien. Für den Checkmk Agent Updater ist das in den meisten Umgebungen vollkommen ausreichend.
Nachhaltige Lösung
Damit die Umgebungsvariable nicht jedes Mal manuell gesetzt werden muss, sollte das TMP-Verzeichnis dauerhaft in Checkmk hinterlegt werden.
Dafür gibt es auf dem Checkmk-Server eine passende Regel unter folgendem Pfad:
Setup → Agents → Windows, Linux, Solaris, AIX → Agents → Agent rules → Installation paths for agent files (Linux, Unix)
Dort kann die Option Directory for storage of temporary data (set TMPDIR environment variable) gesetzt werden.
Als Wert kann zum Beispiel folgendes Verzeichnis verwendet werden:
/dev/shm
Wichtiger Hinweis zur Umsetzung
Nachdem die Regel gesetzt wurde, müssen die Agenten neu generiert beziehungsweise neu gebacken und danach auf den Zielsystemen erneut installiert oder aktualisiert werden.
Erst dann übernimmt der Agent Updater die neue TMPDIR-Konfiguration dauerhaft.
Funktion prüfen
Nach dem Update kann der Agent Updater auf dem Zielsystem erneut getestet werden:
cmk-update-agent -vv
Wenn die Regel korrekt übernommen wurde, sollte der Befehl nun ohne Fehlermeldung durchlaufen.
Alternative Verzeichnisse
Falls /dev/shm in einer Umgebung nicht verwendet werden soll, kommen auch andere Verzeichnisse in Frage, zum Beispiel /var/tmp oder ein eigenes Verzeichnis unter /var/lib. Wichtig ist nur, dass das Verzeichnis beschreibbar ist und nicht mit noexec gemountet wurde.
