Verwendetes Linux System erkennen

Für Fragen von Einsteigern und Programmieranfängern...
harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Verwendetes Linux System erkennen

Beitrag von harrybonn »

Gibt es eine Möglichkeit mit Lazarus zu erkennen, unter welchem Unix/Linux Betriebssystem mein Anwendungs-Programm läuft, z.B. Suse oder Ubuntu, etc.?
Zuletzt geändert von Lori am Do 17. Nov 2011, 20:41, insgesamt 1-mal geändert.
Grund: Titel geändert

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Verwedetes Linux System erkennen

Beitrag von theo »

Google ist dein Freund.

Z.B. ein Kommando wie:

Code: Alles auswählen

lsb_release -a

ausführen und das Resultat einlesen.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Verwedetes Linux System erkennen

Beitrag von Bora4d »

Es ist sehr einfach bei Linux erhälst du Informationen über System (laufende Programme, Version, Speicher ..) über Dateien im Verzeichnis /proc.

Ich glaube für dich heißt die Datei:
/proc/version

(Ich bin momentan mit Windows unterwegs.)
Du kannst alle Dateien dort mit Texteditor öffnen und Ihhalt anschauen. Mit Lazarus kannst du das mit TStringList machen z.B.:

Code: Alles auswählen

StringList1.LoadFromFile('/proc/version');


Programme wie KDE/Gnome Infozentrum verwenden auch die Daten aus diesem Verzeichnis. Inhalt von /Proc sind keine echte Dateien sondern werden vom Kernel zur Verfügung gestellt. Also du kannst dort keine Änderungen machen.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Verwedetes Linux System erkennen

Beitrag von Socke »

Bora4d hat geschrieben:Inhalt von /Proc sind keine echte Dateien sondern werden vom Kernel zur Verfügung gestellt. Also du kannst dort keine Änderungen machen.

Der letzte Satz ist nicht ganz richtig. Besser wäre: Änderungen, die du dort vornehmen kannst, gelten immer für den aktuellen Kontext. Das heißt sie sind nach Systemneustart weg oder sie gelten nur für einen bestimmten Prozess.
Änderungen an vielen anderen Dateien ist wirklich sinnlos.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Verwedetes Linux System erkennen

Beitrag von Scotty »

Das Verzeichnis /proc gehört dem Kernel und nicht dem Distributor. Theo's Empfehlung funktioniert einwandfrei, obwohl ich bezweifle, dass der Befehl Unix-Standard ist und z.B. auch ein Arch-Linux oder ein von Scratch erstelltes System das Script in dieser Art beinhalten.
Wahrscheinlich fragt der Threadersteller aber nach Kernel/CPU etc. (statt Distributor) und ist dann mit /proc gut bedient.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Verwedetes Linux System erkennen

Beitrag von mschnell »

So was nennt sich nicht "Betriebssystem" sondern "Distribution". und davon gibt es hunderte, die alle dasselbe "Betriebssystem" benutzen können. Ich glaube kaum, dass es einen Distribututios-übergreifenden Standard gibt, der eine Funktion zum Feststellen der Distributions-Version definiert.

http://de.wikipedia.org/wiki/Linux-Distribution sagt: Damit sich die Distributionen nicht weiter auseinanderentwickeln, wurde die Free Standards Group (heute Linux Foundation) mit dem Ziel gegründet, entsprechende Standards zwischen Distributionen zu fördern. Der Bekannteste ist die Linux Standard Base zur Förderung der binären Kompatibilität der Distributionen. Die LSB wird dabei von den verschiedenen Distributionen unterschiedlich strikt umgesetzt. Sie definiert übereinstimmende Binärschnittstellen („ABI“ genannt, für Application Binary Interface), einige Details zum inneren Aufbau und ein Paketsystem (hier RPM), das für die Installation von Software anderer Anbieter unterstützt werden muss.

Also könnte man bei der Linux Foundation vielleicht fündig werden: http://de.wikipedia.org/wiki/Linux_Standard_Base

-Michael

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Verwedetes Linux System erkennen

Beitrag von Bora4d »

