Как заставить apt-get принимать новые конфигурационные файлы при автоматической установке Debian из репозитория

Вопрос или проблема

Я пишу скрипт для автоматической установки пакета, который находится в нашем репозитории, это программное обеспечение с одной из отмеченных конфигурационных файлов Debian. Есть ли какой-либо параметр, который я могу передать в apt-get/aptitude, чтобы он принял новые конфигурационные файлы?

Мне нужен эквивалент dpkg --force-confnew для apt/aptitude

Мне нужно ответить на следующий вопрос, заданный при установке с помощью apt-get, с Y


Конфигурационный файл «/opt/application/conf/XXX.conf»

==> Файл в системе создан вами или скриптом.
==> Файл также предоставлен сопровождающим пакета.

Что бы вы хотели с ним сделать? Ваши варианты:
Y или I  : установить версию сопровождающего пакета
N или O  : оставить вашу текущую установленную версию
  D     : показать различия между версиями
  Z     : отправить этот процесс в фоновый режим для изучения

Действие по умолчанию - оставить вашу текущую версию.

Дополнительная информация:

Также я передаю пароль sudo через pipe, чтобы выполнить команду

echo "mysudopass"|sudo -S apt-get mypackage

Это вызывает ошибку при установке, когда установка переходит в интерактивную фазу конфигурации.

Я использую Ubuntu 10.04
версия apt: apt 0.7.25.3

Почему я не могу использовать dpkg: эти Debian пакеты должны быть установлены из репозитория, и у меня нет локальных пакетов Debian на моей машине

Вы можете передать параметры dpkg в apt-get, например:

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...

С --force-confdef, если старые конфигурационные файлы все еще существуют, они не будут перезаписаны. Так что вы, вероятно, не будете его использовать, я просто документирую это для других.

sudo не будет запрашивать пароль, если вы отключите опцию аутентификации для пользователя или добавите метку NOPASSWD в конкретную запись, например:

someuser ALL = NOPASSWD: /usr/bin/apt-get

Вы можете попробовать следующее:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2

Но обратите внимание, что это имеет последствия, например, пустые пароли по умолчанию (возможно, вам следует использовать инструменты развертывания/конфигурации, такие как puppet, chef, fabric…?).

Смотрите sudoers(5) о том, как позволить выполнение sudo без пароля.

В дополнение к другим ответам, вам может понадобиться установить окружение UCF_FORCE_CONFFNEW=1.

