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
一般的な方法でこれを行う最良の方法は次のとおりです。このコメントに記載されています。
このスクリプトをコピーして貼り付けて実行可能にし、実行すると予想される結果が得られます。