98 votes

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

Je suis en train de construire un script de provisioning pour un ubuntu vagrant vm sur un ubuntu host les deux 12.10 64bit Lors de l'installation des paquets 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

J'ai essayé de chercher mais les résultats donnent toutes les autres erreurs possibles avec apt-get, je ne trouve pas comment supprimer l'avertissement ci-dessus. Les installations fonctionnent, mais l'avertissement ci-dessus provoque des lignes d'erreur dans le stdout de vagrant up.

Quelqu'un a-t-il une idée de ce qui pourrait être la cause ou comment supprimer l'avertissement ?

123voto

der_gabe Points 1241

J'ai réussi à faire disparaître le message d'erreur en mettant ce qui suit dans mon script de provisionnement, avant tout apt-get appels :

export DEBIAN_FRONTEND=noninteractive

Cela rend debconf utiliser un frontal qui ne s'attend à aucune entrée interactive, ce qui l'empêche même d'essayer d'accéder aux données de l'entreprise. stdin .

6 votes

La réponse est correcte. La plupart des applications de gestion de configuration (SaltStack, Puppet, etc.) s'en servent pour l'installation non interactive de paquets.

2 votes

Réponse correcte, je suis d'accord.

15 votes

Cela ne fonctionne pas pour dpkg-preconfigure.

25voto

richi902 Points 111

La réponse a été de fixer le perl:locale selon este :

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 un temps non désiré à l'opération. vagrant up l'approvisionnement.

2 votes

Ce seul élément n'a pas fonctionné pour moi. J'ai toujours reçu l'avertissement jusqu'à ce que je mette en œuvre la solution de @kenorb. 70debconf Correction du commentaire pour preconfigure.

0 votes

Ma question est la suivante : est-il possible d'ignorer ces avertissements ? @Coombesy

0 votes

@MarcoPrins Oui, vous pouvez ignorer des avertissements comme "stdin : is not a tty" ou "dpkg-preconfigure : unable to re-open stdin : No such file or directory". L'une des nombreuses confirmations peut être trouvée, par exemple ici ikusalic.com/blog/2013/10/03/vagrant-intro

10voto

Zafar Points 241

Exécutez cette commande :

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

pour voir si vous avez ce fichier. Si c'est le cas, la solution est de commenter le fichier DPkg qui empêche de pré-configurer tous les paquets avec debconf avant qu'ils ne soient installés.

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, il suffit de le supprimer :

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

Voici quelques autres commandes à considérer, mais je ne pense pas qu'elles fassent quoi que ce soit d'utile :

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

1 votes

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

0 votes

Il se peut que vous deviez modifier le Shell utilisé par Vagrant.

1 votes

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

5voto

user150413 Points 11

La redirection Bash fonctionne bien pour stdout et stderr.

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

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

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

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

Il y a un raccourci disponible dans bash pour cela :

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 vouloir faire, vous ne devriez avoir besoin que de la toute première commande que j'ai donnée.

1 votes

Je veux être capable d'afficher le stdout normal d'apt-get. Mais vous m'avez peut-être mis sur la bonne voie... Je vais essayer d'envoyer uniquement le stderr au bit-bucket - merci edit : nous avons tous les deux commenté en même temps lol - merci (encore).

0 votes

J'ai modifié le message. Voir la toute dernière ligne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X