Создание пакета Debian, который не удаляет каталоги после его очистки

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

Я следую предложенному Debian методу установки сертификатов в /usr/local/share/ca-certificates . Проблема, с которой я столкнулся, заключается в том, что пакет ca-certificates создает /usr/local/share/ca-certificates когда он установлен, и я хотел бы, чтобы этот каталог оставался при очистке моего пакета.

Моя цель – установить мою цепочку доверия в /usr/local/share/ca-certificates/mychain но когда мой пакет Debian удален, я хочу, чтобы dpkg не удалял /usr/local/share/ca-certificates/mychain если он пуст, так как ca-certificates package явно создал этот каталог.

Я обыскал для окончательного ответа, но все, что мне удалось найти, это длинные сообщения на форуме и темы электронной почты.

  • Автоматические обновления и измененные файлы конфигурации
  • Могут ли удаленные пакеты Debian иметь оставшиеся файлы?
  • Почему grep изменяет длину выходных строк?
  • Поддерживает ли dpkg Debian время / дату изменения пакета (т.е. установка / очистка)?
  • debconf не работает, больше ничего не может установить
  • Как я могу надежно «держать» пакет в Debian?
  • Как найти пакет, в котором установлена ​​команда, если «dpkg -S» не находит пути, потому что команда является символической ссылкой?
  • Я побил apt-get и dpkg, пытаясь перекрещивать мою архитектуру Debian
  • 2 Solutions collect form web for “Создание пакета Debian, который не удаляет каталоги после его очистки”

    Добавить скрипт postrm :

     #!/bin/sh set -e case "$1" in purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) # Recreate the /usr/local/share/ca-certificates directory, since we are # ignoring Debian Policy by intentionally installing here. Removal of # ca-certificates-local removes this directory if empty. if [ ! -e /usr/local/share/ca-certificates ]; then if mkdir /usr/local/share/ca-certificates 2>/dev/null; then chown root:staff /usr/local/share/ca-certificates chmod 2775 /usr/local/share/ca-certificates fi fi ;; *) echo "postrm called with unknown argument \`$1'" >&2 exit 1 ;; esac #DEBHELPER# exit 0 

    Этот код находится из ca-certificate-local :

    Это пример исходного пакета-заглушки, который включает фиктивный сертификат ЦС в локальном каталоге /. Удалите фиктивный сертификат, скопируйте доверенный локальный корневой ЦС (в формате PEM с именем файла, заканчивающимся на «.crt»), в каталог local /, отредактируйте файлы в каталоге debian / по желанию и создайте свой собственный пакет.

    См. README , Шаги по созданию собственного локального корневого пакета CA из этого примера.

    Итак, быстрый способ создания и установки таких пакетов:

     git clone git://anonscm.debian.org/collab-maint/ca-certificates.git ~/ca-certificates cd ~/ca-certificates/examples/ca-certificates-local/ rm local/Local_Root_CA.crt cp <path-to-your-cert> local/ # edit debian/control: change package-name, description, etc # install build dependencies: http://unix.stackexchange.com/questions/177505/how-to-install-parse-build-dependencies-from-debian-control/211319#211319 dpkg-buildpackage dpkg -i ../<package-name-version>.deb 

    Установите на другой локальный путь и напишите postinst скрипт для создания каталога в /usr/local и скопируйте туда файлы.

    Как вы можете себе представить, это, вероятно, нарушает как букву, так и дух политики Debian. Но это ваша сеть, ваши правила, ваши пользователи (и их легко обнаруживаемые обходные пути).

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

    В нижней строке, файлы dpkg не знают, он не может удалить.

    Linux и Unix - лучшая ОС в мире.