Как сделать * dpkg-перенастроить dash * как bash автоматически

14

Я хочу создать образ докера из образа Ubuntu. Требуется изменить значение по умолчанию sh с dash на bash вручную. (Потому что это требует установки многих пакетов RPM, которые содержат сценарии Bash)

dpkg-reconfigure dash

Есть ли способ, позволяющий автоматически выполнять это действие без человеческого поведения?

В моем Dockerfile это может быть записано как (Метод 1)

RUN dpkg-reconfigure dash

Я пробовал другой метод (метод 2)

RUN ln -sf bash /bin/sh

Но оба метода не могут работать.

Даниэль YC Лин
источник

Ответы:

3

Вы можете сделать debconf только для вопросов с высоким или критическим уровнем [1].

Пример:

dpkg-reconfigure -p critical dash

dpkg-reconfigure будет использовать ответ по умолчанию, определенный в сценарии debconf. Вы также можете использовать debconf-get-selections, чтобы выбрать другой ответ для неинтерактивной установки [2].

  1. https://wiki.debian.org/debconf
  2. http://blog.nutsfactory.net/2008/03/06/noninteractive-dpkg-installation-on-debian-system/
Рекс Цай
источник
Если вы хотите посмотреть, что происходит при запуске dpkg -configure DEBCONF_DEBUG = developer dpkg -configure -p критической черты
Рекс Цай
debconf-get-selections отсутствует. Я не могу найти в packages.debian.org/wheezy/all/debconf/filelist .
Даниэль YC Лин
10
Я использую, debconf-show dashчтобы получить варианты. echo "dash dash/sh boolean false" | debconf-set-selectionsи DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dashсделать неинтерактивную настройку.
Даниэль YC Лин
2
@DanielYCLin, если бы вы добавили это в качестве своего собственного ответа, я бы высказался.
Газарсго
25

Вставка комментария Даниэля в качестве ответа здесь, поскольку он не зависит от настроек по умолчанию от dpkg-reconfigure.

Чтобы получить варианты:

debconf-show dash

Чтобы установить эту конкретную опцию для false:

echo "dash dash/sh boolean false" | debconf-set-selections

и фактически перенастроить пакет:

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash

Это сработало для меня из Dockerfile:

# make /bin/sh symlink to bash instead of dash:
RUN echo "dash dash/sh boolean false" | debconf-set-selections
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash
mgalgs
источник