मैं कमांड लाइन से सिर्फ सुरक्षा अपडेट कैसे स्थापित कर सकता हूं?


333

sudo apt-get upgradeकेवल सुरक्षा अद्यतन ही नहीं, बल्कि सभी अद्यतन स्थापित करता है। मुझे पता है कि मैं केवल महत्वपूर्ण सुरक्षा अपडेट का चयन करने के लिए अपडेट मैनेजर का उपयोग कर सकता हूं, लेकिन क्या कमांड लाइन से ऐसा करने का कोई तरीका है?


2
मुझे ऐसा नहीं लगता। डिस्ट-अपग्रेड पूरे सिस्टम को एक नई रिलीज में ले जाता है। मैं दिन-प्रतिदिन के अपडेट के बारे में बात कर रहा हूं, जैसे आप अपडेट मैनेजर में देखते हैं।
माइकल क्रैंशव

1
ओह, मैं देख रहा हूँ कि तुम अब क्या कह रहे हो। हे, मैं बार-बार अपडेट प्राप्त करता हूं, मैं इसे बिना सोचे टाइप करता हूं। सर उठाने के लिए धन्यवाद!
माइकल क्रेंशव जूल

7
आप "एप्ट-गेट डिस्ट-अपग्रेड" चाहते हैं, "एप्ट-गेट अपग्रेड" नहीं। "डिस्ट-अपग्रेड" नई रिलीज़ के लिए नहीं है (यह "डू-रिलीज़-अपग्रेड" एक अलग कमांड है)। "डिस्ट-अपग्रेड" का उपयोग करने का मतलब है कि यह नए पैकेजों की निर्भरता को बदल देगा। यह महत्वपूर्ण हो सकता है।
कीस कुक

3
dist-upgrade अद्यतन प्रबंधक जीयूआई द्वारा निष्पादित सामान्य ऑपरेशन है। कर्नेल जैसे पैकेजों के लिए जहां एक linux-image-genericपैकेज है, वर्तमान छवि के आधार पर, उदाहरण के लिए linux-image-3.x.y-zz-generic(प्रत्येक संस्करण जिसका एक अलग पैकेज नाम है), डिस्ट-अपग्रेड (जो निर्भरता को पूरा करने के लिए नए पैकेज स्थापित करने की अनुमति देता है) इस अपग्रेड का प्रदर्शन करेगा , जबकि उन्नयन कर्नेल पैकेज को आयोजित-बैक के रूप में दिखाएगा।
क्रोनिटिस

3
हैरानी की बात है कि इसके लिए कोई अच्छा apt-getजवाब नहीं है, यह देखते हुए कि प्रत्येक सर्वर पर इसे कितनी प्रमुखता से सूचीबद्ध किया गया है
कार्तिक टी

जवाबों:


308

पैकेज अनअटेंडेड-अपग्रेड स्वचालित रूप से सुरक्षा अद्यतन स्थापित करने के लिए कार्यक्षमता प्रदान करता है।

आप इसका उपयोग कर सकते हैं, लेकिन स्वचालित भाग को कॉन्फ़िगर करने के बजाय आप इसे मैन्युअल रूप से कॉल कर सकते हैं:

sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d

यदि आप इसके बजाय इसे चुपचाप चलाना चाहते हैं:

sudo unattended-upgrade

नोट: जब आप अप्राप्य-अपग्रेड कहते हैं, तो आप अंत में "s" छोड़ देते हैं।

यह मानता है कि पैकेज डिफ़ॉल्ट रूप से स्थापित है, जो कि संभवतः है। यदि नहीं, तो बस करें:

sudo apt-get install unattended-upgrades

यह भी देखें /usr/share/doc/unattended-upgrades/README.md


unattended-upgradeआप के स्वचालित निष्पादन को अक्षम करने के लिए संभवतः संशोधित करने की आवश्यकता है /etc/cron.daily/apt, लेकिन यह सुनिश्चित करने के लिए "सही" नहीं है
Jaime Hablutzel

