回答:
短縮版:
cat /var/run/reboot-required.pkgs
説明:
要求された情報を自動的に抽出する簡単な方法があるようです。
内部.deb
のファイルを含め、インストール用の制御ファイルがあるpostinst
(インストール後に実行します)。
たとえばlinux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb
、に
postinst
は
my $notifier = "/usr/share/update-notifier/notify-reboot-required";
my $warn_reboot = 'Yes'; # Warn that we are installing a version of
# the kernel we are running
そして
# Warn of a reboot
if (-x $notifier) {
system($notifier);
}
シェルスクリプトが
/usr/share/update-notifier/notify-reboot-required
更新され
/var/run/reboot-required
、 /var/run/reboot-required.pkgs
。
後者のファイルには、再起動を要求するパッケージのリストが含まれています。
が存在するunattended-upgrades
ことが確認された場合は、再起動をお勧めし/var/run/reboot-required
ます。このファイルはpostinst
、いくつかのパッケージの(インストール後)スクリプトによって作成され、次のようになります。
[ -x /usr/share/update-notifier/notify-reboot-required ] && \
/usr/share/update-notifier/notify-reboot-required || true
どのパッケージがこれをトリガーしたかを見たい場合は、/var/run/reboot-required.pkgs
ファイルの内容を見ることができます。
詳細については、このスレッドも参照してください。
Olliの以前の回答に基づいて、システムに現在インストールされている、再起動が必要なすべてのパッケージを見つける方法を思いつきました。
~$ mkdir debs
~$ cd debs
~/debs$ apt-get download $(dpkg -l | tail -n +7 | awk '{print $2}')
ダウンロードが完了するまで待ちます。私のシステムでは約900 MBでしたので、接続によっては時間がかかる場合があります。次に:
~/debs$ for x in $(ls); do y=$(dpkg-deb -I "$x" postinst 2>/dev/null | grep 'reboot-required'); if [ -n "$y" ]; then echo "$x" | grep -Poe '^.*?(?=_)'; fi; done
出力は次のようになります。
dbus
gconf2
initscripts
libc6
libpam0g
libpam-systemd
libssl1.0.0
linux-image-3.19.0-47-generic
linux-image-3.19.0-49-generic
network-manager
upstart
もちろん、この方法は万全ではありません。「notify-reboot-required」以外の手段で必要なリブートについて通知するパッケージが存在する場合があり、これは現在インストールされているパッケージのうちリブートが必要かどうかを示しますが、同じことが今後も当てはまるかどうかはわかりません同じパッケージのバージョン。
grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'
。それが唯一のパッケージがどのレポートすることに注意してくださいかもしれないいくつかの時点で再起動する必要はなく、どのパッケージがなかった、再起動を必要とし、この時間を
再起動が必要な他のパッケージがあるかどうかはわかりませんが、カーネルの更新は常に必要です。私は、リブートするように「求められた」ほぼ毎回、カーネルが更新されていたと思います。
/var/run/reboot-required
は前日に作成されましたが、/var/run/reboot-required.pkgs
Ubuntu 16.04.5 LTS にはファイルがありません。