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
曾尝试搜索,但结果可能会引发其他所有错误,并且很容易找到,无法找出抑制上面警告的方法。安装工作正常,但是上面的警告正在导致流浪汉stdout中出现错误行。
任何人都知道可能是什么原因或如何消除警告
#1 楼
通过在任何apt-get
调用之前将以下内容放入我的配置脚本中,我得到了错误消息:export DEBIAN_FRONTEND=noninteractive
这使
debconf
使用不需要交互的前端完全没有输入,甚至无法尝试访问stdin
。#2 楼
答案是按照以下步骤设置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
设置增加了不必要的时间。评论
仅此一点对我不起作用。直到我实现@kenorb的70debconf注释掉修订以进行预配置之前,我仍然会收到警告。
–布赖恩
15年8月31日在21:18
我的问题是:忽略这些警告是否可以? @Coombesy
–马可·普林斯(Marco Prins)
2015年9月23日在7:07
@MarcoPrins是的,您可以放心地忽略诸如“ stdin:不是tty”或“ dpkg-preconfigure:无法重新打开stdin:无此类文件或目录”之类的警告。可以找到周围的众多确认之一,例如此处ikusalic.com/blog/2013/10/03/vagrant-intro
–mloskot
15年11月1日在18:22
#3 楼
运行以下命令: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
评论
这终于在OSX Yosemite Vagrant和Ubuntu 14.04上对我有用。
–布赖恩
15年8月31日在21:13
您可能仍然需要更改Vagrant使用的Shell。
–无牙叛军
2015年9月2日19:23在
弄乱这个文件是唯一对我有用的东西(显然忽略了“ 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之后。
– phils
19年7月3日,11:57
#4 楼
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
所以对于您想说的事情,您只需要我给出的第一个命令即可。
评论
我希望能够从apt-get中回显普通的stdout。但是您可能会让我走上正轨...我将尝试仅将stderr发送到位桶-干杯编辑:我们俩都在同一时间评论了-干杯(再次)
–Daithí
13年4月19日在1:34
我编辑了帖子。请参阅最后一行。
– BullShark
13年4月19日在1:45
评论
这是正确的答案。大多数配置管理应用程序(SaltStack,Puppet等)都将其用于非交互式软件包安装。
–通知者
2015年5月4日19:25
正确答案,我赞成。
–stefgosselin
15年5月31日在17:54
但是,它不适用于dpkg-preconfigure。
–kursus
16-11-19在21:03
export DEBIAN_FRONTEND =非交互式在dpkg-preconfigure阶段对我有用
–雪崩
19年2月22日在11:19