dpkg-reconfigure: stdin kann nicht erneut geöffnet werden: Keine Datei oder kein Verzeichnis

75

Ich erstelle ein Bereitstellungsskript für a ubuntu vagrant vm, on a ubuntu host, both. 12.10 64bitBei der Installation der folgenden Pakete:

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

Ich bekomme die Warnung:

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

Ich habe versucht zu suchen, aber die Ergebnisse werfen jeden anderen Fehler mit apt-get possible auf. Ich kann nicht herausfinden, wie die Warnung oben unterdrückt werden kann. Die Installation funktioniert, aber die obige Warnung führt zu Fehlerzeilen im vagabundenen Standard.

Jemand eine Idee, was die Ursache sein könnte oder wie man die Warnung unterdrückt

Daithí
quelle

Antworten:

91

Die Fehlermeldung wurde ausgeblendet, indem vor jedem Aufruf Folgendes in mein Bereitstellungsskript eingefügt wurde apt-get:

export DEBIAN_FRONTEND=noninteractive

Dadurch wird debconfein Frontend verwendet, das überhaupt keine interaktiven Eingaben erwartet, sodass es nicht einmal versucht, auf das Frontend zuzugreifen stdin.

der_gabe
quelle
3
Das ist die richtige Antwort. Die meisten Konfigurationsverwaltungsanwendungen (SaltStack, Puppet usw.) nutzen dies für nicht interaktive Paketinstallationen.
notpeter
1
Richtige Antwort, ich stimme dem zu.
stefgosselin
13
Es funktioniert jedoch nicht für dpkg-preconfigure.
kursus
export DEBIAN_FRONTEND=noninteractivearbeitete für mich auf der dpkg-preconfigureBühne
Snowcrash
23

Die Antwort war , die eingestellt perl:localeist , als je dies :

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

Dies löst das Problem, verlängert jedoch die vagrant upBereitstellung um unerwünschte Zeit .

Daithí
quelle
2
Das allein hat bei mir nicht funktioniert. Ich habe immer noch die Warnung erhalten, bis ich @ kenorbs auskommentierende 70debconfKorrektur für die Vorkonfiguration implementiert habe .
Brian
Meine Frage ist: Ist es in Ordnung, diese Warnungen zu ignorieren? @Coombesy
Marco Prins
@MarcoPrins Ja, Sie können Warnungen wie "stdin: is not a tty" oder "dpkg-preconfigure: stdin kann nicht erneut geöffnet werden: Keine solche Datei oder solches Verzeichnis" ignorieren. Eine von zahlreichen Bestätigungen ist hier zu finden, zB ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot
9

Führen Sie diesen Befehl aus:

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

um zu sehen, ob du diese Datei hast. In diesem Fall müssen Sie die DPkgZeile auskommentieren, mit der verhindert wird, dass alle Pakete debconfvor der Installation vorkonfiguriert werden.

Fügen Sie Ihrer Bereitstellungsdatei die folgenden Befehle hinzu:

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

Wenn Sie diese Datei nicht interessieren, entfernen Sie sie einfach:

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

Hier sind einige andere Befehle, die berücksichtigt werden müssen, aber ich denke nicht, dass sie irgendetwas Nützliches bewirken:

sudo dpkg-preconfigure -f noninteractive -p critical
sudo dpkg --configure -a
Kenorb
quelle
1
Dies ist, was schließlich für mich auf OSX Yosemite Vagrant und Ubuntu 14.04 gearbeitet hat.
Brian
Möglicherweise müssen Sie die von Vagrant verwendete Shell noch ändern.
ToothlessRebel
1
Das Spielen mit dieser Datei war das einzige, was für mich funktionierte (offensichtlich ignorierte ich die "redirect stderr" -Vorschläge, die ich für einen schlechten Rat halte). Ich entschied mich für ein Vorher / Nachher-Paar von Bereitstellungsschritten, um die --frontend=noninteractiveOption vorübergehend in den in der Datei definierten Befehl aufzunehmen. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconfvorher und sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfnachher.
Phils
5

Die Bash-Umleitung funktioniert gut für stdout und stderr.

Verwenden Sie Folgendes, um den Fehlerstrom umzuleiten:

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

Um sowohl stdout (Nachrichten, die keine Fehler / Warnungen sind) als auch stderr umzuleiten, verwenden Sie:

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

Das ist eine Abkürzung, die in Bash dafür verfügbar ist:

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

Oder:

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

Unten sehen wir deutlich, dass der Dateideskriptor 1 stdout, 2 stderr, 3 stdin ist.

$ 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

Für das, was du sagst, solltest du nur den allerersten Befehl brauchen, den ich gegeben habe.

Bullenhai
quelle
1
Ich möchte in der Lage sein, den normalen Standard von apt-get wiederzugeben. Aber Sie können mich auf dem richtigen Weg haben ... Ich werde versuchen, nur das Stderr an den Bit-Bucket zu senden - Cheers Edit: Wir haben beide zur gleichen Zeit kommentiert lol - cheers (again)
Daithí
Ich habe den Beitrag bearbeitet. Siehe die allerletzte Zeile.
BullShark