dpkg-reconfigure: स्टड को फिर से खोलने में असमर्थ: कोई फ़ाइल या निर्देशिका नहीं


74

मैं निम्नलिखित पैकेजों को स्थापित करते समय ubuntu vagrant vmubuntu host, दोनों के लिए एक प्रावधान स्क्रिप्ट का निर्माण कर रहा हूं 12.10 64bit:

sudo apt-get -y install php5-xsl graphviz php-pear unison

मुझे चेतावनी मिली:

dpkg-reconfigure: unable to re-open stdin: No file or directory

खोज करने की कोशिश की है, लेकिन परिणाम हर संभव त्रुटि के साथ फेंक रहे हैं संभव हो, ऊपर पता नहीं कैसे चेतावनी को दबाने के लिए कर सकते हैं। इंस्टॉल काम करता है, लेकिन ऊपर चेतावनी योनि में स्टडआउट में त्रुटि लाइनें पैदा कर रही है।

किसी को भी कोई भी कारण क्या हो सकता है या चेतावनी को कैसे दबाया जा सकता है

जवाबों:


90

मुझे अपनी apt-getकॉलिंग स्क्रिप्ट में निम्नलिखित को किसी भी कॉल से पहले डालने के लिए त्रुटि संदेश मिला :

export DEBIAN_FRONTEND=noninteractive

यह debconfएक फ्रंटएंड का उपयोग करता है, जो किसी भी इंटरैक्टिव इनपुट की अपेक्षा नहीं करता है, इसे एक्सेस करने की कोशिश करने से भी रोकता है stdin


3
यह सही जवाब है। अधिकांश कॉन्फ़िगरेशन प्रबंधन अनुप्रयोग (SaltStack, कठपुतली, आदि) गैर-इंटरैक्टिव पैकेज इंस्टॉल के लिए इसका लाभ उठाते हैं।
नोटरी

1
सही उत्तर, मैं दूसरा।
स्टेफगोसेलिन

13
हालांकि यह dpkg-preconfigure के लिए काम नहीं करता है।
21

export DEBIAN_FRONTEND=noninteractiveमेरे लिए dpkg-preconfigureस्टेज पर काम किया
स्नोक्रैश

23

इसका उत्तर इसperl:locale अनुसार निर्धारित करना था :

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

यह समस्या को हल करता है, लेकिन vagrant upप्रावधान में अवांछित समय जोड़ता है ।


2
यह अकेले मेरे काम नहीं आया। मुझे तब तक चेतावनी मिली जब तक कि मैंने @ kenorb की 70debconfटिप्पणी को पूर्व-कॉन्फ़िगर करने के लिए ठीक नहीं कर दिया।
ब्रायन

मेरा प्रश्न है: क्या इन चेतावनियों को नजरअंदाज करना ठीक है? @ कॉम्बॉसी
मार्को

@MarcoPrins हाँ, आप "स्टडिन: इट्स ए ट्टी" या "dpkg-preconfigure: स्टैन को फिर से खोलने में असमर्थ: ऐसी कोई फ़ाइल या निर्देशिका नहीं है" जैसी चेतावनियों को सुरक्षित रूप से अनदेखा कर सकते हैं। चारों ओर से कई पुष्टियों को पाया जा सकता है, जैसे यहाँ ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

यह आदेश चलाएँ:

cat /etc/apt/apt.conf.d/70debconf 

यह देखने के लिए कि क्या यह फ़ाइल आपके पास है। यदि ऐसा है, तो समाधान उस DPkgपंक्ति को टिप्पणी करना है जो स्थापित होने से पहले सभी पैकेजों को पूर्व-कॉन्फ़िगर करने से रोकता debconfहै।

इसलिए इन आदेशों को अपनी प्रावधान फ़ाइल में जोड़ें:

sudo ex +"%s@DPkg@//DPkg" -cwq /etc/apt/apt.conf.d/70debconf
sudo dpkg-reconfigure debconf -f noninteractive -p critical

अन्यथा यदि आप इस फाइल की परवाह नहीं करते हैं, तो बस इसे हटा दें:

sudo rm -v /etc/apt/apt.conf.d/70debconf

यहाँ कुछ अन्य आदेशों पर विचार किया गया है, लेकिन मुझे नहीं लगता कि वे कुछ भी उपयोगी हैं:

sudo dpkg-preconfigure -f noninteractive -p critical
sudo dpkg --configure -a

1
यह आखिरकार मेरे लिए OSX Yosemite Vagrant और Ubuntu 14.04 पर काम कर रहा है।
ब्रायन

आपको अभी भी शेल के वैगरेंट उपयोग को बदलने की आवश्यकता हो सकती है।
टूथलेसरेल

1
इस फाइल के साथ मैसेज करना ही मेरे लिए काम कर रहा था (जाहिर तौर पर "रीडायरेक्ट स्टैडर" सुझावों की अनदेखी करना, जो मुझे लगता है कि बुरी सलाह है)। मैंने --frontend=noninteractiveफ़ाइल में परिभाषित कमांड में विकल्प को अस्थायी रूप से शामिल करने के लिए पहले / बाद जोड़ी के चरणों का उपयोग करने के लिए चुना । sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconfपहले, और sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfबाद में।
११:०४ पर

5

बैश पुनर्निर्देशन स्टडआउट और स्टेडर के लिए ठीक काम करता है।

त्रुटि स्ट्रीम को पुनर्निर्देशित करने के लिए, निम्नलिखित का उपयोग करें:

sudo apt-get -y install php5-xsl graphviz php-pear unison 2> /dev/null

दोनों stdout को पुनर्निर्देशित करने के लिए (संदेश जो त्रुटियां / चेतावनियाँ नहीं हैं) और stderr दोनों का उपयोग करें:

sudo apt-get -y install php5-xsl graphviz php-pear unison &> /dev/null

यह इसके लिए bash में उपलब्ध एक शॉर्टकट है:

sudo apt-get -y install php5-xsl graphviz php-pear unison > /dev/null 2>&1

या:

sudo apt-get -y install php5-xsl graphviz php-pear unison 1> /dev/null 2>&1

नीचे, हम स्पष्ट रूप से देख सकते हैं कि फ़ाइल डिस्क्रिप्टर 1 stdout, 2 stderr, 3 स्टडिन है।

$ ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdout -> /proc/self/fd/1

इसलिए जो आप कह रहे हैं कि आप करना चाहते हैं, आपको केवल मेरे द्वारा दिए गए पहले आदेश की आवश्यकता है।


1
मैं apt-get से सामान्य स्टडआउट को प्रतिध्वनित करने में सक्षम होना चाहता हूं। लेकिन आप मुझे सही रास्ते पर ले जा सकते हैं ... मैं बिट-बाल्टी में सिर्फ स्टॉडर भेजने की कोशिश करूँगा - चीयर्स संपादित करें: हम दोनों ने एक ही समय में टिप्पणी की
लोल

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