GNU/Linux-Distributionen gibt es wie Sand am Meer. Doch welche habe ich nun vor mir?
Natürlich wird sich kaum einer, der vor dem Recher, den er täglich nutzt, sitzt (und nicht unter Alzheimer leidet), diese Frage stellen. Aber stellen wir uns einmal vor, ein IT-Dienstleister muss – vor Ort – das ihm noch unbekannte System eines Kunden betreuen. Oder: die Arbeitsschritte einer plattformübergreifenden Anwendung hängen davon ab, auf welcher Distribution letztgenannte ausgeführt wird.
Letztgenannter Fall lag bei Icinga Web 2 vor. Vom Benutzer – zwecks Installation – manuell auszuführende Befehle hängen von der Distribution, auf der Icinga Web 2 installiert wird, ab. Das Problem: diese Information muss möglichst Distributionsneutral abgefragt werden. Die Lösung: /etc/os-release.
Letztgenannte Datei ist erweiterbar – und vor allem einfach zu analysieren:
'/(?<!.)\s*ID\s*=\s*([\'"]?)(.*?)\1\s*(?!.)/msi'
Mit diesem PCRE-PHP-String lässt sich jede Zeile der Datei darauf überprüfen, ob sie die Information, die wir haben wollen, enthält. Letztgenannte kann direkt extrahiert werden.
Aber leider gibt es nicht nur die tollen, neuen Distros, die auf systemd bauen – sondern auch solche, die schon fast Jahrzehnte auf dem Buckel haben (können). Diese haben nur ihre spezifischen Release-Files. Es folgen ein paar Beispiele:
- /etc/fedora-release
- /etc/centos-release
- /etc/redhat-release
- /etc/SuSE-release
Nur die Existenz der 2 letztgenannten Dateien zu überprüfen ist sehr unprezise, da bspw. /etc/redhat-release auch auf CentOS vorhanden ist. /etc/SuSE-release findet sich sowohl auf openSUSE, als auch auf SLES.
Wem das zu aufwändig ist – der kann auch von Icinga 2 gebrauch machen:
$ icinga2 --version icinga2 - The Icinga 2 network monitoring daemon (version: v2.3.0-...) Copyright (c) 2012-2015 Icinga Development Team (https://www.icinga.org) . . . System information: Operating system: Linux Operating system version: 3.13.0-48-generic Architecture: x86_64 Distribution: CentOS release 6.5 (Final)
Fazit: systemd hat auch seine Vorteile. 😉
0 Kommentare