• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Auf welcher Linux Distro läuft ein Script?

framp

Moderator
Teammitglied
Ich möchte gerne ein Script, welches bislang unter OpenSUSE benutzt wird für andere Linux Distris enablen. Da es leider zwischen den Linux Distros Unterschiede gibt muss ich im Script wissen mit welcher Distro ich es zu tun habe. Tante Google hat mit http://linuxmafia.com/faq/Admin/release-files.html ausgespuckt.

Code:
(ls /etc/*[-_]release 2>/dev/null && cat /etc/*[-_]release) || (ls /etc/*[-_]version && cat /etc/*[-_]version)
scheint mir der Key zu sein. Kennt Ihr irgendein aktuelles CodeFragment welches universell als Ergebnis liefert welche Distri vorliegt?
 

tisu

Hacker
hi framp :)

Dieser Code-Snipet ist aus dem alsa-info.sh Skript zum lokalisieren der Distro

Code:
DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}`

Hoffe es hilft und beste Grüße
 
OP
framp

framp

Moderator
Teammitglied
tisu schrieb:
...Hoffe es hilft und beste Grüße
Das ist eine interessante Variante. Allerdings muss man dann noch der returnten String parsen um genau rauszubekommen welche Distro man hat. Mir schwebt eher sowas vor wie:

PseudoCode:
Code:
distro=detectDistro();
switch distro in;
   openSusE: doSomething;
   ubuntu: doSomething;
   debian: doSomething;
esac;
 

spoensche

Moderator
Teammitglied
Du könntest die -release Files filtern, wie schon erwähnt wurde und durch einen weiteren Filter sicherstellen das, aus welchem Grund auch immer, der Distroname nicht mehrfach vorkommt (wenn die Releaseversion nicht benötigt wird).

So weit ich weiss, wird bei den meisten Distributionen während der Installation der Name usw. für den Menüeintrag im Bootmenü verwendet. Die Distribution per Bootmenüeintrag zu ermitteln ist meiner Meinung nach nicht die ideale und sicherste Lösung.
 
Hm, bei mir funktioniert das Kommando, obwohl ich mich nicht entsinnen kann, das Paket 'lsb-release' jemals installiert zu haben (könnte aber auch über irgendwelche Paket-Schemata reingerutscht sein).
 

Rainer Juhser

Moderator
Teammitglied
framp schrieb:
OpenSuSE und Kubuntu: Nein :nosmile:
Das ist seltsam - ich habe mal gerade meine VMs und mein laufendes System befragt:
Code:
rjuhser@linux-ul7v:~> lsb_release -d
Description:    openSUSE 11.2 (i586)

rjuhser@vbox-karmic:~$ lsb_release -d
Description:	Ubuntu 9.10

rjuhser@zeus:~> lsb_release -d
Description:    openSUSE 11.1 (i586)
Die ersten beiden sind definitiv hundsgewöhnliche Standardinstallationen. Bei Nr.3 bin ich mir nicht ganz so sicher. :???:
 

Ganymed

Guru
@framp

meinst du eine Ausgabe in dieser Art?
Code:
richy@p5:~> (ls /etc/*[-_]release 2>/dev/null && cat /etc/*[-_]release) || (ls /etc/*[-_]version && cat /etc/*[-_]version)
/etc/SuSE-release
openSUSE 11.2 (x86_64)
VERSION = 11.2
richy@p5:~>
Bewusst habe ich keine Pakete installiert die diese Ausgabe bewirken.

Gruß Ganymed

edit: entsprechende Ausgabe auch auf einem 32bit-System.
 
Hier auf archlinux 64 geht lsb_release auch nicht. Jetz stellt sich nur die Frage warum dein Script überhaupt von der Distribution abhängig sein soll/muss. So was funktioniert auf Dauer nie.
 
Saedelaere schrieb:
Jetz stellt sich nur die Frage warum dein Script überhaupt von der Distribution abhängig sein soll/muss. So was funktioniert auf Dauer nie.

Deshalb:

framp schrieb:
Da es leider zwischen den Linux Distros Unterschiede gibt muss ich im Script wissen mit welcher Distro ich es zu tun habe.

Das ist z.B. bei Skripten interessant, die bestimmte Informationen sammeln und ausgeben sollen.
 
gropiuskalle schrieb:
Saedelaere schrieb:
Jetz stellt sich nur die Frage warum dein Script überhaupt von der Distribution abhängig sein soll/muss. So was funktioniert auf Dauer nie.

Deshalb:

framp schrieb:
Da es leider zwischen den Linux Distros Unterschiede gibt muss ich im Script wissen mit welcher Distro ich es zu tun habe.

Das ist z.B. bei Skripten interessant, die bestimmte Informationen sammeln und ausgeben sollen.

Ja, nur lesen kann ich auch. Mich hätte halt interessiert welche Unterschiede er meint.
 
OP
framp

framp

Moderator
Teammitglied
Saedelaere schrieb:
... Ja, nur lesen kann ich auch. Mich hätte halt interessiert welche Unterschiede er meint.
Netzwerkkonfigurationen werden unterschiedlich und an verscheidenen Stellen abgelegt:

CentOS: /etc/sysconfig/network-scripts enthält KonfigDateien für die jeweiligen Interfaces, z.B. ifcfg-.eth0
Ubuntu: Die Datei /etc/network/interfaces enhält für alle Interfaces die KonfigDefinitions
openSuSE: Ähnlich wie bei Cento -aber unterscheidliches Verzeichnis und unterschiedlicher Inhalt: /etc/sysconfig/network enthält KonfigDateien für die jeweiligen Interfaces, z.B. ifcfg-.eth0

Weiterhin legt SusE diverse YAST NetworkKonfigs in /etc/sysconfig/network/config ab. Wo die Infos in den anderen Distros stecken bin ich gerade am rausfieseln :???:

ZU der Verfügbarkeit von lsb_release bei openSUSE : Bei 11.2 ist es dabei - also selbst innerhalb einer Distro nicht bei allen Versionsn. Bei 10.3 fehlt es auch :-( .
 

admine

Ultimate Guru
Muss dein Script denn "allein" laufen oder wäre nicht auch "interaktiv" möglich?
Bsp:
gib 1 ein für openSUSE, 2 für Ubuntu, 3 für Sidux etc.
 
OP
framp

framp

Moderator
Teammitglied
admine schrieb:
Muss dein Script denn "allein" laufen oder wäre nicht auch "interaktiv" möglich?
Bsp:
gib 1 ein für openSUSE, 2 für Ubuntu, 3 für Sidux etc.
Klar, das ist auch eine Möglichkeit. Aber ehrlich gesagt möchte ich das gerne programmatisch lösen. lsb_release ist schon sehr gut - nur scheint es leider nicht in allen Distros per default installiert zu sein :-(.
 
OP
framp

framp

Moderator
Teammitglied
Bin dabei nach und nach weitere Distros unter VMWare zu installieren. debian hat auch lsb_release. Scheint eine gute Basis zu sein - wenn auch nicht alle Distros es per default haben :skeptisch:
 

tisu

Hacker
Könnte man das nicht auch durch eine 3-fache if-Abfrage realisieren? Bzw. einer Schleife mit verschachtelter if-Anweisung? Das müsste doch eigentlich gehen, denn im Endeffekt hast Du doch nur *release, issue und *version abzufragen.

EDIT:
Manche Distros kennen nicht lsb-release sondern lsb_release... Müsste Standard sein überall

http://linux.die.net/man/1/lsb_release
 
Oben