Например, openssh в debian stretch использует ucf (не debconf) в openssh-server/openssh-7.4p1/debian/openssh-server.postinst для запроса о конфигурационном файле. (Вы можете увидеть openssh-server.postinst, используя dget по адресу http://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1-10+deb9u4.dsc)

Нам пришлось использовать все хитрости на этой странице в дополнение к широкому использованию debconf preseeding.

Тем не менее, мы остановились в шаге от export DEBIAN_FRONTEND=noninteractive, потому что мы хотим знать, если мы что-то упустили (что может быть важно). Наш случай использования – оператор начинает операцию. Ожидается, что обновление будет неинтерактивным, но оператор присутствует, если что-то пойдет не так и появится диалоговое окно. Ваша ситуация может отличаться.

Но export DEBIAN_FRONTEND=noninteractive – это ваш proverbial молот.

Просто будьте осторожны: Установка -o Dpkg::Options::=--force-confnew и/или UCF_FORCE_CONFFNEW=1 означает, что все конфигурационные файлы из установленных пакетов вернутся к исходным. Например, в случае openssh-server, ваш /etc/ssh/sshd_config будет сброшен к заводским настройкам. И, например, PermitRootLogin=yes будет удален. Но, конечно, вы это не используете, так что все будет в порядке! 😉

В качестве альтернативы тому, что предложил forcefsck, я предлагаю добавить это в настройки APT, чтобы вам не приходилось добавлять эти трудночитаемые параметры каждый раз. Также это будет полезно для автоматических обновлений, если они у вас настроены.

Создайте файл /etc/apt/apt.conf.d/71debconf со следующим содержимым:

Dpkg::Options {
  "--force-confnew";
};

Примечание (от Geoff): это изменение будет глобальным. Если у вас есть другие пакеты в системе, которые вы хотите, чтобы обновления выполнялись автоматически, но которые вы также настроили вручную, это не будет подходящим решением.

Согласно dpkg-1.21.1ubuntu2.2/src/configure.c,
–force-confnew используется, если вызывается show_prompt. –force-confask может быть необходим в некоторых неясных условиях

Ответ или решение

Для специалистов в области информационных технологий, стремящихся автоматизировать процессы установки программного обеспечения на Debian, сталкиваются с необходимостью принятия новых конфигурационных файлов пакетов. Продуманное использование инструментов apt-get и aptitude поможет вам реализовать без присутствия человека установочные процессы, в которых новые конфигурационные файлы принимаются автоматически. В представленном вопросе обсуждается, как передать apt-get команду принять новые конфигурации, аналогично тому, как это делает dpkg с параметром –force-confnew.

Теоретическая часть

В терминологии пакетов Debian, конфигурационные файлы представляют собой файлы, которые должны быть сохранены, даже если сам пакет будет удален. Они играют важную роль в персонализации и управлении поведением установленных программ. При обновлении пакетов, зачастую возникают конфликты между новыми версиями этих файлов и тех, что уже существуют на системе.

При использовании dpkg, параметр –force-confnew позволяет точно указать системе, что при возникновении конфликта с конфигурационными файлами предпочтение должно отдаваться новым файлам из пакета, игнорируя старые версии. Следует иметь в виду, что это может перезаписать все имеющиеся настройки программ, что может быть нежелательным в определённых обстоятельствах.

Пример

Для выполнения аналогичной задачи в контексте apt-get, можно использовать параметры, передаваемые команде dpkg через apt-get. Важной частью решения является использование переменной окружения DEBIAN_FRONTEND и передача соответствующих опций dpkg:

export DEBIAN_FRONTEND=noninteractive
apt-get -y -o Dpkg::Options::=--force-confnew install <имя пакета>

В данном примере, опция DEBIAN_FRONTEND=noninteractive отключает любые интерактивные запросы от пользователя, делая процесс установки полностью автономным. Дополнительно, опция –force-confnew в контексте Dpkg сообщает apt-get заменять существующие конфигурационные файлы новыми версиями из пакета без запроса.

Применение

Для применения вышеописанного метода на практике, необходимо адаптировать конфигурацию системы и скрипты установки под конкретные требования вашей инфраструктуры. Следует также учитывать безопасность данного подхода — автоматическое принятие новых конфигурационных файлов может привести к непредвиденным изменениям в системе, особенно если эти файлы содержат важные настройки безопасности.

Пример расширенного использования опций выглядит следующим образом:

  1. Предварительная настройка sudo: Настройте файлы конфигурации sudo таким образом, чтобы определенные пользователи или скрипты могли выполнять команды без ввода пароля:
someuser ALL = NOPASSWD: /usr/bin/apt-get
  1. Модификация apt.conf: Для систематического применения данных опций создание нового файла конфигурации в /etc/apt/apt.conf.d/ может автоматизировать процесс на уровне системы:
echo 'Dpkg::Options {
  "--force-confnew";
};' | sudo tee /etc/apt/apt.conf.d/71debconf
  1. Пересмотр возможных последствий: Следует учитывать, что использование такого подхода без должного контроля может привести к потере специфических пользовательских настроек.

Таким образом, автоматическое принятие новых конфигурационных файлов при использовании apt-get может значительно упростить управление пакетами в мультиплатформенных окружениях. Однако, данный подход должен применяться аккуратно и взвешенно, особенно в контексте критически важных систем. Ваши действия должны учитывать не только техническую реализацию, но и возможные бизнес-риски, связанные с обновлениями настроек.

Подобный баланс позволит вам оптимизировать процессы без потери контроля над конфигурацией систем, что является ключевым элементом в эффективном управлении IT-активами.

Оцените материал
Добавить комментарий

Капча загружается...