¿Cómo puedo saber qué paquete requiere un reinicio de mi sistema?

83

Tengo unattended-upgrade configurado en mis sistemas Ubuntu. De vez en cuando me conectaré de forma remota a uno de ellos y veré un mensaje informándome que necesito reiniciar el sistema (para completar una actualización). ¿Hay alguna forma de determinar el paquete específico (o conjunto de paquetes) que desencadena este aviso?

    
pregunta belacqua 01.03.2011 - 09:17

4 respuestas

79

Versión corta:

cat /var/run/reboot-required.pkgs

Explicación:

Parece que hay una manera fácil de extraer automáticamente la información solicitada.

Dentro de .deb archivos hay archivos de control para la instalación, incluido postinst (ejecutar después de la instalación).

Por ejemplo, en linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb ,
postinst incluye

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

y

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

El script de shell /usr/share/update-notifier/notify-reboot-required updates
/var/run/reboot-required y /var/run/reboot-required.pkgs .

El último archivo contiene una lista de paquetes que solicitan un reinicio.

    
respondido por el Olli 01.03.2011 - 10:11
25

Reiniciar es recomendado por unattended-upgrades cuando ve que existe /var/run/reboot-required . El archivo es creado por los scripts postinst (post-instalación) en algunos paquetes, se ve así:

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

Si desea ver qué paquetes activaron esto, puede echar un vistazo a los contenidos del archivo /var/run/reboot-required.pkgs .

Para obtener más información, también vea este hilo .

    
respondido por el arrange 01.03.2011 - 10:10
2

De acuerdo con la respuesta anterior de Olli, se me ocurrió un método para encontrar todos los paquetes actualmente instalados en su sistema que requieren un reinicio.

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

Espere a que se complete la descarga, en mi sistema era de alrededor de 900 MB, por lo que podría demorar un tiempo dependiendo de su conexión. Entonces:

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

El resultado puede verse más o menos así:

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

Por supuesto, este método no es infalible. Puede haber paquetes que notifiquen el reinicio requerido a través de otros medios que no sean 'notify-reboot-required', y aunque esto muestre qué paquetes instalados actualmente requieren o no requieren reinicio, no es seguro que lo mismo sea válido para más adelante. versiones del mismo paquete.

    
respondido por el Niklas Holm 10.02.2016 - 11:22
0

Realmente no sé si hay otros paquetes que requieren reiniciarse, pero las actualizaciones del kernel siempre lo hacen. Yo diría que casi cada vez que me "piden" que reinicie, el núcleo se ha actualizado.

    
respondido por el luri 01.03.2011 - 09:42

Lea otras preguntas en las etiquetas