Перенастроювання dpkg: неможливо повторно відкрити stdin: Немає файлу чи каталогу


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 possible, не можу дізнатися, як придушити попередження вище. Встановлення працює, але попередження вище викликає рядки помилок у бродяжному updddout.

Хто-небудь будь-хто думає, що може бути причиною або як придушити попередження

Відповіді:


90

Мені з’явилося повідомлення про помилку, щоб перед будь-якими apt-getдзвінками вписати в моєму сценарії резервування наступне :

export DEBIAN_FRONTEND=noninteractive

Це змушує debconfвикористовувати інтерфейс, який не очікує взаємного введення даних, не дозволяючи йому навіть намагатися отримати доступ stdin.


3
Це правильна відповідь. Більшість програм керування конфігурацією (SaltStack, Puppet тощо) використовують це для неінтерактивної установки пакунків.
непетер

1
Правильна відповідь, я другий, що.
stefgosselin

13
Однак він не працює для попередньої конфігурації dpkg.
kursus

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резервуванню.


2
Це одне для мене не вийшло. Я все одно отримав попередження, поки не застосував виправлення 70debconfкоментарів @ kenorb для попередньої конфігурації.
Брайан

Моє запитання: Чи добре ігнорувати ці попередження? @Coombesy
Marco Prins

@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

1
Це те, що нарешті працювало для мене на OSX Yosemite Vagrant та Ubuntu 14.04.
Брайан

Вам може знадобитися змінити оболонку, яку використовує Vagrant.
ToothlessRebel

1
Метерення з цим файлом було єдиним, що працювало для мене (очевидно, ігнорування пропозицій "перенаправити 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

Це ярлик, доступний в баш для цього:

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. Але ви, можливо, мене на правильному шляху ... Я спробую надіслати лише строгіший на біт-ведер - ура ура редагувати: ми обоє одночасно коментували lol - ура (знову)
Daithí

Я редагував публікацію. Дивіться самий останній рядок.
BullShark
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.