साइड नोट: Ubuntu 12.04.5 LTS सर्वर के लिए, unattended-upgradesडिफ़ॉल्ट रूप से इंस्टॉल नहीं किया गया है।
Raptor

13
चूंकि आप कमांड लाइन से ऐसा कर रहे हैं, इसलिए -vसूचना संदेशों के लिए या -dडीबग संदेशों के लिए उपयोग करें । अन्यथा उपयोगिता बहुत चुप हो जाएगी, जिस स्थिति में आपको लॉग में जांच करने की आवश्यकता होगी /var/log/unattended-upgrades। आप --dry-runअनुकरण करने के लिए भी उपयोग कर सकते हैं लेकिन वास्तव में कुछ भी अपग्रेड नहीं कर सकते हैं । अधिक जानकारी और अन्य विकल्पों के --helpलिए, मदद संदेश प्राप्त करने के लिए उपयोग करें ।
ADTC

मैंने unattended-upgradesआज के बारे में कुछ बातें सीखीं । धन्यवाद!
द0

"निगरानी के लिए कि यह कैसे जाता है", यह सिर्फ गैर-संवादात्मक संदेश डीबग करना सही है?
कुंभ राशि

116

अपडेट प्रबंधित करने के तरीके पर कुछ सुझाव

यह डेबियन और उबंटू दोनों पर लागू होता है, लेकिन उबंटू के लिए अधिक विशिष्ट निर्देश हैं।

  • केवल सुरक्षा अपडेट दिखाएं:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    या

    sudo unattended-upgrade --dry-run -d
    

    या

    /usr/lib/update-notifier/apt-check -p
    
  • सभी अपग्रेड करने योग्य पैकेज दिखाएं

    apt-get -s dist-upgrade | grep "^Inst"
    
  • केवल सुरक्षा अद्यतन स्थापित करें

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

टिप्पणियाँ:

  • कभी-कभी उबंटू सुरक्षा अपडेट दिखाता है जैसे कि वे $ रिलीज-अपडेट रिपॉजिटरी से आ रहे हैं। ऐसा है, इसलिए मुझे बताया गया है, क्योंकि उबंटू डेवलपर्स $ रिलीज-अपडेट रिपॉजिटरी के साथ-साथ उनकी उपलब्धता में तेजी लाने के लिए सुरक्षा अपडेट को धक्का देते हैं।

    यदि ऐसा है, तो आप केवल सुरक्षा अद्यतन दिखाने के लिए निम्न कार्य कर सकते हैं:

    sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    तथा

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • जाँच करें कि पैकेज उन्नयन के बाद किन सेवाओं को फिर से शुरू करने की आवश्यकता है। पहले से अपग्रेड करने और अपने पुनरारंभ / रिबूट को शेड्यूल करने के लिए आप कौन से पैकेजों का पता लगा रहे हैं। यहाँ समस्या यह है कि जब तक आप किसी सेवा को पुनः आरंभ नहीं करते हैं तब तक यह लाइब्रेरी के एक पुराने संस्करण (सबसे सामान्य कारण) का उपयोग कर सकता है जो आपके द्वारा नया पैकेज स्थापित करने से पहले मेमोरी में लोड किया गया है जो सुरक्षा भेद्यता या जो भी ठीक करता है।

    checkrestart -v
    

    हालाँकि, ध्यान रखें कि checkrestartउन प्रक्रियाओं को सूचीबद्ध कर सकते हैं जिन्हें आवश्यक रूप से फिर से शुरू नहीं किया जाना चाहिए। उदाहरण के लिए, PostgreSQL सेवा अपने मेमोरी रेफरेंस में पहले से हटाए गए xlog फ़ाइल में रख सकती है, जो कि सेवा को पुनः आरंभ करने का एक वैध कारण नहीं है।

    इसलिए, एक और, अधिक विश्वसनीय, मानक बर्तनों का उपयोग करके इसे जांचने का तरीका निम्नलिखित थोड़ा बैश स्क्रिप्ट है जिसे मैंने बेशर्मी से https://locallost.net/?p=233 से चुरा लिया है

    यह जाँचता है कि क्या सिस्टम पर चल रही प्रक्रियाएँ अभी भी हटाए गए पुस्तकालयों को सक्रिय मेमोरी में रखने वालों की प्रतियों के उपयोग से नष्ट कर रही हैं।

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    

