dpkg-reconfigure: tidak dapat membuka kembali stdin: Tidak ada file atau direktori


75

Saya sedang membangun skrip provisi untuk a ubuntu vagrant vm, pada a ubuntu host, keduanya 12.10 64bitKetika menginstal paket-paket berikut:

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

Saya mendapat peringatan:

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

telah mencoba mencari tetapi hasilnya memunculkan setiap kesalahan lain dengan apt-get mungkin, tidak dapat menemukan cara untuk menekan peringatan di atas. Instalasi berhasil, tetapi peringatan di atas menyebabkan garis kesalahan di stdout gelandangan.

Siapa pun yang tahu apa yang bisa menjadi penyebab atau bagaimana menekan peringatan itu

Jawaban:


91

Saya mendapat pesan kesalahan untuk pergi dengan meletakkan berikut ini di skrip penyediaan saya, sebelum apt-getpanggilan:

export DEBIAN_FRONTEND=noninteractive

Ini debconfmenggunakan frontend yang tidak mengharapkan input interaktif sama sekali, bahkan mencegahnya mencoba mengakses stdin.


3
Ini jawaban yang benar. Sebagian besar aplikasi manajemen konfigurasi (SaltStack, Puppet, dll) memanfaatkan ini untuk instalasi paket non-interaktif.
notpeter

1
Jawaban yang benar, saya yang kedua.
stefgosselin

13
Itu tidak bekerja untuk dpkg-prakonfigurasi.
kursus

export DEBIAN_FRONTEND=noninteractivebekerja untuk saya di dpkg-preconfigurepanggung
Snowcrash

23

Jawabannya adalah mengatur perl:locale's sesuai ini :

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

Ini menyelesaikan masalah, tetapi menambahkan waktu yang tidak diinginkan ke vagrant upketentuan tersebut.


2
Ini saja tidak berhasil untuk saya. Saya masih mendapatkan peringatan sampai saya menerapkan perbaikan 70debconfcommenting-out @ kenorb untuk konfigurasi awal.
Brian

Pertanyaan saya adalah: Apakah boleh mengabaikan peringatan ini? @Coombesy
Marco Prins

@ MarscoPrins Ya, Anda dapat dengan aman mengabaikan peringatan seperti "stdin: is not a tty" atau "dpkg-preconfigure: tidak dapat membuka kembali stdin: Tidak ada file atau direktori". Salah satu dari banyak konfirmasi di sekitar dapat ditemukan, misalnya di sini ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

Jalankan perintah ini:

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

untuk melihat apakah Anda memiliki file ini. Jika demikian, solusinya adalah mengomentari DPkgbaris yang mencegah pra-konfigurasi semua paket dengan debconfsebelum mereka diinstal.

Jadi tambahkan perintah ini ke file ketentuan Anda:

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

Kalau tidak, jika Anda tidak peduli dengan file ini, cukup hapus:

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

Berikut adalah beberapa perintah lain yang perlu dipertimbangkan, tetapi saya tidak berpikir mereka melakukan sesuatu yang berguna:

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

1
Inilah yang akhirnya berhasil bagi saya di OSX Yosemite Vagrant dan Ubuntu 14.04.
Brian

Anda mungkin masih perlu mengganti shell yang digunakan Vagrant.
ToothlessRebel

1
Mengutak-atik file ini adalah satu-satunya hal yang berhasil untuk saya (jelas mengabaikan saran "redirect stderr", yang menurut saya adalah saran yang buruk). Saya memilih untuk menggunakan pasangan langkah penyediaan sebelum / sesudah untuk sementara menyertakan --frontend=noninteractiveopsi dalam perintah yang ditentukan dalam file. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconfsebelum, dan sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfsesudah.
phils

5

Pengalihan Bash berfungsi dengan baik untuk stdout dan stderr.

Untuk mengarahkan ulang aliran kesalahan, gunakan yang berikut ini:

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

Untuk mengarahkan ulang stdout (pesan yang bukan kesalahan / peringatan) dan stderr keduanya, gunakan:

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

Itu adalah jalan pintas yang tersedia di bash untuk ini:

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

Atau:

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

Di bawah ini, kita dapat dengan jelas melihat bahwa file deskriptor 1 adalah 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

Jadi untuk apa yang Anda katakan ingin Anda lakukan, Anda hanya perlu perintah pertama yang saya berikan.


1
Saya ingin dapat mengulangi stdout normal dari apt-get. Tetapi Anda mungkin memiliki saya di jalur yang benar ... saya akan mencoba mengirimkan hanya stderr ke bit-bucket - mengedit sorakan: kami berdua berkomentar pada saat yang sama lol - sorak-sorai (lagi)
Daithí

Saya mengedit posting. Lihat baris terakhir.
BullShark
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.