Ubuntu 16.04 में “apt-get upgrade -y” को चलाने के दौरान इंटरेक्टिव डायलॉग से कैसे बचें जब पैकर के साथ पैकेजिंग हो?


27

मैं एक Ubuntu 16.04 छवि के आधार पर AWS AMI बनाने के लिए पैकर का उपयोग कर रहा हूँ । शुरुआत में, मैं एक अपग्रेड कर रहा हूं:

sudo apt-get update
sudo apt-get upgrade -y

यहाँ मेरे प्रावधान अनुभाग का प्रासंगिक हिस्सा है:

"provisioners": [
  {
    "type": "shell",
    "inline": [
      "sudo apt-get update",
      "sudo apt-get upgrade -y"
    ]
  }
]

यह, हालांकि, एक इंटरैक्टिव संवाद पॉप अप के रूप में, स्वचालितकरण को तोड़ देता है:

amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic
amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed
amazon-ebs: currently has been locally modified.
amazon-ebs:
amazon-ebs: 1. install the package maintainer's version
amazon-ebs: 2. keep the local version currently installed
amazon-ebs: 3. show the differences between the versions
amazon-ebs: 4. show a side-by-side difference between the versions
amazon-ebs: 5. show a 3-way difference between available versions
amazon-ebs: 6. do a 3-way merge between available versions (experimental)
amazon-ebs: 7. start a new shell to examine the situation

मैंने export DEBIAN_FRONTEND=noninteractiveपहले भी सेट करने की कोशिश की (जैसा कि इस उत्तर में अनुशंसित है )। दुर्भाग्य से, इससे कोई फर्क नहीं पड़ता।

प्रशन:

  • क्या पुनरावृत्त संवाद को पार करने का एक तरीका है (विकल्प 1 का चयन करना ठीक होगा)?
  • क्या उन्नयन से बचने के बजाय बेहतर है और इसके बजाय भरोसा करें कि एएमआई आज तक हैं और महत्वपूर्ण सुरक्षा पैच शामिल हैं?

पृष्ठभूमि: यह मेरे "बिल्डरों" अनुभाग का प्रासंगिक हिस्सा है, जहां मैंने इसे नवीनतम उपलब्ध एएमआई का उपयोग करने के लिए कॉन्फ़िगर किया है:

"builders": [{
  "type": "amazon-ebs",
  "region": "eu-central-1",
    ...
    "source_ami_filter": {
        "filters": {
            "virtualization-type": "hvm",
            "name": "*ubuntu-xenial-16.04-amd64-server-*",
            "root-device-type": "ebs"
        },
        "owners": ["099720109477"],
        "most_recent": true
    },
  ...
}]

नोट : noniteractiveयदि आप apt-get अपडेट -yको -qध्वज और ध्वज दोनों से चलाते हैं तो मोड काम करता है ।

जवाबों:


21

यह क्रम मेरे लिए काम करता है:

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq

तो, DEBIAN_FRONTEND=noninteractiveसही है लेकिन आपको भी -qध्वज की आवश्यकता है ।

स्रोत: https://github.com/moby/moby/issues/4032


2
आप (शायद?) को सरल कर सकते हैं apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq। मुझे नहीं लगता कि apt-get update किसी भी चीज़ के लिए संकेत देता है, इसलिए शायद इसकी आवश्यकता नहीं है DEBIAN_FRONTEND, और इस प्रकार आपके पास वास्तव में नहीं है export DEBIAN_FRONTENDऔर यह आपके बाकी पर्यावरण के माध्यम से मौजूद है। जो भी आपके लिए मायने रखता है।
माइकल मोल

@MichaelMol ठीक काम करता है। मैंने अपना उत्तर अपडेट कर दिया है।
फिलिप क्लेन

