मैं कैसे बता सकता हूं कि किस पैकेज में मेरे सिस्टम के रिबूट की आवश्यकता है?


85

मैंने unattended-upgradeअपने उबंटू सिस्टम पर स्थापित किया है। कभी-कभी मैं उनमें से एक को दूरस्थ रूप से लॉग इन करूंगा और मुझे एक संदेश दिखाई देगा जो मुझे सूचित करेगा कि मुझे सिस्टम को रिबूट करने की आवश्यकता है (अपग्रेड पूरा करने के लिए)। क्या विशिष्ट पैकेज (या पैकेज के सेट) को निर्धारित करने का एक तरीका है जो इस नोटिस को ट्रिगर कर रहा है?

जवाबों:


80

लघु संस्करण:

cat /var/run/reboot-required.pkgs

स्पष्टीकरण:

ऐसा लगता है कि मांगी गई जानकारी को स्वचालित रूप से निकालने का एक आसान तरीका है।

.debफ़ाइलों के अंदर इंस्टॉलेशन के लिए कंट्रोल फाइल्स हैं, जिनमें postinst(इंस्टॉलेशन के बाद रन) भी शामिल है।

उदाहरण के लिए, में linux-image-2.6.35-25-generic_2.6.35-25.44_amd64.deb,
postinstशामिल हैं

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

तथा

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

खोल स्क्रिप्ट /usr/share/update-notifier/notify-reboot-requiredअद्यतन
/var/run/reboot-required और /var/run/reboot-required.pkgs

बाद की फ़ाइल में रिबूट का अनुरोध करने वाले पैकेजों की एक सूची होती है।


1
मेरे सिस्टम पर फ़ाइल /var/run/reboot-requiredएक दिन पहले बनाई गई थी लेकिन कोई /var/run/reboot-required.pkgsफ़ाइल @ Ubuntu 16.04.5 LTS नहीं है।
लॉयन

25

रिबूट की सिफारिश unattended-upgradesतब की जाती है जब यह देखता है कि /var/run/reboot-requiredमौजूद है। फ़ाइल postinstकुछ पैकेजों में स्क्रिप्ट के बाद (इंस्टालेशन) द्वारा बनाई गई है, यह कुछ इस तरह दिखता है:

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

यदि आप यह देखना चाहते हैं कि किन पैकेजों ने इसे ट्रिगर किया है, तो आप /var/run/reboot-required.pkgsफ़ाइल की सामग्री पर एक नज़र डाल सकते हैं ।

अधिक जानकारी के लिए यह धागा भी देखें ।


2

ओली के पहले के जवाब के आधार पर, मैं आपके सिस्टम पर वर्तमान में स्थापित सभी पैकेजों को खोजने के लिए एक विधि के साथ आया था जिसमें रिबूट की आवश्यकता होती है।

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

डाउनलोड के पूरा होने की प्रतीक्षा करें, मेरे सिस्टम पर यह लगभग 900 एमबी था इसलिए आपके कनेक्शन के आधार पर इसमें कुछ समय लग सकता है। फिर:

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

आउटपुट कुछ इस तरह दिख सकता है:

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

बेशक, यह विधि मूर्ख नहीं है। ऐसे पैकेज हो सकते हैं जो 'नोटिफ़िकेशन-रिबूट-आवश्यक' के अलावा अन्य माध्यमों से आवश्यक रिबूट के बारे में सूचित करते हैं, और जबकि यह दिखाता है कि वर्तमान में स्थापित पैकेजों को रिबूट की आवश्यकता है या इसकी आवश्यकता नहीं है, यह निश्चित नहीं है कि बाद के लिए सही होगा। एक ही पैकेज के संस्करण।


3
आप बस के साथ किसी भी थकाऊ डाउनलोड के बिना ही acomplish कर सकते हैं grep -l reboot-required /var/lib/dpkg/info/*.postinst | sed -e 's,^.*/\(.*\)\.postinst,\1,'। ध्यान दें कि यह केवल रिपोर्ट करेगा कि किन पैकेजों को कुछ समय में रिबूट की आवश्यकता हो सकती है, न कि किस पैकेज को इस समय
मतिजा नालिस

0

मैं वास्तव में नहीं जानता कि क्या अन्य पैकेज हैं जिन्हें रिबूट करने की आवश्यकता है, लेकिन कर्नेल अपडेट हमेशा करते हैं। मैं लगभग हर बार कहता हूं कि मुझे रिबूट करने के लिए कहा गया है, कर्नेल को अपडेट किया गया था।


1
मेरी राय में यह बहुत अच्छा नहीं है। बूटलोडर अपडेट रिबूटिंग के साथ-साथ init (upstart) का भी अनुरोध करता है।
ओली

1
वैसे, कुछ अन्य पैकेज भी, जैसे DBus: ubuntu.com/usn/USN-799-1 । इसलिए संकुल की सूची जिसे पुनः आरंभ करने की आवश्यकता है (DBus को हमेशा इसकी आवश्यकता नहीं होती है) पूर्ण समाधान के लिए मूर्खतापूर्ण है।
ओली

1
आप सही कह रहे हैं ... मेरा एक आंशिक ज्ञान है :(। जानकारी के लिए धन्यवाद। मुझे एहसास नहीं था कि अन्य पैकेजों को भी पुनः आरंभ करने की आवश्यकता है,
luri
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.