• 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?

OP
framp

framp

Moderator
Teammitglied
tisu schrieb:
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 ...
Implementierungsmäßig ist das kein Problem. Ich bin einfach auf der Suche nach einer schon existierenden Lösung (Sollte ja öfters ein Problem unter Linux sein) bzw Idee wie ich es machen kann. Und die Sache mit lsb_release klingt ja schon sehr gut. Vermutlich werde ich lsb_release benutzen sofern verfügbar und ansonsten manuell in den Files parsen.
 

tisu

Hacker
Manche Distributionen haben lsb-release und manche haben lsb_release. [Man achte auf die Strichsetzung]
 
OP
framp

framp

Moderator
Teammitglied
tisu schrieb:
Manche Distributionen haben lsb-release und manche haben lsb_release. [Man achte auf die Strichsetzung]
Danke für den Hinweis. Korrektur: Versuch erst mit lsb_release, dann lsb-release und dann eigenes parsen.
 
OP
framp

framp

Moderator
Teammitglied
tisu schrieb:
...Manche Distros kennen nicht lsb-release sondern lsb_release... Müsste Standard sein überall

http://linux.die.net/man/1/lsb_release...
lsb_release ist leider nicht in allen Distos standardmäßig installiert. lsb-release gibt es lt Standard nicht als Command. Dagegen ist die Datei /etc/lsb-release aber standardkonform. Ist allerdings ein ziemlicher KuddelMuddel bei den Distros diesbezüglich. Ich bin am Evaluieren mit VMWare-Installationen von verschiedenen Distros. Sobald ich Ergebnisse habe werde ich sie hier posten.
 

cero

Guru
Ist /etc/lsb-release auch bei neuen sidux-Installationen dabei? Bei mir finde
ich diese Datei leider auch nicht :nosmile:
 
OP
framp

framp

