Comment puis-je savoir quel paquet nécessite un redémarrage de mon système?

83

J'ai unattended-upgrade configuré sur mes systèmes Ubuntu. À l'occasion, je me connecte à distance à l'un d'entre eux et je vois un message m'informant que je dois redémarrer le système (afin de terminer une mise à niveau). Existe-t-il un moyen de déterminer le package spécifique (ou l'ensemble de packages) qui déclenche cette notification?

    
posée belacqua 01.03.2011 - 09:17
la source

4 réponses

79

Version courte:

cat /var/run/reboot-required.pkgs

Explication:

Il semble qu’il existe un moyen simple d’extraire automatiquement les informations demandées.

À l'intérieur des fichiers .deb , il existe des fichiers de contrôle pour l'installation, y compris postinst (exécuté après l'installation).

Par exemple, dans linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb ,
postinst includes

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

et

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

Le script shell /usr/share/update-notifier/notify-reboot-required updates
/var/run/reboot-required et /var/run/reboot-required.pkgs .

Ce dernier fichier contient une liste de paquets demandant un redémarrage.

    
réponse donnée Olli 01.03.2011 - 10:11
la source
25

Le redémarrage est recommandé par unattended-upgrades lorsqu'il constate qu'un /var/run/reboot-required existe. Le fichier est créé par les scripts postinst (post-installation) dans certains paquets, il ressemble à ceci:

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

Si vous voulez voir quels paquets ont déclenché cela, vous pouvez regarder le contenu du fichier /var/run/reboot-required.pkgs .

Pour plus d’informations, voir aussi cette discussion .

    
réponse donnée arrange 01.03.2011 - 10:10
la source
2

Sur la base de la réponse précédente d’Olli, j’ai trouvé une méthode pour trouver tous les paquets actuellement installés sur votre système qui nécessitent un redémarrage.

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

Attendez que le téléchargement soit terminé, sur mon système, il était d'environ 900 Mo, cela pourrait prendre un certain temps en fonction de votre connexion. Alors:

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

La sortie peut ressembler à ceci:

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

Bien sûr, cette méthode n’est pas infaillible. Il pourrait y avoir des paquets qui notifient le redémarrage requis par d'autres moyens que 'notify-reboot-required', et bien que cela montre quels paquets actuellement installés requièrent ou ne nécessitent pas de redémarrage, il n'est pas certain qu'ils le seront plus tard. versions du même package.

    
réponse donnée Niklas Holm 10.02.2016 - 11:22
la source
0

Je ne sais pas vraiment si d’autres paquets nécessitent un redémarrage, mais les mises à jour du noyau le font toujours. Je dirais presque chaque fois qu'on m'a "demandé" de redémarrer, le noyau avait été mis à jour.

    
réponse donnée luri 01.03.2011 - 09:42
la source

Lire d'autres questions sur les étiquettes