Como posso saber qual pacote requer uma reinicialização do meu sistema?

85

Eu unattended-upgradeconfigurei nos meus sistemas Ubuntu. Ocasionalmente, efetuarei login remotamente em um deles e vejo uma mensagem informando que preciso reiniciar o sistema (para concluir uma atualização). Existe uma maneira de determinar o pacote específico (ou conjunto de pacotes) que está acionando este aviso?

belacqua
fonte

Respostas:

80

Versão curta:

cat /var/run/reboot-required.pkgs

Explicação:

Parece que existe uma maneira fácil de extrair automaticamente as informações solicitadas.

.debArquivos internos existem arquivos de controle para instalação, incluindo postinst(executar após a instalação).

Por exemplo, em linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb,
postinstinclui

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

e

# Warn of a reboot
if (-x $notifier) {
 system($notifier);
}

O script do shell é /usr/share/update-notifier/notify-reboot-requiredatualizado
/var/run/reboot-required e /var/run/reboot-required.pkgs .

O último arquivo contém uma lista de pacotes solicitando uma reinicialização.

Olli
fonte
11
No meu sistema, o arquivo /var/run/reboot-requiredfoi criado um dia antes, mas não há /var/run/reboot-required.pkgsarquivo @ Ubuntu 16.04.5 LTS.
Lion
25

A reinicialização é recomendada unattended-upgradesquando você vê que /var/run/reboot-requiredexiste. O arquivo é criado por postinstscripts (pós-instalação) em alguns pacotes, é algo como isto:

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

Se você deseja ver quais pacotes acionaram isso, pode dar uma olhada no conteúdo do /var/run/reboot-required.pkgsarquivo.

Para mais informações, consulte também este tópico .

organizar
fonte
2

Com base na resposta anterior de Olli, criei um método para encontrar todos os pacotes atualmente instalados no seu sistema que requerem uma reinicialização.

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

Aguarde a conclusão do download, no meu sistema ele tinha cerca de 900 MB, portanto, pode demorar um pouco dependendo da sua conexão. Então:

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

A saída pode ser algo como isto:

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

Obviamente, esse método não é infalível. Pode haver pacotes que notificam sobre a reinicialização necessária por outros meios além de 'notify-reboot-required' e, embora isso mostre quais pacotes atualmente instalados exigem ou não exigem uma reinicialização, não é certo que o mesmo seja válido posteriormente. versões do mesmo pacote.

Niklas Holm
fonte
3
Você pode realizar o mesmo sem qualquer download tedioso com apenas grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'. Note, porém, que ela só vai informar quais pacotes pode ser necessário reiniciar em algum momento, não qual pacote fez requerem a reinicialização desta vez
Matija Nalis
0

Realmente não sei se existem outros pacotes que exigem reinicialização, mas as atualizações do kernel sempre o fazem. Eu diria que quase toda vez que me pediam para reiniciar, o kernel havia sido atualizado.

luri
fonte
11
Isso não é bom o suficiente na minha opinião. As atualizações do carregador de inicialização também solicitam reinicialização, bem como init (upstart).
Olli
11
Bem, também alguns outros pacotes, como o DBus: ubuntu.com/usn/USN-799-1 . Portanto, compilar a lista de pacotes que requerem reinicialização (o DBus nem sempre exige isso) é uma tolice para a solução completa.
Olli
11
.. Você está certo ... O meu é um conhecimento parcial :( Obrigado pela informação que eu não tinha percebido que outros pacotes de exigir a reinicialização, também.
Luri