Kann ich feststellen, ob mein Linux-Kernel im Gegensatz zur Distribution benutzerdefiniert (dh kompiliert) ist?

10

Können wir am Beispiel von Ubuntu feststellen, ob der Kernel benutzerdefiniert kompiliert wurde und nicht, was mit der Distribution geliefert wird?

Bytefire
quelle
Überprüfen Sie diesen Thread: unix.stackexchange.com/questions/43164/…
nomadrc
2
Nun, nur binär mit Paketdatei vergleichen ... und sehen, ob es sich um den ursprünglichen Kernel handelt oder ob er geändert wurde.
Kravemir

Antworten:

13

Sicher, überprüfen Sie einfach, ob Sie davon dpkgwissen.

Überprüfen Sie zuerst die Kernelversion, die Sie ausführen.

uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux

Weisen Sie dann dpkgan, nach der Kernel-Image-Datei in der dpkgDatenbank zu suchen .

dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

Oder besser dlocateaus der dlocatePackung verwenden. dlocateErstellt zuerst einen Cache aus der dpkgDatenbank und verwendet diesen. So geht es schnell.

dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

Überprüfen Sie abschließend, ob die Debian-Archive dieses Paket enthalten.

apt-cache policy linux-image-3.2.0-4-amd64

linux-image-3.2.0-4-amd64:
  Installed: 3.2.68-1+deb7u1
  Candidate: 3.2.68-1+deb7u1
  Version table:
 *** 3.2.68-1+deb7u1 0
        500 http://security.debian.org/ wheezy/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     3.2.65-1 0
        500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages

Wenn dies nicht der Fall ist, handelt es sich um ein benutzerdefiniertes Paket. Wenn dpkg nichts über die Image-Datei weiß, ist Ihr Kernel natürlich überhaupt nicht Teil eines Pakets, sondern wurde lokal kompiliert.

Beachten Sie, dass apt dies den Unterschied zwischen einem Paket im Debian-Archiv und einem lokal kompilierten Paket mit demselben Namen erkennen lässt. Ich denke, es überprüft die md5sum des Pakets, aber ich vergesse die Details, wie es das macht. Die Binärpakete enthalten Informationen zu Hashes, siehe beispielsweise unten in apt-cache show linux-image-3.2.0-4-amd64. z.B

Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15
Faheem Mitha
quelle
1
Bitte beachten Sie meine Kommentare zur Antwort von exussum. Was ist, wenn Sie nur denselben Kernel mit verschiedenen Optionen neu kompilieren, ihm aber keinen anderen Namen geben?
Terdon
@terdon siehe Änderungen.
Faheem Mitha
2
Ah, ja, die Hashes sollten es tun, klug!
Terdon
Obwohl dieser Ansatz in den meisten Fällen funktioniert, funktioniert er in meinem nicht, da ich ein privates Repository für lokal kompilierte Pakete habe. Daher wird er auch dann als Anbieterpaket angezeigt, wenn ich ein lokal kompiliertes Paket verwende. Natürlich können Sie den Unterschied leicht erkennen, da Anbieterpakete den Anbieternamen als Teil der Version haben, wobei meine Pakete meinen Namen haben.
Hildred
1
@bytefire apt-cache show ...funktioniert. Ich sehe, ich habe falsch geschrieben. Jetzt korrigieren.
Faheem Mitha
7

Minimal uname -rwird die kernale Version geben, wie z 3.18.6. Wenn der Kernel jedoch kompiliert wird, kann eine zusätzliche Zeichenfolge konfiguriert und an diese angehängt werden. Die Distributionen tun dies normalerweise, um ihre eigene Patch-Ebene (nach einem Bindestrich) und ihren eigenen Geschmack anzugeben, z 3.18.6-32-generic. Das ist ein Hinweis; Die Verwendung einer eigenen Zeichenfolge beim Erstellen eines benutzerdefinierten Kernels kann natürlich eine andere sein.

uname -v gibt eine Zeichenfolge an, die standardmäßig so ähnlich ist

#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015

