dpkg-reconfigure:stdinを再度開くことができません:ファイルまたはディレクトリがありません


75

次のパッケージをインストールするときubuntu vagrant vmに、a ubuntu host、a 、両方のプロビジョニングスクリプトを作成してい12.10 64bitます。

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

警告が表示されます:

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

検索を試みましたが、結果はapt-getを使用して他のすべてのエラーをスローします。上記の警告を抑制する方法を見つけることができません。インストールは機能しますが、上記の警告により、vagrant up stdoutにエラー行が表示されます。

誰でも何が原因か、警告を抑制する方法を知っている

回答:


91

apt-get呼び出しの前に、プロビジョニングスクリプトに次のコードを追加すると、エラーメッセージが消えます。

export DEBIAN_FRONTEND=noninteractive

これによりdebconf、インタラクティブな入力をまったく期待しないフロントエンドが使用され、にアクセスしようとすることさえできなくなりますstdin


3
これは正解です。ほとんどの構成管理アプリケーション(SaltStack、Puppetなど)は、非対話型パッケージのインストールにこれを活用します。
notpeter

1
正解です
-stefgosselin

13
ただし、dpkg-preconfigureでは機能しません。
クルサス

export DEBIAN_FRONTEND=noninteractivedpkg-preconfigureステージで私のために働いた
スノークラッシュ

23

答えは、設定したperl:locale通りのを、この

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

これにより問題は解決しますが、vagrant upプロビジョニングに不要な時間が追加されます。


2
これだけではうまくいきませんでした。@kenorbの70debconf事前設定用のコメントアウト修正を実装するまで、私はまだ警告を受けました。
ブライアン

私の質問は、これらの警告を無視しても大丈夫ですか?@Coombesy
マルコプリンス

@MarcoPrinsはい、「stdin:is not tty」または「dpkg-preconfigure:reopen open the stdin:No such file or directory」などの警告を安全に無視できます。例えば、ここで見つけることができます周りの多数確認の一つikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

次のコマンドを実行します:

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

このファイルがあるかどうかを確認します。その場合、解決策は、インストールDPkgするdebconf前にすべてのパッケージを事前設定することを防ぐ行をコメントアウトすることです。

したがって、これらのコマンドをプロビジョニングファイルに追加します。

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

それ以外の場合、このファイルを気にしない場合は、単に削除します。

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

考慮すべきコマンドは他にもいくつかありますが、有用なことはないと思います。

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

1
これが、OSX Yosemite VagrantとUbuntu 14.04で最終的に機能したものです。
ブライアン

Vagrantが使用するシェルの変更が必要になる場合があります。
ToothlessRebel

1
このファイルをいじるだけでうまくいきました(明らかに、 "リダイレクトstderr"の提案は無視しますが、これは悪いアドバイスだと思います)。--frontend=noninteractiveファイルで定義されたコマンドにオプションを一時的に含めるために、プロビジョニングステップの前後のペアを使用することにしました。sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconf前とsudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconf後。
phils

5

bashリダイレクトは、stdoutおよびstderrに対して正常に機能します。

エラーストリームをリダイレクトするには、次を使用します。

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

stdout(エラー/警告ではないメッセージ)とstderrの両方をリダイレクトするには、次を使用します。

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

これは、bashで利用可能なショートカットです:

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

または:

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

以下では、ファイル記述子1が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

だから、あなたがやりたいことを言っているのであれば、私が与えた最初のコマンドだけが必要です。


1
apt-getから通常の標準出力をエコーできるようにしたい。我々の両方が同時にコメント笑- (再び)歓声: -しかし、あなたは右のトラックに私を持っている...私は、ビットバケットにちょうど標準エラー出力を送信してみますこと歓声編集
Daithí

投稿を編集しました。最後の行を参照してください。
-BullShark
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.