Mir war langweilig hab jetzt Linux gestartet und anschaut. In /proc/version steht nur Kernelversion, Datum etc.
Distroname und Version bekommt man über eine Datei im Verzeichnis /etc. Die Datei heißt:
/etc/*-release
(* steht für Distroname oder für lsb)
Am besten mit findfirst, findnext-Befehlen tatsächliche Dateinamen herausfinden und Inhalt mit TStringList-Laden und auswerten. Bei meinem Kubuntu heißt es:
lsb-release
Und drinnen steht das:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"

Und bei Arch (CtkArch):
arch-release
und Inhalt leer weil der Junge der CtkArch zusammengezimmert hat, hat vergessen einzutragen :)
Der Befehl von Theo gibt"s auch bei meinem Arch nicht.

Was ich hier beschrieben habe soll üblicher Weg sein.
http://www.google.de/#sclient=psy-ab&hl=de&biw=1280&bih=686&source=hp&q=how+to+detect+linux+distribution&pbx=1&oq=How+to+detect+linux+&aq=1L&aqi=g-L2g-vL1g-jvL1&aql=1&gs_sm=e&gs_upl=0l0l2l122l0l0l0l0l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=2e2cdc65f94529a6

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Verwedetes Linux System erkennen

Beitrag von Bora4d »

Wenn man ganz sicher gehen will oder *-release Datei nicht vorhanden ist , kann man auch zusätzlich die /etc/issue Datei auswerten.
Tipp mal am Terminal diese Befehle:
$ cat /etc/*-release
$ cat /etc/issue

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Verwedetes Linux System erkennen

Beitrag von harrybonn »

Vielen Dank erst einmal.

Leider sind die Angaben z.B. unter Suse und Ubuntu unterschiedlich.
In Suse gibt es im Ordner /etc. eine SuSE-release Datei, wo der Inhalt so ähnlich vorhanden ist,
wie in der lsbRelease-Datei unter ubuntu.

die Abfrage lsb_release -a erzeugt zwar unter beiden "Distributionen" die gewünsche Datei mit den gewünschten Informationen, aber dazu muss ich doch ein Terminal öffnen, oder?

Ich habe aber eine grafische Anwendung. Oder gibt es die Möglichkeit, von dort aus unbebemerkt ein Terminal zu öffnen, die Datei erzeugen zu lassen, die Informationen einzulesen und das Terminal wieder zu schließen?

Wäre schön, wenn es in Zukunft in Lazarus einen Befehl für eine Systemabfrage geben würde,
der für Windows, Linux und MAC nutzbar ist.

Da wäre ich nämlich direkt bei der nächsten Frage: Wie frage ich unter MAC OSX das System ab (also letztlich die Versionsnummer)?

Lazarus/FPC ist übrigens ein echt super, das will ich hier mal gesagt haben.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Verwedetes Linux System erkennen

Beitrag von Bora4d »

Der Befehl "lsb_release -a " soll die Datei /etc/lsb-release auswerten.
Du brauchst kein Terminal, wie ich gesagt habe# du kannst sowas verwenden:

Code: Alles auswählen

function TForm1.CheckDistro:string;
var aList: TStringList;
    aSr: TSearchRec;
    aDistroDatei, astr:string;
begin
  //Distro-Dateiholen
  aDistroDatei:='';
  if FindFirst('/etc/*-release', faHidden + faSysFile + faArchive + faReadOnly + faSymLink +faAnyFile, aSr) = 0 then begin
   try
    aDistroDatei:=aSr.Name;
   finally
    FindClose(aSr);
   end;
  end;
 
  //Distrodateiauswerten
  if aDistroDatei<>'' then begin
    aList:=TStringList.Create;
   try
    aList.LoadFromFile('/etc/'+aDistroDatei);
    astr:=LowerCase(aList.Text);
    if Pos('kubuntu',astr)>0 then Result:='kubuntu'
    else if Pos('ubuntu',astr)>0 then Result:='ubuntu'
    else if Pos('suse',astr)>0 then Result:='suse'
    else if Pos('arch',astr)>0 then Result:='arch';
    // .. und so weiter ...
   finally
    aList.Free;
   end;
  end;
end;


Aufruf z.b.:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(CheckDistro);
end;




Für Windows suche einfach in Google nach "Delphi Windows Version ermitteln" dann bekomst du tausende antworten. Mit Os X kenne ich mich nicht aus.

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Verwedetes Linux System erkennen

Beitrag von Bora4d »

Weitere Möglichkeit für Linux ist das hier:

Code: Alles auswählen

function GetDistroFile:string;
var aSr: TSearchRec;
begin
  if FileExists('/etc/lsb-release') then Result:='/etc/lsb-release'
  else begin
    Result:='';
     if FindFirst('/etc/*-release', faHidden + faSysFile + faArchive + faReadOnly + faSymLink +faAnyFile, aSr) = 0 then begin
      try
       Result:='/etc/'+aSr.Name;
      finally
       FindClose(aSr);
      end;
   end;
  end;
end;


So kann man es benutzen. Auf ein Formular ein Memo und ein Button packen und bein Button.OnClick das hinzufügen:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile(GetDistroFile);
end;

harrybonn
Beiträge: 101
Registriert: Fr 7. Jan 2011, 15:18

Re: Verwedetes Linux System erkennen

Beitrag von harrybonn »

Super!

Vielen Dank für Eure Hilfe.

Weiß noch Jemand, wie man das unter MAC OS X herausfindet?
Da gibt es keine issue und keine release-Datei im Ordner /etc.

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Verwedetes Linux System erkennen

Beitrag von creed steiger »

Ein bissl spät aber auf der Mailingliste gab´s auch schonmal ´ne Diskussion dazu:

http://www.mail-archive.com/lazarus@lis ... 22070.html

jus
Beiträge: 50
Registriert: Fr 6. Mai 2011, 13:29

Re: Verwedetes Linux System erkennen

Beitrag von jus »

harrybonn hat geschrieben:...
Weiß noch Jemand, wie man das unter MAC OS X herausfindet?
Da gibt es keine issue und keine release-Datei im Ordner /etc.


Ich habe mal danach gesucht und keine zufriedenstellende Lösung gefunden. Für die schnelle Nothilfe soll angeblich folgender Link funktionieren:
http://forum.lazarus.freepascal.org/ind ... l#msg71741

Ich habe das so gelöst, dass ich in Xcode eine Library mit der Versionsabfrage-Funktion implementiert habe und diese dann als dynamische Library in Lazarus reingeladen habe. Vermutlich kann man die Mac API Funktion "GESTALT" auch direkt in Lazarus ansprechen, aber es hat leider an meinen begrenzten Kenntnissen gescheitert. Hauptsache es funktioniert. :oops:
Wenn jemand weiß wie das geht bin ich auch ganz Ohr. :wink:

Lg,
jus

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Verwedetes Linux System erkennen

Beitrag von Scotty »

Unter MacOS gibt es das Programm sysctl. Mit dem entsprechenden Parameter (z.B. kern.version) wird nur der entsprechende Wert ausgegeben.

Antworten