Мне недавно дали задачу поддержания и портирования на Надежного человека внутренний .deb пакет, который перезаписывает (использование --force-overwrite
) файлы конфигурации от других пакетов с настроенными версиями, после который apt-get install -f -y
выполненный должен установить набор связанных пакетов, перечисленных как зависимости, некоторые из которых являются законными владельцами тех файлов конфигурации (Сохраняют Ваши подлые комментарии и крики террора себе). Обратите внимание, что этот пакет отмечает файлы конфигурации как файлы конфигурации, а не как регулярные файлы.
В процессе попытки очистить вещь, я обнаружил это если apt-get
передается -o Dpkg::Options::="--force-confold"
, затем файлы конфигурации от нашего пользовательского пакета будут перезаписаны версиями зависимостей, в то время как если -o Dpkg::Options::="--force-confnew"
используется, файлы нашего пакета останутся в конце.
Однако dpkg
состояния страницы справочника:
confnew
: Если conffile был изменен, и версия в пакете действительно изменяла, всегда устанавливала новую версию без запроса, если--force-confdef
также указан, в этом случае действие по умолчанию предпочтено.
confold
: Если conffile был изменен, и версия в пакете действительно изменяла, всегда сохраняет старую версию без запроса, если--force-confdef
также указан, в этом случае действие по умолчанию предпочтено.
Поскольку "новая версия" установлена, в то время как "старая версия" сохранена, это, кажется, подразумевает, что "новая версия" всегда является той в пакете, устанавливаемом в тот момент, и таким образом передача -o Dpkg::Options::="--force-confnew"
кому: apt-get
должен заставить файлы конфигурации зависимостей перезаписывать тех, которых наш пакет установил за момент до этого. Почему этот не имеет место? Фактическое означает "новой версии" на самом деле на основе меток времени (который просто поднял бы дальнейшие вопросы)? Это ошибка в документации и/или реализации dpkg
? Это просто волосатый пограничный случай, вызванный двумя пакетами, предъявляющими права на те же файлы конфигурации что dpkg
разработчики думали, что никто никогда не будет достаточно безумен для спотыкания через? Что?
Я полагаю, что выяснил то, что продолжалось: Поскольку зависимости для пользовательского пакета не установлены, когда dpkg -i
выполняется, пакет регистрируется в системе пакета, и ни это, ни ее файлы конфигурации не установлены в то время. То, когда apt-get install -f
выполняется, зависимости установлены, и тогда , сам пакет установлен, и именно в этой точке файлы конфигурации установлены и --force-conf*
, политика передала apt-get
, вступает в силу. Таким образом, это не был вопрос --force-confnew
так как порядок событий при установке испытывающего недостаток в зависимости пакета с dpkg
.