dpkg-reconfigure: impossibile riaprire stdin: nessun file o directory


75

Sto creando uno script di provisioning per a ubuntu vagrant vm, su a ubuntu host, entrambi 12.10 64bitdurante l'installazione dei seguenti pacchetti:

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

Ricevo l'avvertimento:

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

ho provato a cercare ma i risultati generano ogni altro errore con apt-get possibile, non riesco a scoprire come sopprimere l'avvertimento sopra. Le installazioni funzionano, ma l'avviso sopra sta causando righe di errore nel vagrant up stdout.

Qualcuno ha idea di quale potrebbe essere la causa o come sopprimere l'avvertimento

Risposte:


91

Ho ottenuto che il messaggio di errore sparisse inserendo quanto segue nel mio script di provisioning, prima di qualsiasi apt-getchiamata:

export DEBIAN_FRONTEND=noninteractive

Questo fa debconfuso di un frontend che non prevede alcun input interattivo, impedendogli persino di tentare di accedere stdin.


3
Questa è la risposta corretta La maggior parte delle applicazioni di gestione della configurazione (SaltStack, Puppet, ecc.) Sfruttano questo aspetto per installazioni di pacchetti non interattive.
notpeter,

1
Risposta corretta, secondo.
stefgosselin,

13
Tuttavia, non funziona con dpkg-preconfigure.
kursus,

export DEBIAN_FRONTEND=noninteractiveha lavorato per me sul dpkg-preconfigurepalco
Snowcrash il

23

La risposta è stata quella di impostare perl:localequanto segue :

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

Questo risolve il problema, ma aggiunge tempo indesiderato al vagrant upprovisioning.


2
Questo da solo non ha funzionato per me. Ho ancora ricevuto l'avviso finché non ho implementato la correzione di 70debconfcommento di @ kenorb per la preconfigurazione.
Brian,

La mia domanda è: va bene ignorare questi avvertimenti? @Coombesy
Marco Prins,

@MarcoPrins Sì, puoi tranquillamente ignorare avvisi come "stdin: non è un tty" o "dpkg-preconfigure: impossibile riaprire stdin: nessun tale file o directory". È possibile trovare una delle numerose conferme in giro, ad esempio qui ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

Esegui questo comando:

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

per vedere se hai questo file. In tal caso, la soluzione è commentare la DPkgriga che impedisce la preconfigurazione di tutti i pacchetti con debconfprima che vengano installati.

Quindi aggiungi questi comandi al tuo file di provisioning:

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

Altrimenti se non ti interessa questo file, rimuovilo semplicemente:

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

Ecco alcuni altri comandi da considerare, ma non credo che facciano qualcosa di utile:

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

1
Questo è ciò che alla fine ha funzionato per me su OSX Yosemite Vagrant e Ubuntu 14.04.
Brian,

Potrebbe essere ancora necessario modificare la shell utilizzata da Vagrant.
ToothlessRebel

1
Fare casini con questo file è stata l'unica cosa che ha funzionato per me (ovviamente ignorando i suggerimenti di "reindirizzamento stderr", che penso sia un cattivo consiglio). Ho scelto di utilizzare una coppia di passaggi di provisioning prima / dopo per includere temporaneamente l' --frontend=noninteractiveopzione nel comando definito nel file. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconfprima e sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfdopo.
phils,

5

Il reindirizzamento di Bash funziona bene per stdout e stderr.

Per reindirizzare il flusso di errori, utilizzare quanto segue:

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

Per reindirizzare sia stdout (messaggi che non sono errori / avvisi) sia stderr, utilizzare:

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

Questa è una scorciatoia disponibile in bash per questo:

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

O:

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

Di seguito, possiamo vedere chiaramente che il descrittore di file 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

Quindi, per quello che stai dicendo che vuoi fare, dovresti solo aver bisogno del primo comando che ho dato.


1
Voglio essere in grado di fare eco al normale stdout da apt-get. Ma potresti avermi sulla buona strada ... proverò a inviare solo lo stderr al bit-bucket - evviva modifica: entrambi abbiamo commentato allo stesso tempo lol - evviva (di nuovo)
Daithí

Ho modificato il post. Vedi l'ultima riga.
BullShark,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.