На примере Ubuntu, можем ли мы сказать, было ли ядро скомпилировано, а не что входит в дистрибутив?
На примере Ubuntu, можем ли мы сказать, было ли ядро скомпилировано, а не что входит в дистрибутив?
Ответы:
Конечно, просто проверьте, 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
верну ту же информацию, несмотря на тот факт, что вы перекомпилировали локально.
Я бы сказал, что наиболее правдивый ответ - «нет, ты не можешь». Существуют различные методы, которые могут помочь в определенных случаях, и они уже были предложены, но, похоже, все они упускают из виду то, как на самом деле сложилась эта ситуация. По правде говоря, если вы используете собственное ядро, это ядро может делать все что угодно, в том числе скрывать свое присутствие или выглядеть как другое ядро.
Я был бы обеспокоен, если бы вы действительно запускали собственное ядро и не знали об этом. Единственный надежный способ узнать, какое ядро используется, - тщательно отслеживать, какое ядро вы компилируете и устанавливаете.
Если вы действительно не уверены, из какого ядра работает система или из каких источников это ядро было построено или откуда оно взято, я серьезно подумаю о переустановке ОС из известного хорошего образа и в будущем буду более внимательным в отношении того, какие ядра вы пытаетесь загрузить. от или использовать.