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