web-dev-qa-db-fra.com

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

Je crée un script de provisioning pour un ubuntu vagrant vm, sur un ubuntu Host, tous les deux 12.10 64bit Lors 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 lancent toutes les autres erreurs avec apt-get possible, ne peuvent pas trouver comment supprimer l'avertissement ci-dessus. Les installations fonctionnent, mais l'avertissement ci-dessus provoque des lignes d'erreur dans la sortie vagabonde.

Quiconque a une idée de ce qui pourrait être la cause ou comment supprimer l'avertissement

76
Daithí

La réponse a été de définir le Perl:locale selon ceci :

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 indésirable au vagrant up provisionnement.

23
Daithí

J'ai obtenu le message d'erreur pour disparaître en mettant ce qui suit dans mon script d'approvisionnement, avant tout apt-get appels:

export DEBIAN_FRONTEND=noninteractive

Cela fait que debconf utilise un frontend qui n'attend aucune entrée interactive du tout, l'empêchant même d'essayer d'accéder à stdin.

94
der_gabe

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 consiste à commenter la ligne DPkg qui empêche la pré-configuration de tous les packages avec debconf avant 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 à 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
9
kenorb

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 (messages qui ne sont pas des erreurs/avertissements) et stderr tous les deux, utilisez:

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

C'est un raccourci disponible en 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 que vous voulez faire, vous ne devriez avoir besoin que de la toute première commande que j'ai donnée.

5
BullShark