Назад | Перейти на главную страницу

dpkg-reconfigure: невозможно повторно открыть стандартный ввод: нет файла или каталога

Я создаю сценарий подготовки для 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.

Кто-нибудь знает, что может быть причиной или как подавить предупреждение

Я получил сообщение об ошибке, которое нужно удалить, добавив следующее в мой сценарий подготовки перед любым apt-get звонки:

export DEBIAN_FRONTEND=noninteractive

Это делает debconf использовать интерфейс, который вообще не ожидает интерактивного ввода, не позволяя ему даже пытаться получить доступ stdin.

Ответ заключался в том, чтобы установить 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 обеспечение.

Выполните эту команду:

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

Перенаправление 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 - это стандартный вывод, 2 - стандартный поток, 3 - стандартный ввод.

$ 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

Итак, для того, что вы хотите сделать, вам понадобится только самая первая команда, которую я дал.