1
मैं केवल अब इस पोस्ट को नोटिस करता हूं। यह बेहद सटीक है। बहुत बहुत धन्यवाद (+1)
Danduk82

'चेकरेस्टार्ट' कहाँ से आता है? मैं इसे उबंटू ट्रस्टी में नहीं ढूंढ सकता। मुझे "ज़रूरतमंद" मिला जो ऐसा लगता है कि यह आपके निर्देशों में फिट होगा?
बेन एक्सओ

यह डेबियन-उपहार पैकेज में पाया जा सकता है: packages.debian.org/wheezy/debian-goodies । जरूरतमंद भी है। आप रनिंग के द्वारा दोनों को Xenial पर पा सकते हैं: $ apt-cache search checkrestart
ILIV

मुझे "E:" लॉक फ़ाइल / var / lib / dpkg / lock - ओपन (13: अनुमति अस्वीकृत) "भी sudo के साथ नहीं खोल सका। क्या यह अपडेट या आपके द्वारा प्रदान किए गए आदेशों में से कुछ के लिए विशिष्ट है?
नाथन हॉर्बी

सबसे अधिक संभावना है कि यह dpkg की एक गलत / असामान्य समाप्ति के बारे में है जिसने लॉक की गई फ़ाइल को छोड़ दिया है। आम तौर पर तब तक नहीं होता है, जैसे कि एक पैकेज की स्थापना सफलतापूर्वक पूर्ण नहीं होती है (पूर्ण डिस्क, आदि) आप शायद अन्य apt-get और dpkg कमांड नहीं चला सकते हैं, क्या आप कर सकते हैं?
ILIV

46

/etc/apt/preferencesनिम्नलिखित के साथ बदलें :

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

अब एक साधारण apt-get upgradeकेवल सभी सुरक्षा अपडेट को अपग्रेड करेगा।

क्यों और कैसे) यह काम करता है: प्राथमिकताएं फ़ाइल उबंटू वितरण से प्राथमिकता 50 तक सभी पैकेजों को पिन करेगी, जो उन्हें पहले से स्थापित पैकेजों की तुलना में कम वांछनीय बना देगा। सुरक्षा रिपॉजिटरी से निकलने वाली फ़ाइलों को डिफ़ॉल्ट (500) प्राथमिकता दी जाती है, इसलिए उन्हें स्थापना के लिए माना जाता है। इसका मतलब यह है कि केवल संकुल जो वर्तमान में स्थापित की तुलना में अधिक वांछनीय माना जाता है सुरक्षा अद्यतन हैं। Apt_preferences मैनपेज में पिनिंग के बारे में अधिक जानकारी ।

आप अस्थायी रूप से उस --target-releaseविकल्प के साथ अपडेट के लिए एक निश्चित वितरण को बढ़ावा दे सकते हैं जो काम करता है apt-getऔर aptitude(कम से कम) जो आपको कुछ रिलीज़ को पिन करने की अनुमति देगा ताकि वे अपग्रेड के लिए योग्य हों।

यदि आप इसे केवल स्क्रिप्ट के लिए उपयोग करना चाहते हैं और इसे सिस्टम के लिए डिफ़ॉल्ट नहीं बनाते हैं, तो आप नियमों को किसी अन्य स्थान पर रख सकते हैं और इसके बजाय इसका उपयोग कर सकते हैं:

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

