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

82

Eu tenho unattended-upgrade configurado nos meus sistemas Ubuntu. De vez em quando, faço login remotamente em um deles e vejo uma mensagem informando que preciso reinicializar 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?

    
por belacqua 01.03.2011 / 09:17

4 respostas

79

Versão resumida:

cat /var/run/reboot-required.pkgs

Explicação:

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

Dentro dos arquivos .deb , existem arquivos de controle para instalação, incluindo postinst (executado após a instalação).

Por exemplo, em linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb , o% postinst inclui

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 de shell /usr/share/update-notifier/notify-reboot-required atualizações em /var/run/reboot-required e /var/run/reboot-required.pkgs .

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

    
por Olli 01.03.2011 / 10:11
25

A reinicialização é recomendada pelo unattended-upgrades quando ele perceber que existe /var/run/reboot-required . O arquivo é criado pelos scripts postinst (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ê quiser ver quais pacotes acionaram isso, dê uma olhada no conteúdo do arquivo /var/run/reboot-required.pkgs .

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

    
por arrange 01.03.2011 / 10:10
2

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

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

Aguarde até que o download seja concluído. 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

Naturalmente, esse método não é infalível. Pode haver pacotes que notifiquem sobre a reinicialização necessária por outros meios além de 'notify-reboot-required' e, embora isso mostre quais pacotes atualmente instalados requerem ou não uma reinicialização, não é certo que o mesmo seja verdadeiro para mais tarde versões do mesmo pacote.

    
por Niklas Holm 10.02.2016 / 11:22
0

Eu realmente não sei se existem outros pacotes que requerem reinicialização, mas as atualizações do kernel sempre exigem. Eu diria que quase toda vez que eu fui "solicitado" a reiniciar, o kernel tinha sido atualizado.

    
por luri 01.03.2011 / 09:42