Moderator
Teammitglied
cero schrieb:
Ist /etc/lsb-release auch bei neuen sidux-Installationen dabei? Bei mir finde
ich diese Datei leider auch nicht :nosmile:
Findest Du auch nichts mit
Code:
ls /etc/*[-_]{release,version}
?
Die Distros sind da ziemlich unterschiedlich :(
 
OP
framp

framp

Moderator
Teammitglied
Anbei das Script wie versprochen. Wer eine weitere noch nicht getestete Distro hat kann das Script ja gerne auf dieser ausführen und sein Ergebnis incl Distro Version hier posten ;-) Ich update dann hier den Header des Scripts.

Code:
#!/bin/bash

detectedDistro="Unknown"
regExpLsbInfo="Description:([^ ]*)"
regExpLsbFile="/etc/(.*)[-_]"

#
# Shell script which detects the Linux distro it's running on
#
# Returned distro     Version the script was tested with
# ---------------------------------------------------------
# opensuse              openSuSE 11.0 (no lsb_release) and 11.2 (lsb_release)
# fedora                Fedora 12
# centos                CentOS 5.4
# kubuntu               Kubuntu 9.10
# debian                Debian 5.0.3
# arch                     Arch
# slackware            Slackware 13.0.0.0.0
# mandriva             Mandriva 2009.1
# debian                 Knoppix 6.2
# linuxmint              Mint 8

if [ `which lsb_release 2>/dev/null` ]; then       # lsb_release available
   lsbInfo=`lsb_release -d`
   if [[ $lsbInfo =~ $regExpLsbInfo ]]; then
      detectedDistro=${BASH_REMATCH[1]}
   else
      echo "??? Should not occur: Don't find distro name in lsb_release output ???"
      exit 1
   fi

else                                               # lsb_release not available
   etcFiles=`ls /etc/*[-_]{release,version} 2>/dev/null`
   for file in $etcFiles; do
      if [[ $file =~ $regExpLsbFile ]]; then
         detectedDistro=${BASH_REMATCH[1]}
         break
      else
         echo "??? Should not occur: Don't find any etcFiles ???"
         exit 1
      fi
   done
fi

detectedDistro=`echo $detectedDistro | tr "[:upper:]" "[:lower:]"`

case $detectedDistro in
        suse)  detectedDistro="opensuse" ;;
        linux)  detectedDistro="linuxmint" ;;
esac

echo "Detected distro: $detectedDistro"
 

glako

Newbie
Code:
sojasau@horst ~/Scripte % ./distritest
Detected distro: arch
sojasau@horst ~/Scripte % uname -a
Linux horst 2.6.32-ARCH #1 SMP PREEMPT Sat Dec 26 09:02:58 CET 2009 x86_64 Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz GenuineIntel GNU/Linux
Slackware folgt :)
 
OP
framp

framp

Moderator
Teammitglied
Klasse! Kannst Du bitte noch
Code:
cat /etc/*[-_]{release,version}
posten bzw lsb_release -d? Da sieht man dann die genaue Distro Version die ich in den Scriptheader reinschreiben kann . Aus uname -a sieht man leider nur die Kernelversion :-(
 

glako

Newbie
framp schrieb:
Code:
cat /etc/*[-_]{release,version}
Code:
16 sojasau@horst ~ % cat /etc/*[-_]{release,version} 
DISTRIB_ID=arch
cat: /etc/*[-_]version: Datei oder Verzeichnis nicht gefunden
Auch lsb_release -d in saemtlichen Variationen ergibt nix.
Es extistiert unter /etc zwar eine Datei Namens arch-release, ist aber leer.

Das einzige was ich bislang auf ein bestimmten Zeitpunkt zurueckfuehren konnte ist das:
Code:
head -1 /var/log/pacman.log
Und ergibt bei mir:
Code:
[2009-12-15 17:21] installed filesystem (2009.07-1)
Sprich, zu dem Zeitpunkt hab ich das System aufgesetzt.
 
OP
framp

framp

Moderator
Teammitglied
Hm ... ich dachte bei Arch gibt es auch sowas wie Versionen wie bei den anderen Distros :???: Anyhow - ich adde auch arch ohne Version zum Header als getestete Distro
 

glako

Newbie
Jein, Arch schmeisst zwischendurch mal einen Snapshot zum installieren raus. Siehe hier:
http://wiki.archlinux.org/index.php/FAQ#Q.29_When_will_the_new_release_be_made.3F

Bei Slackware erhalte ich uebrigens das hier:
Code:
sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %

Mehrmals kopiert, auch von Arch rueber kopiert (wo es ja funktioniert).
Code:
2 sojasau@zitrone ~/Scripte % cat /etc/*[-_]{release,version}                                                                                                                      :(
cat: /etc/*[-_]release: Datei oder Verzeichnis nicht gefunden
Slackware 13.0.0.0.0
 
OP
framp

framp

Moderator
Teammitglied
glako schrieb:
... Bei Slackware erhalte ich uebrigens das hier:
Code:
sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %
Ich auch auf meinem VMWare image :eek: Dachte das ist irgendein Problem bei meiner Installation :???: Scheint so als hätte Slackware irgendwie Probleme mit RegExs in der bash.
 
OP
framp

framp

Moderator
Teammitglied
Wollte eben noch Mandriva verifizieren. Da die Installation nur nach Eingabe einer gültigen eMailAdresse :irre: fortgesetzt wird ist die Distro für mich gestorben. Vielleicht könnte ja jemand anderes mit Mandriva das Script checken...
 

glako

Newbie
Code:
sojasau@localhost Dokumente]$ ./distritest
Detected distro: mandriva
Code:
[sojasau@localhost Dokumente]$ cat /etc/*[-_]{release,version}
LSB_VERSION=lsb-3.1-ia32:lsb-3.1-noarch
DISTRIB_ID=MandrivaLinux
DISTRIB_RELEASE=2009.1
DISTRIB_CODENAME=pauillac
DISTRIB_DESCRIPTION="Mandriva Linux 2009.1"
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
Mandriva Linux release 2009.1 (Official) for i586
cat: /etc/*[-_]version: Datei oder Verzeichnis nicht gefunden
Code:
[sojasau@localhost Dokumente]$ lsb_release -d
Description:    Mandriva Linux 2009.1
[sojasau@localhost Dokumente]$
VBox sei Dank :)
 
OP
framp

framp

Moderator
Teammitglied
framp schrieb:
glako schrieb:
... Bei Slackware erhalte ich uebrigens das hier:
Code:
sojasau@zitrone ~/Scripte % ./distritest 
./distritest: line 20: syntax error in conditional expression: unexpected token `('
./distritest: line 20: syntax error near `Description:(['
./distritest: line 20: `   if [[ $lsbInfo =~ Description:([^ ]*) ]]; then'
2 sojasau@zitrone ~/Scripte %
Ich auch auf meinem VMWare image :eek: Dachte das ist irgendein Problem bei meiner Installation :???: Scheint so als hätte Slackware irgendwie Probleme mit RegExs in der bash.

Nachdem ich den regulären Ausdruck aus dem if in eine Variable ausgelagert habe funktioniert es auch unter Slackware :schockiert: - warum auch immer :???:
 
OP
framp

framp

Moderator
Teammitglied
glako schrieb:
blacklips schrieb:
Fedora 12 läuft hier gar nicht:
Code:
./distrocheck 
??? Should not occur: Don't find any etcFiles ???
Genau das kommt hier jetzt auch mit Slackware. :(
:eek:ps: :eek:ps: :eek:ps: Gab einen kleinen Typo im Script hier im Thread. Bei mir lokal allerdings nicht. :eek:ps: :eek:ps: :eek:ps:
Code:
33c33
<       if [[ $file =~ $regExpLsbFile ]]; then
---
>       if [[ $lsbInfo =~ $regExpLsbFile ]]; then
Ist jetzt oben korrigiert.
 
Oben