Як я можу сказати, який пакет вимагає перезавантаження моєї системи?


85

Я unattended-upgradeстворив свої системи Ubuntu. Іноді я віддалено входитиму в один із них, і я побачу повідомлення про те, що мені потрібно перезавантажити систему (щоб завершити оновлення). Чи є спосіб визначити конкретний пакет (або набір пакунків), який викликає це повідомлення?

Відповіді:


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

/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

Спираючись на попередню відповідь Оллі, я придумав спосіб знайти всі встановлені на даний момент пакети у вашій системі, для яких потрібна перезавантаження.

~$ 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", і хоча це показує, які встановлені пакети вимагають перезавантаження або не потребують цього, не впевнено, що це буде справедливо для подальшого версії одного пакета.


3
Ви можете виконати те саме, що не потребує копітного завантаження просто grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'. Однак слід зазначити , що це буде тільки повідомити , які пакети може знадобитися перезавантаження на деякий час, а не якийсь пакет зробили з перезавантаженням на цей раз
Матія Nalis

0

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


1
На мою думку, це недостатньо добре. Оновлення завантажувача також вимагають перезавантаження, а також init (upstart).
Оллі

1
Ну, а також деякі інші пакети, наприклад DBus: ubuntu.com/usn/USN-799-1 . Тому складати список пакетів, які потребують перезавантаження (DBus не завжди цього вимагає), нерозумно для повного рішення.
Оллі

1
Ви маєте рацію ... Моє це часткове знання :(. Дякую за інформацію. Я також не зрозумів, що інші пакети теж потребують перезавантаження.
luri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.