एफडब्ल्यूआईडब्लू, इसके लिए उपयुक्त हो सकता है कि सिर्फ पैकेज की बातचीत को छोड़ देना चाहिए और इसे अपग्रेड नहीं करना चाहिए ('पैकेज एक्स की जरूरत मैनुअल अपग्रेड के बारे में लॉग में एक शब्द छोड़कर)। यदि विचार को पैक्ड पैकेज प्राप्त करना है तो यह जाने का तरीका नहीं है।
Tensibai

11

आपकी समस्या यह है कि ग्रब फ़ाइल परिवर्तन ucfडिबॉन्फ़ का पालन नहीं करता है, न कि उपयुक्त सूची की इस घटना के अनुसार आप अकेले नहीं हैं।

वर्कअराउंड के रूप में मुझे यह उत्तर आस्कुनबंटू पर मिला। menu.lstUCF कॉन्फ़िगरेशन सिस्टम से निकालना आपके मामले के लिए पर्याप्त होना चाहिए:

"provisioners": [
  {
    "type": "shell",
    "inline": [
      "sudo ucf --purge /boot/grub/menu.lst"
      "sudo apt-get update",
      "sudo UCF_FORCE_CONFFNEW=YES apt-get upgrade -y"
    ]
  }
]

यह ग्रब प्रश्न से बचना चाहिए। चेतावनी दी जाती है कि ucf का उपयोग करने वाला कोई भी अन्य पैकेज रिटेनर पैकेज संस्करण का उपयोग करेगा, एक आधार एमी से एक निर्माण के लिए यह एक समस्या नहीं होनी चाहिए, लेकिन यह ध्यान देने योग्य है।


वर्तमान में, मेरा समाधान स्थिर है। फिर भी, यह जानना अच्छा है कि एक वैकल्पिक समाधान है।
फिलिप क्लेन

मुझे उबंटू 18.04 पर ग्रब के साथ एक समान मुद्दा मिला है, और मुझे विश्वास है कि इस ucfफ़िक्स को एक पूर्ण समाधान में शामिल किया जाना चाहिए साथ ही साथ जवाब में @ PhilippClaßen
RichVel

2

फिलिप के उत्तर में जोड़ने के लिए, यदि आप उपयोग कर रहे हैं, तो आपको चर को बाद में sudoसेट करना सुनिश्चित करना होगा DEBIAN_FRONTEND, जैसे:

apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq

या आपको sudo -E की आवश्यकता है, लेकिन यह अभी भी 'हैंग' को अक्षम कर रहा है और सिर्फ पैकेज को छोड़ देता है, अपेक्षा के अनुसार अपग्रेड प्राप्त नहीं कर रहा है।
तेनसीबाई

आप यह कैसे सुनिश्चित कर सकते हैं कि आप पैकेज को अपग्रेड करें?
क्राइस्टोस दिमित्रौलास

मेरा उत्तर देखें, कुछ पैकेजों को ऑटो उत्तर संवादों के लिए अलग तरह से व्यवहार किया जाना चाहिए।
तेन्सीबाई

1

मैं -y या -q का उपयोग कर कोई अंतर नहीं देखा। शायद क्योंकि सवाल "पैकर" का उपयोग करने के बारे में है? (मैं नंगे स्क्रिप्ट का उपयोग करता हूं)

वैसे भी, मेरे मामले में, मुझे इसके apt upgradeचारों ओर निम्नलिखित सीड कमांड का उपयोग करने के लिए संवादों से छुटकारा मिल गया :

sed -i "s/#\ conf_force_conffold=YES/conf_force_conffold=YES/g" /etc/ucf.conf
apt-get -y upgrade
sed -i "s/conf_force_conffold=YES/#conf_force_conffold=YES/g" /etc/ucf.conf

मेरा परिवर्तन उन्नयन के समय तक सीमित है।
तकनीकी रूप से, यह ग्रब को अपग्रेड करते समय एक मौजूदा कॉन्फ़िगरेशन को रखने या न रखने के बारे में प्रश्नों को अक्षम करता है, लेकिन केवल अतिरिक्त प्रभावों को रोकने के लिए, अपग्रेड के समय के लिए।

ओएस: उबंटू 16.04 एलटीएस

उम्मीद है की यह मदद करेगा


आपको दो फर्स्ट कमांड को && के साथ लिंक करना चाहिए ताकि पहली बार देखने में विफलता
एप्ट

और ग्रब पर स्वीकार करने से आपके सिस्टम को बेकार होने की संभावना है, आपको इसे ग्रब के लिए बचना चाहिए
तेनसीबाई

@ तेंसिबाई मैंने अपने प्रारंभिक उत्तर को छाँट लिया, लेकिन सटीक रूप से मैं इसका इस्तेमाल नए वीएम डेपुटेशन को स्वचालित करने के लिए कर रहा था। बेशक, ग्रब के साथ खिलवाड़ करना काफी खतरनाक है, और महत्वपूर्ण सर्वरों में हेरफेर करने पर मैं इसके साथ रहने की सलाह नहीं दूंगा, लेकिन दूसरी तरफ ... apt upgradeअकेले ऐसे मामले में बेहद खतरनाक नहीं है ? जब तक मेरे पास एक स्नैपशॉट या मिनट के एक मामले में अपने पर्यावरण के पुनर्निर्माण का अन्य कुशल तरीका नहीं है, मैं कोशिश नहीं करूँगा।
बालमीपौर

1
उपयुक्त-अप उन्नयन खतरनाक नहीं है प्रति से। लेकिन जब आप पुराने विन्यास रखने को लागू करते हैं तो यह हो सकता है। इसके अलावा, जाँच नहीं करने पर आप वांछित स्थिति को ठीक पर सेट कर सकते हैं (आपके कोड में एक विफलता लागू हो जाएगी) जो एक समस्या बन जाती है (यह सूची संभावित रूप से apt-get विफलता पर बंद हो जाएगी, कभी भी लाइन पर टिप्पणी नहीं करेगा ...)
तेंसिबाई

1
यह है स्पष्ट रूप से रचनात्मक। और आप विशेष रूप से सही हैं कि आपके द्वारा छोड़ी गई अधूरी रेखा के जोखिम को इंगित करें (मैं इसका उपयोग करने में संकोच करता हूं, और इसे रोकने के लिए कुछ चेक जोड़ने पर विचार करूंगा)। के लिए मेरी उपयोग के मामले, मुझे यकीन है कि जोखिम नगण्य हैं, लेकिन किसी को आँख बंद करके परिणाम जानने के बिना इस इस्तेमाल कर सकते हैं। (भले ही वे क्या करते हैं, यह समझे बिना यादृच्छिक कमांड नहीं चलाना चाहिए)।
बालमिपुर

0

आप -yअपने apt-get updateआदेश से पैरामीटर को छोड़ रहे हैं । यदि आप इसे शामिल करते हैं, तो प्रॉम्प्ट दूर जाना चाहिए।

मैंने पैकर के साथ एक उबंटू छवि भी बनाई है। यहाँ शेल स्क्रिप्ट है जिसका उपयोग मैं अपडेट करने के लिए करता हूँ:

https://github.com/devopskatas/learningvm/blob/master/script/update.sh

यह उबंटू पैकर बिल्ड की एक बेहतरीन, सुव्यवस्थित लाइब्रेरी से लिया गया है:

https://github.com/boxcutter/ubuntu


2
apt-get update केवल दूरस्थ रिपॉजिटरी से संकुल की सूची को अद्यतन करता है, वहां -y सेट करने का कोई कारण नहीं है ...
Tensibai

@ तेंसिबाई हां, इससे भी कोई फर्क नहीं पड़ता। वही त्रुटि।
फिलिप क्लेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.