Как я могу Debian-упаковать приложение python в системный модуль, используя stdeb3 / py2dsc и dpkg-buildpackage?

#debian-packaging #dpkg-buildpackage #stdeb

#debian-упаковка #dpkg-buildpackage #stdeb

Вопрос:

Что я хотел бы сделать, так это создать пакет Debian для приложения Python3 и установить в пакет связанную службу systemd и удалить / обновить ее, когда пакет будет удален или обновлен.

У меня есть программа Python3, которую я хотел бы включить в пакет Debian на Ubuntu 18.04. Я смог успешно сделать это с помощью a setup.py и py2dsc программы, которая поставляется с. stdeb3

 $ python setup.py sdist
$ py2dsc dist/mypackage-0.0.1.tar.gz
$ (cd deb_dist/mypackage-0.0.1/ amp;amp; dpkg-buildpackage -rfakeroot -uc -us)
  

Это создает возможность установки.deb и, кроме странной py2dsc зависимости от Python 3.6, несмотря на то, что я использую 3.8, он работает хорошо.

py2dsc создает промежуточное дерево debian, в том числе debian/rules с:

 #!/usr/bin/make -f

export PYBUILD_NAME=mypackage
%:
    dh $@ --with python3 --buildsystem=pybuild
  

Затем я хочу, чтобы этот пакет установил сервисный модуль systemd, который будет запускать программу Python3.Я думаю, что файл службы должен быть вызван python3-mypackage.service для соответствия <package-name>.service , потому py2dsc что добавляется python3- к имени пакета.

Я провел некоторое исследование и обнаружил, что вместо взлома pre / postinst scripts в dh команде debian/rules должна быть --with systemd добавлена опция, и мне нужно dh-systemd установить ее в моей системе Ubuntu 18.04. Для достижения этой цели я делаю паузу после запуска py2dsc , добавляю соответствующую запись debian/rules и затем запускаю dpkg-buildpackage .

По причинам, которые я не понимаю, dh-systemd в выходных данных нет упоминания dpkg-buildpackage :

 ...
   dh_installdocs -O--buildsystem=pybuild
   dh_installchangelogs -O--buildsystem=pybuild
   dh_python3 -O--buildsystem=pybuild
   dh_perl -O--buildsystem=pybuild
   dh_link -O--buildsystem=pybuild
   dh_strip_nondeterminism -O--buildsystem=pybuild
   dh_compress -O--buildsystem=pybuild
   dh_fixperms -O--buildsystem=pybuild
   dh_missing -O--buildsystem=pybuild
   dh_installdeb -O--buildsystem=pybuild
   dh_gencontrol -O--buildsystem=pybuild
   dh_md5sums -O--buildsystem=pybuild
   dh_builddeb -O--buildsystem=pybuild
...
  

Я искал вокруг, и хотя я могу найти примеры людей, создающих пакеты python, и людей, создающих пакеты с помощью модулей systemd, я не смог найти пример того, как кто-то упаковывает как проект python, так и связанный с ним модуль systemd, поэтому я не уверен, куда идти дальше. Мне интересно pybuild , конфликтует ли использование с использованием --with systemd ?

Ответ №1:

Если вы собираетесь использовать dpkg-buildpackage, вам следует создать каталог debian/ и все файлы в нем в соответствии с документацией по упаковке python. Это создаст полностью совместимый с политикой пакет Debian. Пакет stdeb предлагает только быстрый и грязный метод создания пакета Debian. Если вы собираетесь опубликовать этот пакет в репозитории Debian, использование stdeb контрпродуктивно.

Используя этот метод, вы можете использовать помощник dh_systemd и активировать его автоматически с помощью debcompat >= 10. Файл службы должен быть packagename.service в каталоге Debian.