यह गैर-डिफ़ॉल्ट स्थान से प्राथमिकता फ़ाइल के लिए उपयुक्त रूप देगा।

उदाहरण के रूप में दी गई प्राथमिकताएं फ़ाइल तीसरे पक्ष के रिपॉजिटरी पर लागू नहीं होती हैं, यदि आप उन्हें पिन करना चाहते हैं तो आप apt-cache policyआसानी से पिन करने के लिए आवश्यक कुंजी निर्धारित करने के लिए उपयोग कर सकते हैं ।


गहन उत्तर के लिए समय निकालने के लिए धन्यवाद। मुझे लगता है कि मैं समझता हूं कि यह कैसे काम करता है। लेकिन जब मैं / etc / apt / प्राथमिकताएं फ़ाइल बनाता हूं और apt-get उन्नयन चलाता हूं, तो यह सभी संकुल को अपग्रेड करना चाहता है, न कि केवल सुरक्षा अपडेट। पहले और बाद में सूची उन्नयन बिल्कुल वैसा ही है, को छोड़कर / etc / उपयुक्त / वरीयताओं, जो मैं dpkg के साथ स्रोत से बनाया गया है और स्थापित "हाथ से" यह Leafpad उन्नत करने के लिए नहीं चाहता है के साथ। यह मेरे लिए बहुत अजीब है, लेकिन आप के लिए कुछ मतलब हो सकता है।
माइकल क्रेंशव जूल

1
आप देख सकते हैं कि apt-cache पॉलिसी कमांड के साथ क्या हो रहा है। उन पैकेजों में से एक चुनें जिन्हें सुरक्षा फ़िक्सेस नहीं मिल रहा है और चलाएं apt-cache policy packagename। यह विभिन्न संस्करणों के लिए प्राथमिकताओं को सूचीबद्ध करेगा। आपको विभिन्न लाइनों और विभिन्न प्राथमिकताओं को देखना चाहिए। यदि प्राथमिकता 50 के साथ कोई रेखाएं नहीं हैं, तो पिनिंग किसी कारण से प्रश्न में संकुल को प्रभावित नहीं कर रहा है।
रस्सु

1
मैंने अतीत में इस उत्तर का पालन किया था। आज मुझे पता चला कि इस उत्तर के कारण, 68 सुरक्षा अद्यतन पैकेज मेरे सर्वर पर स्थापित नहीं किए गए थे और संभावित स्थापित उम्मीदवारों के रूप में नहीं दिखाए गए थे। यह एक अच्छा जवाब नहीं है!
शेड

12

निम्नलिखित की पुष्टि Ubuntu 14.04 LTS में की गई है।

unattended-upgradeपैकेज का उपयोग करें ।

फ़ाइल को देखो /etc/apt/apt.conf.d/50unattended-upgrades। शीर्ष पर एक खंड होना चाहिए जो है:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

ध्यान दें कि यह कैसे कॉन्फ़िगर किया गया है केवल डिफ़ॉल्ट रूप से सुरक्षा संकुल के लिए अनअटेंडेड अपग्रेड की अनुमति देता है।

फ़ाइल को इसके /etc/apt/apt.conf.d/10periodicसमान संशोधित करें :

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

यह स्वचालित अनअटेंडेड सुरक्षा अपग्रेड, प्रति दिन एक बार चलेगा।

अब, मैन्युअल रूप से चलाने के लिए sudo unattended-upgrade:।

कुछ भी किए बिना, ड्राई-रन के रूप में परीक्षण करने के लिए sudo unattended-upgrade --dry-run:।

स्रोत: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html


क्या इसे मासिक अनुसूची बनाने का कोई तरीका है?
mike.b93

1
@ mike.b93, मेरा मानना ​​है कि सेटिंग APT::Periodic::Unattended-Upgrade "30";यह करेगी - हर 30 दिन।
vcardillo

