Предотвратить создание conffiles - PullRequest
4 голосов
/ 03 августа 2010

Я пытаюсь создать пакет, в котором под /etc есть файлы, которые не являются конфигурацией.Они включаются в conffiles автоматически, даже если я создаю пустой package.conffiles в каталоге debian.

Как я могу остановить dh_installdeb от этого?

Ответы [ 4 ]

7 голосов
/ 22 января 2014

Я не уверен, что понимаю ответ rafl, но dh_installdeb с debhelper=9.20120115ubuntu3 добавляет все, что ниже /etc, почти безоговорочно: debian/conffiles добавляет conffiles, но не переопределяет их.

Возможно переопределить вручную в debian/rules. Например, чтобы предотвратить регистрацию любых файлов как conffiles:

override_dh_installdeb:
    dh_installdeb
    find ${CURDIR}/debian/*/DEBIAN -name conffiles -delete

(конечно, отступ должен быть жестким)

2 голосов
/ 15 мая 2014

Можно определить правило обновления в сценарии preinst в debian/<package-name>.preinst, используя dpkg-maintscript-helper .

#!/bin/sh
# preinst script for <package-name>

set -e

case "$1" in
    install|upgrade)
      if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
        dpkg-maintscript-helper rm_conffile /etc/foo/conf.d/bar <Previous package version> -- "$@"
      fi
    ;;

    abort-upgrade)
    ;;

    *)
        echo "preinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

exit 0

Дополнительная информация: Правильный способ удаленияустаревший conffile в пакете Debian

1 голос
/ 24 июня 2014

Вот что я придумал как продолжение ответа Василия.Он эффективно делает то, что делает dh_installdeb, но без автоматического добавления /etc файлов.Таким образом, вы снова получаете полный контроль над тем, какие файлы считаются conffiles, а какие нет.

override_dh_installdeb:
  dh_installdeb
  @echo "Recreating conffiles without auto-adding /etc files"
  @for dir in ${CURDIR}/debian/*/DEBIAN; do \
      PKG=$$(basename $$(dirname $$dir)); \
      FILES=""; \
      if [ -f ${CURDIR}/debian/conffiles ]; then \
          FILES="${CURDIR}/debian/conffiles"; \
      fi; \
      if [ -f ${CURDIR}/debian/$${PKG}.conffiles ]; then \
          FILES="$$FILES ${CURDIR}/debian/$${PKG}.conffiles"; \
      fi; \
      if [ -n "$$FILES" ]; then \
          cat $$FILES | sort -u > $$dir/conffiles; \
      elif [ -f $$dir/conffiles ]; then \
          rm $$dir/conffiles; \
      fi; \
  done

(Конечно, используйте вкладки REAL, если вставляете в файл правил).

Этот ответиспользует BASH (или / bin / sh, который либо связан с BASH, либо является его вариантом).Может быть способ достичь этого, используя только внутренние команды makefile, но я не очень хорошо с ними справляюсь.

Это должно работать даже при сборке нескольких двоичных пакетов из одного источника, и при этом учитывается простой debian/conffiles, а также для конкретного пакета debian/${pkg}.conffiles.

0 голосов
/ 18 сентября 2010

Изначально в этом ответе предлагалось указать собственные файлы debian/conffiles, в которых перечислены только те файлы конфигурации, которые необходимо установить.Очевидно, это служит только для добавления большего количества файлов конфигурации, но не отменяет весь файл conffiles.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...