Linux Distribution herausfinden?

Alles, was PHP betrifft, kann hier besprochen werden.

Linux Distribution herausfinden?

Postby domatrix » 22. April 2007 22:23

Hallo,


gibt es einen einfachen Weg, die Linux Distribution auszulesen?

Mit
cat /etc/mandriva-release
erhält man für Mandriva Linux die gewünschten Informationen.

Mit
cat /etc/SuSE-release
erhält man für SuSE Linux die gewünschten Informationen.

Das ist alles gut und schön, doch wenn man nicht weis, auf welcher Distribution das PHP Skript ausgeführt wird, ist das alles viel komplizierter.

Gibt es eine Datei, die auf allen Linux Distributionen gleich ist und die Linux Distribution (bsp Mandriva Linux 2007.0) anzeigt?


MfG domatrix
domatrix
 
Posts: 14
Joined: 21. April 2007 15:14

Postby KingCrunch » 23. April 2007 00:32

Gegenfrage: Wen interessiert denn bitte schön auf welchem System das Script ausgeführt wird?!?
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby domatrix » 23. April 2007 09:21

Hey,

du stellst ja immer alles in Frage, bereits im Letzten Forum beitrag, worum es darum ging, wie man den CPU Typ und die größe des RAMs ausliest, hast du diese Frage gestellt :wink:

Also es geht darum eine Website zu erstellen, bei der man überprüfen kann, ob es eine neue Distribution gibt. Viele Distributionen bieten online Infos an, welche Distribution aktuell ist. Diese Infos kann man sehr einfach ausfiltern und mit dern bereits installierten Version vergleichen.

Warum das praktisch ist? Weil man nicht jeden Tag auf die offizielle Website des Herstellers wechseln muss und die Versionen vergleichen muss, hatte ich jetzt SuSE 10.1 oder 10.3 beta3? Diese Antwort liefert dann das Skript.

Sicher kann man jetzt sagen, man kann doch genau so gut ein Newsletter anmelden. Aber wer gibt gerne seine E-Mail Adresse weiter und außerdem es geht doch auch einfacher.

Ich habe bereits herausgefunden, dass alle getesteten Linux-Distributionen eines geinsam haben:

/etc/lsb-release (<- Ubuntu Linux)
/etc/SuSE-release (<- SuSE Linux)
/etc/mandriva-release (<- Mandriva Linux)


Bei FreeBSD habe ich leider keine solcher Dateien gefunden.

Es gibt, wenn man wirklich in /etc/ die releases auslesen möchte, zwei Möglichkeiten

    1. Man schreibt eine if... Anweisung, die überprüft, ob eine der oben genannten Dateien vorhanden ist und liest diese aus. Könnte aber Problematisch werden, wenn der Dateiname sich ändert, also statt SuSE-release, suse-release.

    2. Man schreibt ein kleines Shell-Skript, dass eine Datei mit der Endung release in /etc sucht und diese dann ausliest.


Wie würdet ihr das machen, wenn man davon ausgeht, dass das Auslesen einer Linux Distribution in einigen Fällen durchaus sinnvoll sein kann (s. oben) :wink:

MfG domatrix
domatrix
 
Posts: 14
Joined: 21. April 2007 15:14

Postby KingCrunch » 23. April 2007 10:18

domatrix wrote:du stellst ja immer alles in Frage, bereits im Letzten Forum beitrag, worum es darum ging, wie man den CPU Typ und die größe des RAMs ausliest, hast du diese Frage gestellt ;)
Jep, natürlich, finde die Frage auch weiterhin durchaus berechtigt :D
domatrix wrote:Also es geht darum eine Website zu erstellen, bei der man überprüfen kann, ob es eine neue Distribution gibt. Viele Distributionen bieten online Infos an, welche Distribution aktuell ist. Diese Infos kann man sehr einfach ausfiltern und mit dern bereits installierten Version vergleichen.

Warum das praktisch ist? Weil man nicht jeden Tag auf die offizielle Website des Herstellers wechseln muss und die Versionen vergleichen muss, hatte ich jetzt SuSE 10.1 oder 10.3 beta3? Diese Antwort liefert dann das Skript.
Guter Grund (ausnahmsweise ;))


So, dann jetzt zum Thema: Schön, dass du insoweit schonmal weiter gedacht hast, ich hab nämlich grad kein Linux griffbereit für solche Spässe. Ich persönlich würde Variante 1 verwende, weil man schon davon ausgehen kann, dass die Entwickler nicht auf einmal mutwillig sämtliche Dateinamen übern Haufen werfen ;) Desweiteren kannst du ja auch beim ersten Abruf den Dateinamen der passenden Datei in eine eigene kleine Text-Datei schreiben. So muss er bei späteren Checks nicht weiter sinnlos alle 3 Dateien suchen und wenn er die Datei auf einmal doch nicht mehr findet, dann kannst du dir sicher sein, dass sich der Dateiname geändert hat und entsprechend Alarm schlagen (zB per Mail an dich selbst oder einer entsprechenden Seite oder sowas eben).
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby domatrix » 23. April 2007 12:12

