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

75

Я строй сценария продовольствования для 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, не могу найти способ подавить предупреждение выше. Установки работают, но приведенное выше предупреждение приводит к появлению строк ошибок в stdout vagrant up.

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

Dáithí
источник

Ответы:

91

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

export DEBIAN_FRONTEND=noninteractive

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

der_gabe
источник
3
Это правильный ответ. Большинство приложений управления конфигурациями (SaltStack, Puppet и т. Д.) Используют это для неинтерактивных установок пакетов.
notpeter
1
Правильный ответ, я второй.
Стефгосселин
13
Это не работает для dpkg-preconfigure, хотя.
Курс
export DEBIAN_FRONTEND=noninteractiveработал для меня на dpkg-preconfigureсцене
Snowcrash
23

Ответ должен был установить 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

Это решает проблему, но добавляет ненужное время для vagrant upобеспечения.

Dáithí
источник
2
Это само по себе не работает для меня. Я все еще получал предупреждение, пока не реализовал исправление закомментирования @ kenorb 70debconfдля предварительной настройки .
Брайан
У меня вопрос: можно ли игнорировать эти предупреждения? @Coombesy
Марко Принс
@MarcoPrins Да, вы можете спокойно игнорировать предупреждения типа «stdin: не является tty» или «dpkg-preconfigure: невозможно повторно открыть stdin: такого файла или каталога нет». Одно из многочисленных подтверждений можно найти здесь, например, здесь 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
kenorb
источник
1
Это то, что наконец-то сработало для меня на OSX Yosemite Vagrant и Ubuntu 14.04.
Брайан
Возможно, вам все еще придется изменить оболочку, которую использует Vagrant.
Беззубый Повстанец
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 - это стандартный вывод, 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

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

тупорылая акула
источник
1
Я хочу быть в состоянии повторить нормальный стандартный вывод из apt-get. Но, может быть, вы на правильном пути ... я попытаюсь отправить только stderr в правку: мы оба прокомментировали одновременно LOL - Cheers (снова)
Daithí
Я редактировал пост. Смотрите самую последнюю строку.
BullShark