DNF5 の再起動判定はいかに?
Fedora 41 から、DNF5 が標準になります。DNF5 の新機能の一つに、再起動が必要かどうか判定する機能があるので、どんなものか試してみました。以下は、すべて Fedora 41 beta での実行結果です。
update
後に needs-restarting
コマンドを指定すると、再起動が必要かどうか判定できます。
# dnf5 update kernel ... # dnf5 needs-restarting Updating and loading repositories: Repositories loaded. Core libraries or services have been updated since boot-up: * kernel * kernel-core * kernel-modules * kernel-modules-core Reboot is required to fully utilize these updates. More information: https://access.redhat.com/solutions/27943 # echo $? 1 #
出力は上記のような感じで、どのパッケージをインストールが必要になったのかが表示されます。再起動が必要な場合の終了コードは 1
です。kernel
をアップデートした場合は再起動が必要なのは至極当然です。アップデートが必要かどうかの基準は表示された URL に記載ということのようです。
アップデート後の再起動が必要ない場合の出力は以下のようになります。
# dnf5 needs-restarting ... No core libraries or services have been updated since boot-up. Reboot should not be necessary. # echo $? 0 #
メッセージから、コアライブラリやコアサービスについても再起動が必要と判定されそう、と何となく分かります。再起動が不要な場合の終了コードは 0
です。
これまでに配信された中で、アップデートが必要と判定されたものは、以下のパッケージです。
kernel
kernel-core
kernel-modules
kernel-modules-core
systemd
*-firmware
openssl-libs
gobject-introspection
json-glib
先ほどの URL に記載のパッケージには入っていないものもあります。
私的には、「これは再起動が必要なんじゃないの?」と思ったものの、この機能で必要とは判定されなかったのは以下のとおりです。
glib2
この機能は、あくまで参考程度の情報と捉えた方がよいかもしれません。Fedora ならば、一週間に一回くらいは kernel
が降ってくるので、どのみち再起動することになるので少々見逃しがあっても大事にはならないと思いますが、それ以外の RedHat 系のディストリビューションを使用する場合は、この機能だけに頼ったばかりに再起動忘れが発生しないように気をつけたいです。
サービスの再起動判定
--services
オプションを付けると、サービスの再起動要否も判定できます。
# dnf update ca-certificates ... # dnf5 needs-restarting ... No core libraries or services have been updated since boot-up. Reboot should not be necessary. # dnf5 needs-restarting --services ... NetworkManager-wait-online.service auditd.service chronyd.service dovecot.service dracut-shutdown.service firewalld.service monit.service nginx.service opendkim.service opendmarc.service sshd.service polkit.service postfix.service strongswan.service getty@tty1.service systemd-resolved.service kmod-static-nodes.service #
再起動が必要なサービス一覧が表示されました。ca-certificates
の更新で、これらの
サービスを再起動するかどうかは、個々の事情などにより、判断が分かれるのではないでしょうか?
例えば、monit
については、私のサーバでは UNIX ソケットを LISTEN
しているだけで、HTTPS での通信は全くしていないので、再起動は不要と判断します。
NetworkManager-wait-online.service
については、全くの誤判定と言ってよいでしょう。
これは OS 起動時に、ネットワークの設定が済んでから通信可能になるまで、他のサービスの起動を待たせるサービスであり、
稼働中の OS で今からこのサービスを再起動したところで何の意味もありません。
coreutils
をアップデートした時の結果です。
# dnf5 coreutils coreutils-common ... # dnf5 needs-restarting No core libraries or services have been updated since boot-up. Reboot should not be necessary. # dnf5 needs-restarting --services ... NetworkManager-wait-online.service auditd.service chronyd.service dovecot.service dracut-shutdown.service firewalld.service monit.service nginx.service opendkim.service opendmarc.service sshd.service polkit.service postfix.service strongswan.service getty@tty1.service systemd-resolved.service kmod-static-nodes.service #
coreutil
は /usr/bin/ls
など基本的なコマンドの集まりなので、
サービスの再起動が必要とまでは思えません。
次は、python3
と python3-libs
をアップデートした後の結果です。
# dnf5 needs-restarting No core libraries or services have been updated since boot-up. Reboot should not be necessary. # dnf5 needs-restarting --services Updating and loading repositories: Repositories loaded. firewalld.service #
firewalld
は Python で書かれているので、再起動は必要です。
私のサーバでは、独自に追加しているサービスで、Trac が動いています。Trac も Python で書かれているので、再起動は必要ですが出てきません。独自のサービスについては、判定の対象とならないか、 あるいは何か書き方があるのかもしれません。
まとめ
DNF5 の再起動要否判定について見てきました。いくつかの例が示すとおり、見逃しや過剰判定があり、 信頼に足るものではありません。 私の個人的な感想としては、この機能を使っても工数の削減にならず、別のリスクを抱え込むことになりそうなので、 あまり使わないかな、と思います。 それよりは、例えば最低限、週一回くらいタイマーで自動再起動させるとか、アップデートがあったら 一律再起動するとかの方が工数と安全性のバランスの面で良いと考えます。