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

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

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

  • От имени устройства df до имени физического диска (поставщика / типа)
  • Проблема с пространствами имен mount в Fedora
  • Как создать резервную копию запущенной системы?
  • Конфигурация Linux VPS
  • Как программно получить GID работающего процесса
  • Имена для дисков ATA и SATA в Linux
  • Моя цель – установить мою цепочку доверия в /usr/local/share/ca-certificates/mychain но когда мой пакет Debian удален, я хочу, чтобы dpkg не удалял /usr/local/share/ca-certificates/mychain если он пуст, так как ca-certificates package явно создал этот каталог.

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

  • Как преобразовать цветной файл в письмо, читаемое в bash?
  • Не уверен, что запустит этот файл systemd unit
  • Как Linux обрабатывает процесс зомби
  • Изменить таблицу разделов с помощью GParted
  • Как устранить неполадки ядра при загрузке
  • Что означает атрибут «a» в lsattr?
  • 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 - лучшая ОС в мире.