私のLinuxカーネルがディストリビューションではなくカスタム(つまりコンパイルされた)カーネルであるかどうかはわかりますか?

私のLinuxカーネルがディストリビューションではなくカスタム(つまりコンパイルされた)カーネルであるかどうかはわかりますか?

Ubuntuを例にすると、ディストリビューションに付属のカーネルの代わりにカーネルがカスタムコンパイルされたかどうかを知ることができますか?

答え1

もちろん、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で使用することです。まず、データベースにキャッシュを構築して使用します。だから高速です。dlocatedlocatedpkg

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

答え2

少なくとも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

答え3

他と同様

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

これはバージョンが同じであることを示します。

答え4

私は最も一般的に正解は「いいえ、できません」と言いたいと思います。特定の状況で役立つさまざまな方法が提案されていますが、すべてこれらの状況が実際にどのように発生するかを無視するようです。実際にカスタムカーネルを使用すると、カーネルは自分の存在を隠したり、他のカーネルとして表示されるなど、何でもできます。

実際にカスタムカーネルを実行していますが、それを知らなかった場合は心配です。どのカーネルが使用されているかを知る唯一の信頼できる方法は、どのカーネルをコンパイルしてインストールしたかを注意深く追跡することです。

システムで実行されているカーネルが何であるか、そのカーネルがどのソースからビルドされたのか、どこから来たのかわからない場合は、既知の良好なイメージからOSを再インストールすることを真剣に検討し、今後の試みにはさらに注意を払います。そして、bootカーネルは以下から出てくるか、それとも使用します。

関連情報