#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.