dpkg-reconfigure: impossible de rouvrir stdin: aucun fichier ou répertoire


75

Je construis un script de provisioning pour un ubuntu vagrant vm, sur un ubuntu host, les deux 12.10 64bitLors de l'installation des packages suivants:

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

Je reçois l'avertissement:

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

ont essayé de chercher, mais les résultats ont généré toutes les erreurs avec apt-get, impossible de trouver comment supprimer l'avertissement ci-dessus. Les installations fonctionnent, mais l’avertissement ci-dessus provoque des lignes d’erreur dans le vagant up stdout.

N'importe qui peut savoir quelle pourrait être la cause ou comment supprimer l'avertissement

Réponses:


91

J'ai reçu le message d'erreur de disparaître en mettant le texte suivant dans mon script de provisioning, avant tout apt-getappel:

export DEBIAN_FRONTEND=noninteractive

Cela rend l' debconfutilisation d'une interface qui n'attend aucune entrée interactive, l'empêchant même d'essayer d'accéder stdin.


3
C'est la bonne réponse. La plupart des applications de gestion de la configuration (SaltStack, Puppet, etc.) en tirent parti pour les installations de paquet non interactives.
notpeter

1
Bonne réponse, je seconde cela.
stefgosselin

13
Cela ne fonctionne pas pour dpkg-preconfigure cependant.
Kursus

export DEBIAN_FRONTEND=noninteractivea travaillé pour moi au dpkg-preconfigurestade
Snowcrash

23

La réponse a été de définir les perl:locale« s selon ce :

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

Cela résout le problème, mais ajoute du temps non souhaité à la vagrant upmise en service.


2
Cela seul n'a pas fonctionné pour moi. J'ai toujours eu l'avertissement jusqu'à ce que j'ai implémenté le correctif de 70debconfcommentaire de @ kenorb pour la préconfiguration.
Brian

Ma question est la suivante: faut-il ignorer ces avertissements? @Coombesy
Marco Prins le

@MarcoPrins Oui, vous pouvez ignorer en toute sécurité les avertissements tels que "stdin: n'est pas un tty" ou "dpkg-preconfigure: impossible de rouvrir stdin: aucun fichier ni répertoire de ce type". Une des nombreuses confirmations disponibles peut être trouvée, par exemple ici. Ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

Exécutez cette commande:

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

pour voir si vous avez ce fichier. Si tel est le cas, la solution consiste à commenter la DPkgligne qui empêche la préconfiguration de tous les packages debconfavant leur installation.

Ajoutez donc ces commandes à votre fichier de provision:

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

Sinon, si vous ne vous souciez pas de ce fichier, supprimez-le simplement:

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

Voici quelques autres commandes à prendre en compte, mais je ne pense pas qu'elles soient utiles:

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

1
C'est ce qui a finalement fonctionné pour moi sur OSX Yosemite Vagrant et Ubuntu 14.04.
Brian

Vous devrez peut-être encore changer le shell utilisé par Vagrant.
ToothlessRebel

1
Ce fichier a été la seule chose qui a fonctionné pour moi (en ignorant évidemment les suggestions de "redirection stderr", ce qui, à mon avis, est un mauvais conseil). J'ai choisi d'utiliser une paire d'étapes de provisioning avant / après pour inclure temporairement l' --frontend=noninteractiveoption dans la commande définie dans le fichier. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconfavant et sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfaprès.
phils

5

La redirection Bash fonctionne bien pour stdout et stderr.

Pour rediriger le flux d'erreur, utilisez ce qui suit:

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

Pour rediriger à la fois stdout (messages qui ne sont pas des erreurs / avertissements) et stderr, utilisez:

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

C'est un raccourci disponible en bash pour ceci:

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

Ou:

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

Ci-dessous, nous pouvons clairement voir que le descripteur de fichier 1 est 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

Donc, pour ce que vous dites que vous voulez faire, vous ne devriez avoir besoin que du tout premier commandement que j'ai donné.


1
Je veux pouvoir faire écho à la sortie standard d'apt-get. Mais vous pouvez avoir moi sur la bonne voie ... je vais essayer d'envoyer juste le stderr au bit-seau - Acclamations modifier: nous avons tous deux commenté en même temps lol - acclamations (encore)
Daithí

J'ai édité le post. Voir la toute dernière ligne.
BullShark
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.