Как я могу узнать, какой пакет требует перезагрузки моей системы?

Я установил unattended-upgrade в своих системах Ubuntu. Изредка я удаленно захожу на один из них и вижу сообщение о том, что мне нужно перезагрузить систему (чтобы завершить обновление). Есть ли способ определить конкретный пакет (или набор пакетов), который вызывает это уведомление?

89
задан 31 March 2014 в 02:05

4 ответа

Краткая версия:

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/updatenotifier/notify-reboot-required.pkgs.

Последний файл содержит список пакетов, запрашивающих перезагрузку.

84
ответ дан 31 March 2014 в 02:05

Не знаю, есть ли другие пакеты, которые требуют перезагрузки, но обновления ядра всегда так делают. Я бы сказал, что почти каждый раз, когда меня "просят" перезагрузить, ядро обновлялось.

0
ответ дан 31 March 2014 в 02:05

Перезагрузка рекомендуется без присмотра, когда он видит, что существует /варинка/пробег/перезагрузка-требование . Файл создан скриптами postinst (после установки) в некоторых пакетах, он выглядит примерно так:

[ -x /usr/share/update-notifier/notify-reboot-required ] && \
/usr/share/update-notifier/notify-reboot-required || true

Если вы хотите посмотреть, какие пакеты вызвали это, вы можете посмотреть на содержимое файла /var/run/reboot-required.pkgs.

Для получения более подробной информации также смотрите this thread.

25
ответ дан 31 March 2014 в 02:05

На основе более ранней версии Олли ответ, я придумал способ найти все установленные в настоящее время пакеты в вашей системе, требующий перезагрузки.

~$ mkdir debs
~$ cd debs
~/debs$ apt-get download $(dpkg -l | tail -n +7 | awk '{print $2}')

Подождите, пока загрузка завершится, в моей системе это было около 900 МБ, поэтому это может занять некоторое время в зависимости от вашего подключения . Тогда:

~/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», и хотя это показывает, какие в настоящее время установленные пакеты требуют или не требуют перезагрузки, нет уверенности, что то же самое будет справедливо для дальнейшего версии того же пакета.

2
ответ дан 31 March 2014 в 02:05

Другие вопросы по тегам:

Похожие вопросы: