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

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

1
задан 31 March 2014 в 03:05

3 ответа

Перезагрузка рекомендуется 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.

Для получения дополнительной информации см. эту тему.

25
ответ дан 25 May 2018 в 22:46

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

~$ 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

Конечно, этот метод не является надежным. Там могут быть пакеты, которые уведомляют о требуемой перезагрузке с помощью других средств, кроме «уведомлять-перезагружать-требуется», и пока это показывает, какие из установленных в настоящий момент пакетов требуют или не требуют перезагрузки, это не означает, что то же самое верно для последующих версии одного и того же пакета.

2
ответ дан 25 May 2018 в 22:46
  • 1
    Вы могли бы проделать то же самое без утомительной загрузки только с помощью grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'. Обратите внимание, однако, что он сообщит только, какие пакеты могли бы потребовать перезагрузки в какой-то момент, а не какой пакет сделал для перезагрузки на этот раз – Matija Nalis 1 September 2017 в 18:40

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

0
ответ дан 25 May 2018 в 22:46
  • 1
    На мой взгляд, это недостаточно. Обновления загрузчика также запрашивают перезагрузку, а также init (upstart). – Olli 1 March 2011 в 12:59
  • 2
    Ну, а также некоторые другие пакеты, такие как DBus: ubuntu.com/usn/USN-799-1 . Поэтому для составления списка пакетов, требующих перезагрузки (DBus не всегда требует этого), глупо для полного решения. – Olli 1 March 2011 в 13:01
  • 3
    Вы правы ... Mine - это частичное знание :( Спасибо за информацию. Я не понял, что другие пакеты требуют перезагрузки. – luri 1 March 2011 в 15:19

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

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