needrestartの仕様変更
「Ubuntu 24.04 LTS」で「needrestart」 の動作仕様が変更されました。needrestartとは
「needrestart」とは、パッケージ構成の変更時に、システムの再起動が必要かどうかをチェックするソフトウェアですまた同様に「needrestart」はパッケージ構成の変更時に、システム上で動作しているサービスの内、再起動が必要なサービスを検出し、それらのサービスを再起動する機能も提供しています。
今回の仕様変更は、後者の機能に関する変更です。
例えばパッケージのアップデート時、実行中のサービスが使用しているライブラリーがアップデートされた場合、そのアップデートをサービスに反映するためには、そのサービスの再起動が必要になります。
この時「needrestart」により再起動が必要なサービスが検出され、再起動が必要なサービスの列挙や再起動が実施されます。
つまりNeed Restartです。
サーバー向けイメージにプリインストール
「needrestart」は、サーバー向けイメージにプリインストールされています。また「needrestart」は、パッケージのインストールやアップデート、削除時など、APT実行後にデフォルトで実行されるように設定されています。
これは「unattended-upgrades」も対象であり、「unattended-upgrades」でも「needrestart」が実行されるようになっています。
従来の動作
今まで「needrestart」は、APTがどのように実行されたかで振る舞いが異なっていました。例えば端末やGUIフロントエンドのように対話的にAPTが実行された場合、パッケージの構成変更時に「needrestart」は影響を受けるサービスの一覧を表示します。
ユーザーはその一覧の中から再起動したいサービスを選択後、「needrestart」はユーザーが選択したサービスを再起動します。
一方でシェルスクリプトなど非対話的にAPTが実行された場合、パッケージの構成変更時に「needrestart」は影響を受けるサービスの一覧を出力して終了します。
この場合影響を受けるサービスの再起動は行いません。
新しい動作
上記のようにAPTの実行環境により動作が異なっていましたが、対話的な環境でも非対話的な環境でも、影響を受けるサービスが自動的に再起動されるように変更されました。また影響を受けるサービスの内、再起動されなかったサービスの一覧が出力されます。
この「needrestart」は上記で紹介したように、ライブラリーのアップデート時に影響を受けるサービスの再起動にも活用されているのですが、ライブラリーのアップデートはセキュリティーアップデートが主体であり、また「unattended-upgrades」はデフォルトでセキュリティーアップデートのみ適用するように設定されています。
ライブラリーをアップデートしても影響を受けるサービスが再起動されない場合、そのサービスは脆弱なままになります。
サービスを自動的に再起動することで脆弱性への対応が容易になります。
またライブラリーのバージョン違いによるクラッシュ等の問題も回避できるようになります。
再起動から除外するサービスを指定するには
環境によってはある特定のサービスを再起動から除外したいケースや、そもそも再起動がうまく行かないサービスがあるかもしれません。そのような場合、「/etc/needrestart/needrestart.conf」ファイルの「$nrconf{override_rc}」設定に再起動から除外したいサービスファイルを正規表現で指定できます。
もしくは「/etc/needrestart/needrestart.conf.d/」フォルダー内に以下のようなPerlコードを記述したファイルを配置することでも、再起動から除外したいサービスファイルを指定できます。
echo '$nrconf{override_rc}{qr(^mycompany-(dispatch|worker)\.service$)} = 0;' | sudo tee /etc/needrestart/conf.d/mycompany.conf
以前の動作に戻すには
以前の動作に戻すには、「/etc/apt/apt.conf.d/99needrestart」ファイルに記述されている「-m u」オプションを削除してください。また一時的に「needrestart」のUIを表示したい場合、以下の環境変数を指定してください。
NEEDRESTART_UI=NeedRestart::UI::Debconf
例えば以下のようにaptを実行できます。
NEEDRESTART_UI=NeedRestart::UI::Debconf sudo apt upgrade