Создание пакета 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 strech - обновление сломанное - кажется багги dpkg
  • Есть ли способ перечислить количество файлов при использовании dpkg -L для отображения файлов пакета?
  • Возможно ли, чтобы сценарий предварительной установки пакета Debian выполнял команды apt-get?
  • Почему apt-get отказывается устанавливать cdefs.h (помимо символической ссылки)?
  • dpkg-deb build игнорирует / неверно истолковывает журнал изменений
  • Как проверить, установлен ли HDF5?
  • Может ли установка неизвестного пакета deb с использованием sudo dpkg быть вредным?
  • Файлы debian dpkg-dist после обновления apt
  • 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 - лучшая ОС в мире.