Чи можна сказати, чи є моє ядро ​​Linux користувальницьким (тобто компільованим) на відміну від distro?


10

Беручи приклад Ubuntu, чи можемо ми сказати, чи ядро ​​було складено на замовлення, а не те, що поставляється з distro?


Перевірте цю тему: 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 див. правки.
Faheem Mitha

2
Ага, так, хеши повинні це зробити, розумні!
terdon

Хоча цей підхід працює в більшості випадків, він не працює в моєму, оскільки у мене є приватне сховище для локально складених пакетів, тому він відображається як пакет постачальників, навіть коли я використовую локально складений пакет. звичайно, ви можете легко помітити різницю, оскільки пакети постачальників мають назву постачальника як частину версії, де мої пакети мають моє ім'я.
hildred

1
@bytefire apt-cache show ...працює. Я бачу, що я неправильно ввів. Виправляємо зараз.
Faheem Mitha

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

які вказують на ту саму версію


1
Чи зміниться це, якщо ви перекомпілюєте ту саму версію з різними параметрами? Я не бачу, чому рядок версій змінився б у такому випадку.
terdon

Я не впевнений, що встановлять 2 з такою ж назвою. Я цього не пробував. Особисто під час перекомпіляції з різними параметрами я
видаляю

Я б здогадався, що те саме ім’я буде просто переписане /boot. Моя думка полягає в тому, що я не бачу, чому ви очікуєте unameзміни результату, якщо ви просто перекомпілюєте, змінюючи деякі параметри. У такому випадку я б очікував цього apt-cacheі uname -rповерне ту саму інформацію, незважаючи на те, що ви перекомпілювались на місцевому рівні.
тердон

@terdon Рядок версій можна налаштувати в конфігурації ядра, що є хорошою ідеєю, якщо ви використовуєте джерело дистрибутива.
goldilocks

@goldilocks так, я бачив це у вашій відповіді, і це має сенс. Однак якщо я був досить дурним, щоб цього не зробив, і щойно перекомпілював ядро ​​мого дистрибутива, змінивши пару варіантів, рядки версії будуть однаковими, правда? Ваша пропозиція щодо кількості збірок може допомогти, але, наскільки я знаю, не те, що пропонується тут.
terdon

0

Я б сказав, що найбільш правдива відповідь - "ні, ти не можеш". Існують різні методи, які можуть допомогти в певних випадках, і вони вже були запропоновані, але, здається, всі вони пропускають, як склалася ця ситуація. По правді кажучи, якщо ви користуєтеся власним ядром, це ядро ​​може робити все, що завгодно, в тому числі приховувати свою присутність або видаватися іншим ядром.

Я б хвилювався, якщо ви справді керуєте власним ядром і не знаєте цього. Єдиний надійний спосіб дізнатися, яке ядро ​​використовується, - це ретельне відстеження того, яке ядро ​​ви компілюєте та встановлюєте.

Якщо ви справді не впевнені, з якого ядра працює система чи з яких джерел побудовано це ядро ​​чи звідки воно походить, я б серйозно подумав про перевстановлення ОС із відомого хорошого зображення і буду більш обережним у майбутньому щодо того, які ядра ви спробуєте та завантажите. з або використовувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.