Я установил unattended-upgrade
в своих системах Ubuntu. Изредка я удаленно захожу на один из них и вижу сообщение о том, что мне нужно перезагрузить систему (чтобы завершить обновление). Есть ли способ определить конкретный пакет (или набор пакетов), который вызывает это уведомление?
Перезагрузка рекомендуется 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
.
Для получения дополнительной информации также см. эту тему .
Я действительно не знаю, есть ли другие пакеты, которые требуют перезагрузки, но обновления ядра всегда делают. Я бы сказал, что почти каждый раз, когда меня «просили» перезагрузиться, ядро обновлялось.
Основываясь на предыдущем ответе Олли, я нашел способ найти все установленные на данный момент пакеты в вашей системе, которые требуют перезагрузки.
~$ 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», и хотя это показывает, какие в настоящее время установленные пакеты требуют или не требуют перезагрузки, она не уверена, что то же самое сохранится для последующих версии того же пакета.
grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'
. Обратите внимание однако, что это только сообщит, какие пакеты могли бы требовать перезагрузки в некоторое время, не, который пакет сделал , требуют перезагрузки на этот раз
– Zack Tarr
18.05.2020, 08:35
Краткая версия:
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
.
Последний файл содержит список пакетов, запрашивающих перезагрузку.
/var/run/reboot-required
был создан за день до этого, но нет никакого /var/run/reboot-required.pkgs
файл Ubuntu 16.04.5 LTS.
– Ani Menon
18.05.2020, 08:35