dpkg-reconfigure:无法重新打开标准输入:没有文件或目录


74

我建立一个配置脚本,针对一ubuntu vagrant vm,上ubuntu host,既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中导致错误行。

任何人都知道可能是什么原因或如何抑制警告

Answers:


90

通过在任何apt-get调用之前将以下内容放入配置脚本中,我得到了错误消息以消除:

export DEBIAN_FRONTEND=noninteractive

这使得debconf前端完全不需要交互式输入,从而阻止了它甚至试图访问stdin


3
这是正确的答案。大多数配置管理应用程序(SaltStack,Puppet等)都将其用于非交互式软件包安装。
notpeter 2015年

1
正确答案,我赞成。
stefgosselin 2015年

13
但是它不适用于dpkg-preconfigure。
kursus

export DEBIAN_FRONTEND=noninteractivedpkg-preconfigure舞台上为我工作
Snowcrash

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
Marco Prins

@MarcoPrins是的,您可以放心地忽略“ stdin:不是tty”或“ dpkg-preconfigure:无法重新打开stdin:没有这样的文件或目录”之类的警告。可以找到周围的众多确认之一,例如,在这里ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot 2015年

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使用的Shell。
ToothlessRebel

1
弄乱这个文件是唯一对我有用的东西(显然忽略了“ redirect 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之后。
菲尔

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中回显普通的stdout。但是你可能有我在正确的轨道上......我会尽力只发送标准错误的比特斗-欢呼编辑:我们同时笑都评价-干杯(再次)
Daithí

我编辑了帖子。请参阅最后一行。
BullShark 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.