¿Cómo puedo saber qué paquete requiere reiniciar mi sistema?

85

He unattended-upgradeconfigurado en mis sistemas Ubuntu. Ocasionalmente, iniciaré sesión de forma remota en uno de ellos y veré un mensaje que me informa que necesito reiniciar el sistema (para completar una actualización). ¿Hay alguna manera de determinar el paquete específico (o conjunto de paquetes) que está activando este aviso?

belacqua
fuente

Respuestas:

80

Version 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 los .debarchivos hay archivos de control para la instalación, incluidos 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,
postinstincluye

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 se /usr/share/update-notifier/notify-reboot-requiredactualiza
/var/run/reboot-required y /var/run/reboot-required.pkgs .

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

Olli
fuente
1
En mi sistema, el archivo /var/run/reboot-requiredse creó un día antes, pero no hay ningún /var/run/reboot-required.pkgsarchivo @ Ubuntu 16.04.5 LTS.
León
25

Se recomienda reiniciar unattended-upgradescuando ve que /var/run/reboot-requiredexiste un . El archivo se crea mediante postinstscripts (posteriores a la instalación) en algunos paquetes, se parece a esto:

[ -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 /var/run/reboot-required.pkgsarchivo.

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

organizar
fuente
2

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

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

Espere a que se complete la descarga, en mi sistema pesaba alrededor de 900 MB, por lo que podría tomar 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 sobre el reinicio requerido a través de otros medios que no sean 'notificar-reiniciar-requerido', y si bien esto muestra qué paquetes instalados actualmente requieren o no requieren un reinicio, no es seguro que lo mismo sea cierto para más adelante versiones del mismo paquete.

Niklas Holm
fuente
3
Puede lograr lo mismo sin ninguna descarga tediosa con solo grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'. Tenga en cuenta sin embargo que sólo informará qué paquetes podrían requerir reinicio en algún momento, no cuál es el paquete hizo solicitar el reinicio este tiempo
Matija Nalis
0

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

luri
fuente
1
Eso no es lo suficientemente bueno en mi opinión. Las actualizaciones del cargador de arranque también solicitan reiniciar, así como init (upstart).
Olli
1
Bueno, también algunos otros paquetes, como DBus: ubuntu.com/usn/USN-799-1 . Por lo tanto, compilar una lista de paquetes que requieren reinicio (DBus no siempre lo requiere) es una tontería para una solución completa.
Olli
1
Tienes razón ... El mío es un conocimiento parcial :(. Gracias por la información. No me había dado cuenta de que otros paquetes también requieren reinicio.
luri