Как автоматизировать измененные файлы конфигурации во время обновления apt-get в Ubuntu 12

13

Мне нравится использовать "сервер создания облачного ножа ...", чтобы построить новую виртуальную машину. Мой шаблон начальной загрузки начинается с «apt-get update» и «apt-get -y upgrade».

Затем обновление останавливается с:

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

Так что на самом деле есть две проблемы:

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

Во-вторых, я даже не знаю, каким должен быть правильный ответ на вопрос. Файл конфигурации, который он заменяет, взят из шаблона. Я еще не посмотрел, что делает "nscd". (Предположительно, «Y» является правильным ответом, но исследование, проведенное во время вопроса, является пугающим.)

Mojo
источник

Ответы:

15

Вы можете передавать аргументы, чтобы избежать получения подсказок. Это работает для меня;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(мой выбор) задаст эти вопросы «Что вы хотите сделать с измененным файлом конфигурации» по умолчанию N(сохранить текущую версию)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

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

Йосеф Харуш
источник
5

Если вы абсолютно не хотите отвечать на какие-либо интерактивные вопросы, установите для DEBIAN_FRONTENDвнешней переменной значение noninteractive.

Это может быть так же просто, как DEBIAN_FRONTEND=noninteractive apt-get upgrade.

Вы не получите никаких сообщений, и будут выбраны значения по умолчанию. В большинстве случаев это означает, что ваши файлы конфигурации не будут изменены, и вы останетесь с файлами, названными как *.dpkg-newдля всех мест, где файл конфигурации не был затронут. Затем вы можете вручную разрешить изменения или передать свою локальную конфигурацию в систему, используя систему управления конфигурацией или любую другую.

Во-вторых, я даже не знаю, каким должен быть правильный ответ на вопрос

Нажатие клавиши D покажет разницу, которую вы можете затем проверить. Если вы уверены, что никогда не изменяли этот файл вручную, выбор Y для его замены, вероятно, безопасен (вы подтвердили, что ваши резервные копии обновляются ПРАВЫМ !! ). Выбор N просто сохраняет старый файл, который также безопасен в 95% случаев, за исключением случаев, когда в пакете произошли серьезные изменения, о которых обычно говорится в заметках об изменениях / выпуске, которые вы также прочитали до запуска команды upgrade / dist-upgrade.

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

Zoredache
источник
Вы советуете DEBIAN_FRONTEND = не взаимодействовать с --force-yes? Похоже, что по умолчанию NO, и «да», скорее всего, правильно в этом случае. (Я не могу нажать ни одну клавишу, так как нет стандартного ввода.)
Mojo