dpkg-reconfigure: ไม่สามารถเปิด stdin ใหม่ได้: ไม่มีไฟล์หรือไดเรกทอรี


74

ฉันกำลังสร้างสคริปต์การจัดเตรียมสำหรับ a ubuntu vagrant vmบน a ubuntu 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

ได้ลองค้นหาแล้ว แต่ผลลัพธ์จะทำให้เกิดข้อผิดพลาดอื่น ๆ โดยมีความเป็นไปได้ที่จะไม่สามารถค้นหาคำเตือนด้านบนได้ การติดตั้งใช้งานได้ แต่คำเตือนด้านบนเป็นสาเหตุของเส้นข้อผิดพลาดในคนจรจัดขึ้น stdout

ทุกคนมีความคิดว่าอะไรเป็นสาเหตุหรือวิธีระงับคำเตือน

คำตอบ:


90

ฉันได้รับข้อความแสดงข้อผิดพลาดให้หายไปโดยใส่สิ่งต่อไปนี้ในสคริปต์การจัดสรรของฉันก่อนที่จะมีการapt-getโทรใด ๆ:

export DEBIAN_FRONTEND=noninteractive

สิ่งนี้ทำให้debconfใช้ส่วนหน้าซึ่งคาดว่าจะไม่มีอินพุตแบบโต้ตอบเลยทำให้ไม่สามารถเข้าถึงstdinได้


3
นี่คือคำตอบที่ถูกต้อง แอพพลิเคชั่นการจัดการปรับแต่งส่วนใหญ่ (SaltStack, Puppet, ฯลฯ ) ใช้ประโยชน์จากสิ่งนี้สำหรับการติดตั้งแพ็คเกจแบบไม่โต้ตอบ
notpeter

1
คำตอบที่ถูกต้องฉันสองที่
stefgosselin

13
มันไม่ทำงานสำหรับ dpkg-preconfigure
kursus

export DEBIAN_FRONTEND=noninteractiveทำงานให้ฉันที่dpkg-preconfigureเวที
Snowcrash

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แก้ไขความเห็นออกเพื่อกำหนดค่าล่วงหน้า
ไบรอัน

คำถามของฉันคือ: ไม่สนใจคำเตือนเหล่านี้หรือไม่ @Coombesy
Marco Prins

@MarcoPrins ใช่คุณสามารถละเว้นคำเตือนเช่น "stdin: ไม่ใช่ tty" หรือ "dpkg-preconfigure: ไม่สามารถเปิด stdin อีกครั้ง: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" สามารถพบหนึ่งในการยืนยันที่มีอยู่มากมายเช่นที่นี่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
Brian

คุณอาจจะต้องเปลี่ยนการใช้งาน Vagrant ของเชลล์
ToothlessRebel

1
การล้อเล่นกับไฟล์นี้เป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน (เห็นได้ชัดว่าไม่สนใจคำแนะนำ "redirect stderr" ซึ่งฉันคิดว่าเป็นคำแนะนำที่ไม่ดี) ฉันเลือกที่จะใช้ขั้นตอนการเตรียมก่อน / หลังเพื่อรวม--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หลัง
phils

5

การเปลี่ยนเส้นทาง Bash ทำงานได้ดีสำหรับ stdout และ stderr

ในการเปลี่ยนเส้นทางสตรีมข้อผิดพลาดให้ใช้ดังต่อไปนี้:

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

ด้านล่างเราจะเห็นได้ชัดเจนว่า file descriptor 1 คือ stdout, 2 stderr, 3 stdin

$ 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
ฉันต้องการที่จะสามารถสะท้อน stdout ปกติจาก apt-get แต่คุณอาจมีฉันในการติดตามที่ถูกต้อง ... ฉันจะลองส่ง stderr ไปยัง bit-bucket - ไชโยแก้ไข: เราทั้งคู่แสดงความคิดเห็นในเวลาเดียวกันฮ่า ๆ - ไชโย (อีกครั้ง)
Daithí

ฉันแก้ไขโพสต์ ดูบรรทัดสุดท้าย
BullShark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.