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

21

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

В основном мне нужен apt/ aptitudeэквивалент dpkg --force-confnew

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


Файл конфигурации `` / opt / application / conf / XXX.conf` '

==> File on system created by you or by a script.
==> File also in package provided by package maintainer.

What would you like to do about it ?  Your options are:
Y or I  : install the package maintainer's version
N or O  : keep your currently-installed version
  D     : show the differences between the versions
  Z     : background this process to examine the 

The default action is to keep your current version.

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

Кроме того, я передаю sudoпароль в трубе для выполнения команды

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

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

Я на Ubuntu 10.04
apt версия: apt 0.7.25.3

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

Раман
источник
serverfault.com/questions/48724/…
Аластер Ирвин

Ответы:

22

Вы можете передать 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
forcefsck
источник
7

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

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

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

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

Sr-
источник
3

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

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

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

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

Те Ри
источник
Это может быть хорошим вариантом, однако важно отметить, что это будет глобальное изменение. Если у вас есть другие пакеты в системе, которые вы хотите получить автоматические обновления, но также настроили, это не будет подходящим решением.
Джефф
2

В дополнение к другим ответам вам также может потребоваться установить среду 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 )

Мы должны были использовать все приемы на этой странице в дополнение к тому, чтобы быть либеральными пользователями preseeding debconf .

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

Но export DEBIAN_FRONTEND=noninteractiveэто ваш пресловутый кувалда.

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

Петр В. Мёрч
источник