我如何知道哪个软件包需要重新启动系统?


85

我已经unattended-upgrade在我的Ubuntu系统上进行了设置。有时,我将远程登录其中之一,并且会看到一条消息,通知我需要重新启动系统(以完成升级)。有没有办法确定触发此通知的特定软件包(或一组软件包)?

Answers:


80

简洁版本:

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);
}

Shell脚本 /usr/share/update-notifier/notify-reboot-required更新
/var/run/reboot-required /var/run/reboot-required.pkgs

后一个文件包含请求重新启动的软件包的列表。


1
在我的系统上,文件/var/run/reboot-required是在前一天创建的,但是没有/var/run/reboot-required.pkgs文件@ Ubuntu 16.04.5 LTS。
狮子

25

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文件的内容。

有关更多信息,请参见此线程


2

基于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”以外的其他方式通知需要的重新启动,虽然这显示了当前安装的软件包需要或不需要重新启动,但不确定以后是否同样适用相同软件包的版本。


3
您只需使用即可完成相同的任务而无需任何繁琐的下载grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'。但是请注意,这将只报告了哪些软件包可能在一段时间后需要重启,不是该包确实需要重启这个时候
Matija NALIS

0

我真的不知道是否还有其他需要重启的软件包,但是内核更新总是如此。我会说几乎每当我被“要求”重启时,内核都已更新。


1
我认为这还不够好。引导加载程序更新还会请求重新引导以及init(启动)。
Olli

1
好吧,还有其他一些软件包,例如DBus:ubuntu.com/usn/USN-799-1。因此,编译需要重新启动的软件包列表(DBus并不总是要求这样做)对于完整的解决方案来说是愚蠢的。
Olli

1
。你是对的......我的是一个局部的知识:(感谢您的信息,我没有意识到其他的包需要重新启动了。
luri
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.