5

हालांकि इसकी बहुत बदसूरत है, आप सुरक्षा भंडार के अलावा सभी रिपॉजिटरी को निष्क्रिय कर सकते हैं और फिर कर सकते हैं:

sudo apt-get update && sudo apt-get upgrade

मैंने इसका परीक्षण नहीं किया है, लेकिन सिद्धांत रूप में यह केवल सुरक्षा रेपो में अपडेट ढूंढेगा और उन्हें लागू करेगा ...


हाँ, यह एक संभावना है। मैं इस पर गौर करूंगा। मैं BASH में अच्छा नहीं हूं, लेकिन मैं इसे करने के लिए एक स्क्रिप्ट बनाने की कोशिश कर सकता हूं।
माइकल क्रेंशव

ठीक है, मैंने सभी को निष्क्रिय कर दिया है, लेकिन उबंटू सुरक्षा भंडार और एक भागा sudo apt-get update && sudo apt-get upgrade(किसी भी उन्नयन से पहले रद्द कर दिया गया था)। फिर मैंने अपने सभी रिपॉजिट को फिर से सक्षम किया, चलाया sudo apt-get updateeऔर अपडेट मैनेजर खोला। सुरक्षा अद्यतन के रूप में चिह्नित पैकेज वास्तव में क्या apt-get upgradeपाया गया, लेकिन वे मेरे लिए बहुत करीब - करीब नहीं थे। मैं अभी भी चाहता हूं कि मुझे पता था कि अपडेट मैनेजर यह कैसे करता है और कमांड-लाइन से कैसे करें, लेकिन यह करेगा। धन्यवाद!
माइकल क्रैंशव

3
  • apt-get update: सिर्फ रिपॉजिटरी में प्रविष्टियां पढ़ें - मौजूदा सूची में रिकॉर्डिंग। नया क्या है, इसकी जांच करने की जरूरत है।
  • apt-get upgrade: कर्नेल मॉड्यूल के बिना स्थापित संकुल के लिए सभी अद्यतन। कोई रिलीज़ अद्यतन नहीं।
  • apt-get dist-upgrade: स्थापित पैकेज के लिए सभी अद्यतन कर्नेल मॉड्यूल के साथ भी। कोई रिलीज़ अद्यतन नहीं।
  • apt-getपैरामीटर के साथ -s: केवल परीक्षण, कोई परिवर्तन नहीं किया।

0

डेबियन पर मैं केवल सुरक्षा अपडेट करने के लिए इस आदेश का उपयोग करता हूं:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )

0

मुझे उपयुक्त-विकल्प या योग्यता में कोई विकल्प नहीं मिल रहा है, हालांकि किसी के पास सुपरयूज़र पर एक ही सवाल था। केवल प्रतिक्रिया है:

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. 
Did you replace 'karmic' with the code name of your Ubuntu?

कोई जवाब नहीं है कि क्या हालांकि काम किया है।


2
ऐसा प्रतीत होता है कि उस विकी पृष्ठ में वर्णित विधि एप्टीट्यूड के --target-release तर्क को <release> -security पर सेट करने पर निर्भर करती है। उस प्रश्न के ओपी की तरह, वह विधि सभी उन्नयन स्थापित करती है, न कि केवल सुरक्षा उन्नयन। Apt-get और योग्यता आदमी पृष्ठों को पढ़ने, मुझे नहीं लगता --target रिलीज तर्क भी सिर्फ सुरक्षा उन्नयन करने के लिए सीमित करने के लिए, हालांकि मुझे यकीन है कि क्या यह नहीं कर रहा हूँ करना है है है के लिए।
माइकल क्रैंशव

0

यहाँ एक स्क्रिप्ट है जो इसे कुछ अलग तरीकों से प्राप्त करती है:

#!/usr/bin/env bash
set -e

# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y  -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.