Bagaimana saya bisa tahu paket apa yang membutuhkan reboot sistem saya?

85

Saya telah unattended-upgrademengatur pada sistem Ubuntu saya. Kadang-kadang saya akan login secara jarak jauh ke salah satu dari mereka dan saya akan melihat pesan yang memberitahu saya bahwa saya perlu me-reboot sistem (untuk menyelesaikan upgrade). Apakah ada cara untuk menentukan paket spesifik (atau set paket) yang memicu pemberitahuan ini?

belacqua
sumber

Jawaban:

80

Versi pendek:

cat /var/run/reboot-required.pkgs

Penjelasan:

Sepertinya ada cara mudah untuk secara otomatis mengekstrak informasi yang diminta.

Di dalam .debfile ada file kontrol untuk instalasi, termasuk postinst(berjalan setelah instalasi).

Misalnya, dalam linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb,
postinsttermasuk

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

dan

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

/usr/share/update-notifier/notify-reboot-requiredPembaruan skrip shell
/var/run/reboot-required dan /var/run/reboot-required.pkgs .

File terakhir berisi daftar paket yang meminta reboot.

Olli
sumber
1
Di sistem saya file /var/run/reboot-requireddibuat sehari sebelumnya tetapi tidak ada /var/run/reboot-required.pkgsfile @ Ubuntu 16.04.5 LTS.
Lion
25

Reboot direkomendasikan oleh unattended-upgradesketika melihat bahwa /var/run/reboot-requiredada. File ini dibuat oleh postinstskrip (pasca instalasi) dalam beberapa paket, terlihat seperti ini:

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

Jika Anda ingin melihat paket mana yang memicu ini, Anda dapat melihat isi /var/run/reboot-required.pkgsfile.

Untuk info lebih lanjut juga lihat utas ini .

mengatur
sumber
2

Berdasarkan jawaban Olli sebelumnya, saya datang dengan metode untuk menemukan semua paket yang saat ini diinstal pada sistem Anda yang memerlukan reboot.

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

Tunggu pengunduhan selesai, pada sistem saya sekitar 900 MB sehingga mungkin perlu waktu tergantung pada koneksi Anda. Kemudian:

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

Outputnya mungkin terlihat seperti ini:

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

Tentu saja, metode ini tidak mudah. Mungkin ada paket yang memberitahukan tentang reboot yang diperlukan melalui cara lain selain 'notify-reboot-required', dan sementara ini menunjukkan paket yang diinstal saat ini memerlukan atau tidak memerlukan reboot, tidak yakin hal yang sama akan berlaku untuk nanti versi dari paket yang sama.

Niklas Holm
sumber
3
Anda dapat melakukan hal yang sama tanpa mengunduh yang membosankan hanya dengan grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'. Namun perlu dicatat bahwa itu hanya akan melaporkan paket mana yang mungkin membutuhkan reboot pada suatu waktu, bukan paket mana yang memang perlu reboot kali ini
Matija Nalis
0

Saya tidak benar-benar tahu apakah ada paket lain yang perlu di-boot ulang, tetapi pembaruan kernel selalu dilakukan. Saya akan mengatakan hampir setiap kali saya "diminta" untuk reboot, kernel telah diperbarui.

luri
sumber
1
Itu menurut saya tidak cukup baik. Pembaruan bootloader juga meminta boot ulang, serta init (pemula).
Olli
1
Ya, juga beberapa paket lain, seperti DBus: ubuntu.com/usn/USN-799-1 . Jadi kompilasi daftar paket yang membutuhkan restart (DBus tidak selalu mengharuskan itu) bodoh untuk solusi lengkap.
Olli
1
Anda benar ... Milik saya adalah pengetahuan parsial :(. Terima kasih atas informasinya. Saya belum menyadari bahwa paket lain juga perlu di-restart.
luri