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

Daithí
sumber

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.

der_gabe
sumber
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.

Daithí
sumber
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
kenorb
sumber
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.

BullShark
sumber
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