Verwendetes Linux System erkennen
Verwendetes Linux System erkennen
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
Grund: Titel geändert
Re: Verwedetes Linux System erkennen
Google ist dein Freund.
Z.B. ein Kommando wie:
ausführen und das Resultat einlesen.
Z.B. ein Kommando wie:
Code: Alles auswählen
lsb_release -a
ausführen und das Resultat einlesen.
-
- 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
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.:
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.
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.
-
- 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
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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
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.
Wahrscheinlich fragt der Threadersteller aber nach Kernel/CPU etc. (statt Distributor) und ist dann mit /proc gut bedient.
-
- 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
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
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
-
- 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
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
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
-
- 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
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
Tipp mal am Terminal diese Befehle:
$ cat /etc/*-release
$ cat /etc/issue
Re: Verwedetes Linux System erkennen
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.
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.
-
- 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
Der Befehl "lsb_release -a " soll die Datei /etc/lsb-release auswerten.
Du brauchst kein Terminal, wie ich gesagt habe# du kannst sowas verwenden:
Aufruf z.b.:
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.
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.
-
- 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
Weitere Möglichkeit für Linux ist das hier:
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
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;
Re: Verwedetes Linux System erkennen
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.
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.
-
- Beiträge: 957
- Registriert: Mo 11. Sep 2006, 22:56
Re: Verwedetes Linux System erkennen
Ein bissl spät aber auf der Mailingliste gab´s auch schonmal ´ne Diskussion dazu:
http://www.mail-archive.com/lazarus@lis ... 22070.html
http://www.mail-archive.com/lazarus@lis ... 22070.html
Re: Verwedetes Linux System erkennen
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.
Wenn jemand weiß wie das geht bin ich auch ganz Ohr.
Lg,
jus
-
- 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
Unter MacOS gibt es das Programm sysctl. Mit dem entsprechenden Parameter (z.B. kern.version) wird nur der entsprechende Wert ausgegeben.