So,


ich habe eine Lösung herausgefunden. Für alle, die dasselbe Problem haben, hier ist ein Lösungsweg:

Jede Linux Distribution hat andere release Dateien unter /etc/ gespeichert. Diese Dateien sind oft wie folgt benannt "DISTRIBUTION-release".

Diese Dateien beinhalten Informationen über die Distribution und die Version. Bei manchen Distributionen auch Infos über "Codenames".

Da jede Linux Distribution anders ist, gibt es keinen sicheren Weg diese Distributions Informationen auszulesen. Wer also ein Programm schreibt, egal ob Batch-Skript oder PHP-Skript, kann Informationen wie die Linux-Distribution oft gut gebrauchen (Spezielle Pfade, Konfigurationswerkzeuge wie z.B. Yast [SuSE], Update Check, etc).

Um diese Informationen zuverlässig auszulesen gibt es leider nur einen manuellen Weg! Man muss jede mögliche release-Datei anfragen und wenn eine Datei einen Inhalt hat, diese auslesen. Falls keine Datei einen Inhalt hat, handelt es sich um eine "Unbekannte Distribution" und muss aus der Liste entfernt werden.

Liste der Distributionen:
Annvix: /etc/annvix-release
Arch Linux: /etc/arch-release
Arklinux: /etc/arklinux-release
Aurox Linux: /etc/aurox-release
BlackCat: /etc/blackcat-release
Cobalt: /etc/cobalt-release
Conectiva: /etc/conectiva-release
Debian: /etc/debian_version, /etc/debian_release (rare)
Fedora Core: /etc/fedora-release
Gentoo Linux: /etc/gentoo-release
Immunix: /etc/immunix-release
Knoppix: knoppix_version
Linux-From-Scratch: /etc/lfs-release
Linux-PPC: /etc/linuxppc-release
Mandrake: /etc/mandrake-release
Mandriva/Mandrake Linux: /etc/mandriva-release, /etc/mandrake-release, /etc/mandakelinux-release
MkLinux: /etc/mklinux-release
Novell Linux Desktop: /etc/nld-release
PLD Linux: /etc/pld-release
Red Hat: /etc/redhat-release, /etc/redhat_version (rare)
Slackware: /etc/slackware-version, /etc/slackware-release (rare)
SME Server (Formerly E-Smith): /etc/e-smith-release
Solaris SPARC: /etc/release
Sun JDS: /etc/sun-release
SUSE Linux: /etc/SuSE-release, /etc/novell-release
SUSE Linux ES9: /etc/sles-release
Tiny Sofa: /etc/tinysofa-release
TurboLinux: /etc/turbolinux-release
Ubuntu Linux: /etc/lsb-release
UltraPenguin: /etc/ultrapenguin-release
UnitedLinux: /etc/UnitedLinux-release (covers SUSE SLES8)
VA-Linux/RH-VALE: /etc/va-release
Yellow Dog: /etc/yellowdog-release


Man kann diese Distributionen z.B. in ein Array speichern und der reihe nach durchgehen.

Ein kleiner Haken ist, dass der Inhalt dieser release Dateien sehr unterschiedlich ist.

Bei Mandriva Linux ist in der release Datei lediglich eine Zeile:
Mandriva Linux release 2006.0 (Official) for i586


Bei SuSE Linux sind es zwei Zeilen:
openSUSE 10.2 for i586
VERSION = 10.2


Und bei Ubuntu wurde alles im Stil der zweiten Zeile vom SuSE release geschrieben. Also man muss also für jede Distribution eine eigene Prozedur ausführen um die gewünschten Infos zu erhalten.

Es ist dennoch machbar! Der Inhalt der release Dateien ist eigentlich immer gleich, lediglich der Aufbau der Dateien ist unterschiedlich. Man muss also lediglich ein Skript schreiben, dass je nach Distribution, eine unterschiedliche Methode anwendet, diese release Dateien auszulesen um am Ende einheitliche Ergebnisse zu erhalten.

Ich hoffe dieser Tipp konnte allen Interessenten helfen!

MfG domatrix
domatrix
 
Posts: 14
Joined: 21. April 2007 15:14

Postby KingCrunch » 24. April 2007 08:44

Wie gesagt: Ich würde weiterhin die (gefundene) Distribution in einer eigenen Datei cachen, damit man nun nicht wirklich jedes mal die komplette Liste durchgehen muss: man durchsucht einmal die Liste, findet den Dateinamen und speichert in. Bei nächsten mal liest man den Dateinamen einfach wieder aus der eigenen Datei aus.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest