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

Dai*_*thí 88 ubuntu dpkg apt vagrant

我正在为 a ubuntu vagrant vm, on a构建配置脚本ubuntu host12.10 64bit当安装以下软件包时:

sudo apt-get -y install php5-xsl graphviz php-pear unison
Run Code Online (Sandbox Code Playgroud)

我收到警告:

dpkg-reconfigure: unable to re-open stdin: No file or directory
Run Code Online (Sandbox Code Playgroud)

已经尝试过搜索,但结果是使用 apt-get 可能抛出所有其他错误,无法找到如何抑制上述警告。安装工作,但上面的警告导致 vagrant up 标准输出中的错误行。

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

小智 106

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

export DEBIAN_FRONTEND=noninteractive
Run Code Online (Sandbox Code Playgroud)

这使得debconf使用一个根本不需要交互式输入的前端,甚至阻止它尝试访问stdin.

  • 但是它不适用于 dpkg-preconfigure。 (15认同)
  • 这是正确答案。大多数配置管理应用程序(SaltStack、Puppet 等)利用它进行非交互式软件包安装。 (5认同)
  • 正确答案,我支持。 (2认同)

Dai*_*thí 25

答案是按此设置perl:locale's :

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
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题,但确实增加了不需要的配置时间vagrant up

  • 仅此一项对我不起作用。在我为预配置实施@kenorb 的 `70debconf` 注释修复之前,我仍然收到警告。 (2认同)

ken*_*orb 10

运行此命令:

cat /etc/apt/apt.conf.d/70debconf 
Run Code Online (Sandbox Code Playgroud)

看看你有没有这个文件。如果是这样,解决方案是注释掉DPkg防止debconf在安装之前预先配置所有软件包的行。

因此,将这些命令添加到您的配置文件中:

sudo ex +"%s@DPkg@//DPkg" -cwq /etc/apt/apt.conf.d/70debconf
sudo dpkg-reconfigure debconf -f noninteractive -p critical
Run Code Online (Sandbox Code Playgroud)

否则,如果您不关心此文件,只需将其删除:

sudo rm -v /etc/apt/apt.conf.d/70debconf
Run Code Online (Sandbox Code Playgroud)

这里有一些其他命令需要考虑,但我认为它们没有任何用处:

sudo dpkg-preconfigure -f noninteractive -p critical
sudo dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)


Bul*_*ark 5

Bash 重定向适用于 stdout 和 stderr。

要重定向错误流,请使用以下命令:

sudo apt-get -y install php5-xsl graphviz php-pear unison 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

要重定向标准输出(不是错误/警告的消息)和标准错误,请使用:

sudo apt-get -y install php5-xsl graphviz php-pear unison &> /dev/null
Run Code Online (Sandbox Code Playgroud)

这是 bash 中可用的快捷方式:

sudo apt-get -y install php5-xsl graphviz php-pear unison > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

或者:

sudo apt-get -y install php5-xsl graphviz php-pear unison 1> /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

下面,我们可以清楚地看到文件描述符1是stdout,2stderr,3stdin。

$ 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
Run Code Online (Sandbox Code Playgroud)

所以对于你所说的你想要做的,你应该只需要我给的第一个命令。