
Ich schreibe einen allgemeinen Code in einem Treiber, um den Distributionsnamen und den Hostnamen zu erhalten. Den Hostnamen übernehme ich struct utsname{nodename[]}
, aber wie erhalte ich den Distributionsnamen?
Antwort1
Die meisten Programme und Skripte, die ich gesehen habe, analysieren die üblichen Dateien in /etc
. Soweit ich weiß, gibt es keinen anderen Weg:
On Redhat, look for /etc/redhat-release
On Debian, look for /etc/debian_version
Mandriva has /etc/version
and Slackware has /etc/slackware-version
Sie können auch verwenden, uname
um das abzurufen ARCH
, oder, wahrscheinlich die vernünftigste Möglichkeit, verwenden lsb_release
.
Antwort2
Sie können einen Blick darauf werfen, wie facter es machtHier.
Wie Jan sagte, ist lsb_release wahrscheinlich die beste Lösung, aber es kann nicht die einzige sein. Beispielsweise ist lsb_release auf keinem meiner RHEL-Server standardmäßig vorhanden:
[damaya@damaya-sandbox script]$ lsb_release
-bash: lsb_release: command not found
[damaya@damaya-sandbox script]$ yum provides "*/lsb_release"
redhat-lsb-core-4.0-7.el6.centos.i686 : LSB base libraries support for CentOS
Repo : base
Matched from:
Filename : /usr/bin/lsb_release
Wenn also lsb_release nicht auf dem System vorhanden ist, besteht Ihr nächster Schritt darin, die Informationen aus der Datei /etc/*-release abzurufen. Wenn diese jedoch auch nicht auf dem System vorhanden ist, haben Sie Pech gehabt. Leider gibt es keine 100 % zuverlässige Möglichkeit, diese Informationen abzurufen.
Antwort3
Der Bereich zum Abrufen des Distributionsnamens liegt nicht im Kernel-Entwicklungsbereich. Daher ist derzeit keine spezielle Methode vorhanden. Ich fordere hierfür Modulparameter in meinem Treiber an. Sie können beim Kompilieren auch eine ENV-Variable anfordern.
Vielen Dank für Ihre Hilfe...