DebianにインストールされているLinuxカーネルのバージョンを確認するには?

DebianにインストールされているLinuxカーネルのバージョンを確認するには?

DevOPSスクリプトの場合は、Debianシステムをアップグレードした後、Debianにインストールされている最新のLinuxカーネルバージョンを確認し、実行中のバージョン(uname -r)と比較する必要があります。

この問題を解決する最も簡単な方法は何ですか?

必要に応じてシステムを自動的に再起動するにはどうすればよいですか?

答え1

質問で指摘したように、現在実行中のカーネルは以下を使用して取得できます。

uname -r

出力は次のとおりです。

4.19.0-8-amd64

代わりに、パッケージマネージャから最新のカーネルパッケージバージョンを入手する必要があります。amd64アーキテクチャと標準インストールを想定すると、linux-image-amd64常に最新のカーネルパッケージを指すメタパッケージの依存関係を確認できます。

dpkg-query -f '${Package}: ${Depends}\n' -W linux-image-amd64

出力は次のとおりです。

linux-image-amd64: linux-image-4.19.0-8-amd64

これをシェルスクリプトに入れるには、2つの追加ステップが必要です。まず、次の方法でアーキテクチャを自動的に決定する必要があります。

dpkg --print-architecture

出力は次のとおりです。

amd64

linux-image-次に、カーネルパッケージ名からプレフィックスを削除する必要があります。

echo linux-image-4.19.0-8-amd64 | sed s/^linux-image-//

出力は次のとおりです。

4.19.0-8-amd64

これらすべてをまとめて正しいシェルスクリプト参照を追加すると、次のような結果が得られます。

if [ "$(uname -r)" != "$(dpkg-query -f '${Depends}' -W "linux-image-$(dpkg --print-architecture)" | sed s/^linux-image-//)" ]; then
  reboot
fi

答え2

一般的な方法でこれを行う最良の方法は次のとおりです。このコメントに記載されています

このスクリプトをコピーして貼り付けて実行可能にし、実行すると予想される結果が得られます。

関連情報