Linuxカーネルがディストリビューションではなくカスタム(つまり、コンパイル済み)かどうかを判断することはできますか?


10

Ubuntuを例にとると、カーネルがディストリビューションに付属するものではなく、カスタムコンパイルされたものかどうかを確認できますか?


このスレッドをチェックしてください: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

次にdpkgdpkgデータベースでカーネルイメージファイルを検索するように指示します。

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がイメージファイルを認識していない場合、カーネルはパッケージの一部ではなく、ローカルでコンパイルされています。

Debianアーカイブ内のパッケージとローカルでコンパイルされた同じ名前のパッケージとの違いapt わかることに注意してください。パッケージの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編集を参照してください。
Faheem Mitha、2015

2
ああ、はい、ハッシュはそれを行うべきです、賢いです!
terdon

このアプローチはほとんどの場合機能しますが、ローカルでコンパイルされたパッケージのプライベートリポジトリがあるため、私の方法では機能しません。ローカルでコンパイルされたパッケージを使用しても、ベンダーパッケージとして表示されます。もちろん、ベンダーパッケージにはバージョンの一部としてベンダー名があり、私のパッケージには私の名前が付いているため、違いを簡単に見つけることができます。
2015

1
@bytefireはapt-cache show ...機能します。入力ミスをしたようです。今修正中です。
Faheem Mitha、2015

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がインストールされるかわかりません。私はそれを試していません。個人的には、さまざまなオプションを使用して再コンパイルするときに、バージョンをパッケージマネージャーから削除して、競合を排除しています
exussum

同じ名前は単にで上書きされると思います/boot。私のポイントは、unameいくつかのオプションを変更しながら再コンパイルしただけでは、なぜ出力が変更されると期待するのか分からないということです。その場合、ローカルで再コンパイルしたにもかかわらず、同じ情報が返されることapt-cacheを期待してuname -rいます。
terdon

@terdonバージョン文字列はカーネル構成でカスタマイズできます。これは、ディストリビューションソースを使用している場合に適しています。
goldilocks

@goldilocksはい、私はあなたの答えでそれを見ました、そしてそれは理にかなっています。しかし、私がそうしなかったのが愚かで、いくつかのオプションを変更して私のディストリビューションのストックカーネルを再コンパイルした場合、バージョン文字列は同じになりますよね?ビルド数の提案は役立つかもしれませんが、私が知る限り、ここで提案されているものではありません。
terdon

0

最も一般的な真の答えは「いいえ、できません」です。特定の場合に役立つ可能性のあるさまざまな方法があり、これらはすでに提案されていますが、これらはすべて、この状況が実際にどのようになったかを見逃しているようです。実際、カスタムカーネルを使用している場合、そのカーネルは、その存在を非表示にしたり、別のカーネルのように見えたりするなど、何でも実行できます。

あなたが本当にカスタムカーネルを実行していて、これを知らなかったら私は心配になるでしょう。どのカーネルが使用されているかを知る唯一の信頼できる方法は、コンパイルおよびインストールしたカーネルを注意深く追跡することです。

システムが実行しているカーネル、このカーネルのビルド元、またはソースがどこであるかが本当にわからない場合は、既知の良好なイメージからOSを再インストールすることを真剣に検討し、どのカーネルを試して起動するかについて今後さらに注意することを検討しますからまたは使用。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.