Die Anzahl ist in dem Sinne willkürlich, dass es die Häufigkeit ist, mit der dieser Kernel unter Verwendung eines bestimmten Quellbaums erstellt wurde, ohne dass der Baum zurückgesetzt wurde. Dies kann nützlich sein, wenn Sie Ihren eigenen erstellen. SMPzeigt einen Multitasking-Kernel (dh keinen Echtzeit-Kernel) an und PREEMPT ist eine weitere Konfigurationsoption, die sich auf das "Preemption-Modell" des Schedulers bezieht. Aber der große Hinweis hier ist wahrscheinlich die Zeit, als es gebaut wurde. Dies kann verwendet werden, um mit dem Änderungs- / Änderungszeitstempel auf dem Kernel selbst übereinzustimmen, wobei berücksichtigt wird, dass z touch. B. mit geändert werden kann . Zum Beispiel, statauf diesen Kernel sieht wie folgt aus :

  File: ‘3.19-goldilocksSpecial’
  Size: 6858880         Blocks: 13400      IO Block: 4096   regular file
Device: 801h/2049d      Inode: 3156605     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
 Birth: -

Welches ist ziemlich im Einklang mit Mon Mar 9 13:55:25 EDT 2015.

Goldlöckchen
quelle
2

Gleich wie alle anderen

sudo apt-cache policy linux-generic

ist die über den Paketmanager installierte Version und

uname -r

Vergleiche die Versionen

für mich ist es

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

und

3.19.0-15-generic

die die gleiche Version anzeigen

Exussum
quelle
1
Wird sich das ändern, wenn Sie dieselbe Version mit unterschiedlichen Optionen neu kompilieren? Ich verstehe nicht, warum sich die Versionszeichenfolge in diesem Fall ändern würde.
Terdon
Ich bin nicht sicher, ob 2 mit demselben Namen installiert werden. Ich habe es nicht versucht. Persönlich entferne ich beim Neukompilieren mit verschiedenen Optionen die Version aus dem Paketmanager, um Konflikte zu beseitigen
Exussum
Ich würde vermuten, dass der gleiche Name einfach überschrieben wird /boot. Mein Punkt ist, dass ich nicht verstehe, warum Sie erwarten würden, dass sich die Ausgabe von unameändert, wenn Sie nur neu kompilieren, während Sie einige Optionen ändern. In diesem Fall würde ich das erwarten apt-cacheund uname -rdie gleichen Informationen zurückgeben, obwohl Sie lokal neu kompiliert haben.
Terdon
@terdon Die Versionszeichenfolge kann in der Kernelkonfiguration angepasst werden. Dies ist eine gute Idee, wenn Sie die Distributionsquelle verwenden.
Goldlöckchen
@goldilocks ja, das habe ich in deiner Antwort gesehen und das macht Sinn. Wenn ich jedoch dumm genug wäre, dies nicht zu tun, und nur den Kernel meiner Distribution neu kompiliert hätte, indem ich einige Optionen geändert hätte, wären die Versionszeichenfolgen identisch, oder? Ihr Vorschlag für die Anzahl der Builds könnte helfen, aber meines Wissens nicht das, was hier vorgeschlagen wird.
Terdon
0

Ich würde sagen, die allgemeinste Antwort lautet "Nein, du kannst nicht". Es gibt verschiedene Methoden, die in bestimmten Fällen hilfreich sein können, und diese wurden bereits vorgeschlagen, aber alle scheinen zu übersehen, wie diese Situation tatsächlich zustande gekommen ist. In Wahrheit kann dieser Kernel, wenn Sie einen benutzerdefinierten Kernel verwenden, alles tun, einschließlich das Ausblenden seiner Anwesenheit oder das Erscheinen eines anderen Kernels.

Ich wäre besorgt, wenn Sie tatsächlich einen benutzerdefinierten Kernel ausführen und dies nicht wüssten. Die einzige zuverlässige Methode, um zu wissen, welcher Kernel verwendet wird, besteht darin, sorgfältig zu verfolgen, welchen Kernel Sie kompilieren und installieren.

Wenn Sie wirklich nicht sicher sind, auf welchem ​​Kernel das System ausgeführt wird oder aus welchen Quellen dieser Kernel erstellt wurde oder woher er stammt, würde ich ernsthaft in Betracht ziehen, das Betriebssystem von einem bekanntermaßen guten Image neu zu installieren und in Zukunft vorsichtiger zu sein, welche Kernel Sie versuchen und starten von oder verwenden.

Vality
quelle