Можно ли сказать, является ли мое ядро ​​Linux кастомным (т.е. скомпилированным), а не дистрибутивом?

10

На примере Ubuntu, можем ли мы сказать, было ли ядро ​​скомпилировано, а не что входит в дистрибутив?

bytefire
источник
Проверьте эту тему: unix.stackexchange.com/questions/43164/…
nomadrc
2
Ну, просто двоичный файл, сравните с файлом пакета ... и посмотрите, является ли это исходным ядром или оно было изменено ..
kravemir

Ответы:

13

Конечно, просто проверьте, dpkgзнает ли об этом.

Сначала проверьте версию ядра, которую вы используете.

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

Затем скажите, dpkgчтобы искать файл образа ядра в dpkgбазе данных.

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

Или, лучше, использовать dlocateиз dlocateпакета. dlocateсначала строит кеш из dpkgбазы данных и использует его. Так быстро.

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

Наконец, убедитесь, что архивы Debian содержат этот пакет.

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

Если они этого не делают, то это заказной пакет. Конечно, если dpkg не знает о файле образа, то ваше ядро ​​вообще не является частью пакета, но было скомпилировано локально.

Обратите внимание, что это apt может отличить пакет в архиве Debian от локально скомпилированного пакета с тем же именем. Я думаю, что он проверяет md5sum пакета, но я забываю детали того, как он это делает. Бинарные пакеты содержат информацию о хэшах, см. apt-cache show linux-image-3.2.0-4-amd64, Например, нижнюю часть . например

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
Фахим Митха
источник
1
Пожалуйста, смотрите мои комментарии к ответу exussum. Что, если вы просто перекомпилируете одно и то же ядро ​​с разными параметрами, но не дадите ему другое имя?
Terdon
@terdon см. правки.
Фахим Митха
2
Ах да, хеши должны делать это, умно!
Terdon
Хотя этот подход работает в большинстве случаев, он не работает в моем, так как у меня есть закрытое хранилище для локально скомпилированных пакетов, поэтому он отображается как пакет поставщика, даже когда я использую локально скомпилированный пакет. Конечно, вы можете легко заметить разницу, поскольку пакеты поставщиков имеют имя поставщика как часть версии, где мои пакеты имеют мое имя.
hildred
1
@bytefire apt-cache show ...работает. Я вижу, что опечатка. Исправляем сейчас.
Фахим Митха
7

Минимально, uname -rдаст версию кернал, такую ​​как 3.18.6. Однако, когда ядро ​​скомпилировано, к нему можно настроить и присоединить дополнительную строку, и дистрибутивы обычно делают это, чтобы указать собственный уровень патча (после тире) и разновидность, например 3.18.6-32-generic. Это одна подсказка; Очевидно, что использование собственной строки при создании собственного ядра может быть другим.

uname -v дает строку, которая по умолчанию что-то вроде этого

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

Число является произвольным в том смысле, что это число раз, когда это ядро ​​было построено с использованием определенного исходного дерева без сбрасываемого дерева - это может быть полезно при создании собственного. SMPуказывает на многозадачное (т.е. не в реальном времени) ядро, а PREEMPT - еще одна опция конфигурации, связанная с «моделью вытеснения планировщика». Но большая подсказка здесь - вероятно, время, которое это было построено. Это можно использовать для сопоставления с меткой времени изменения / изменения на самом ядре, имея в виду, что ее можно изменить, например, с помощью touch. Например, statна этом ядре выглядит так:

  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: -

Что в значительной степени соответствует Mon Mar 9 13:55:25 EDT 2015.

лютик золотистый
источник
2

Такой же как и любой другой

sudo apt-cache policy linux-generic

установлена ​​ли версия через менеджер пакетов и

uname -r

сравнить версии

для меня это

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

а также

3.19.0-15-generic

которые указывают на ту же версию

exussum
источник
1
Изменится ли это, если вы перекомпилируете одну и ту же версию с разными параметрами? Я не понимаю, почему строка версии изменилась бы в этом случае.
Terdon
Я не уверен, что 2 с тем же именем установят. Я не пробовал это. Лично при перекомпиляции с разными опциями я
удаляю
Я предполагаю, что это имя будет просто перезаписано в /boot. Я хочу сказать, что я не понимаю, почему вы ожидаете, что результат unameизменится, если вы просто перекомпилируете при изменении некоторых опций. В этом случае я ожидаю, что apt-cacheи uname -rверну ту же информацию, несмотря на тот факт, что вы перекомпилировали локально.
Terdon
@terdon Строка версии может быть настроена в конфигурации ядра, что является хорошей идеей, если вы используете дистрибутив.
Златовласка
@goldilocks да, я видел это в твоем ответе, и это имеет смысл. Однако, если я был достаточно глуп, чтобы этого не сделать, и только что перекомпилировал стандартное ядро ​​моего дистрибутива, изменив пару параметров, строки версий будут идентичны, верно? Ваше предложение о количестве сборок может помочь, но, насколько я знаю, не то, что предлагается здесь.
Terdon
0

Я бы сказал, что наиболее правдивый ответ - «нет, ты не можешь». Существуют различные методы, которые могут помочь в определенных случаях, и они уже были предложены, но, похоже, все они упускают из виду то, как на самом деле сложилась эта ситуация. По правде говоря, если вы используете собственное ядро, это ядро ​​может делать все что угодно, в том числе скрывать свое присутствие или выглядеть как другое ядро.

Я был бы обеспокоен, если бы вы действительно запускали собственное ядро ​​и не знали об этом. Единственный надежный способ узнать, какое ядро ​​используется, - тщательно отслеживать, какое ядро ​​вы компилируете и устанавливаете.

Если вы действительно не уверены, из какого ядра работает система или из каких источников это ядро ​​было построено или откуда оно взято, я серьезно подумаю о переустановке ОС из известного хорошего образа и в будущем буду более внимательным в отношении того, какие ядра вы пытаетесь загрузить. от или использовать.

Vality
источник