Беручи приклад Ubuntu, чи можемо ми сказати, чи ядро було складено на замовлення, а не те, що поставляється з distro?
Беручи приклад Ubuntu, чи можемо ми сказати, чи ядро було складено на замовлення, а не те, що поставляється з distro?
Відповіді:
Звичайно, просто перевірте, чи 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
apt-cache show ...
працює. Я бачу, що я неправильно ввів. Виправляємо зараз.
Мінімально 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
.
Те саме, що і будь-який інший
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
які вказують на ту саму версію
/boot
. Моя думка полягає в тому, що я не бачу, чому ви очікуєте uname
зміни результату, якщо ви просто перекомпілюєте, змінюючи деякі параметри. У такому випадку я б очікував цього apt-cache
і uname -r
поверне ту саму інформацію, незважаючи на те, що ви перекомпілювались на місцевому рівні.
Я б сказав, що найбільш правдива відповідь - "ні, ти не можеш". Існують різні методи, які можуть допомогти в певних випадках, і вони вже були запропоновані, але, здається, всі вони пропускають, як склалася ця ситуація. По правді кажучи, якщо ви користуєтеся власним ядром, це ядро може робити все, що завгодно, в тому числі приховувати свою присутність або видаватися іншим ядром.
Я б хвилювався, якщо ви справді керуєте власним ядром і не знаєте цього. Єдиний надійний спосіб дізнатися, яке ядро використовується, - це ретельне відстеження того, яке ядро ви компілюєте та встановлюєте.
Якщо ви справді не впевнені, з якого ядра працює система чи з яких джерел побудовано це ядро чи звідки воно походить, я б серйозно подумав про перевстановлення ОС із відомого хорошого зображення і буду більш обережним у майбутньому щодо того, які ядра ви спробуєте та завантажите. з або використовувати.