如何解决如何使用stdeb3 / py2dsc和dpkg-buildpackage将Debian打包为带有systemd单元的python应用程序?
我要做的是为python3应用程序创建一个Debian软件包,并让该软件包安装相关的systemd服务,并在删除或更新该软件包时将其删除/更新。
我有一个python3程序,希望将其捆绑到Ubuntu 18.04上的Debian软件包中。我已经能够通过setup.py
和py2dsc
附带的stdeb3
程序成功地做到这一点。
$ python setup.py sdist
$ py2dsc dist/mypackage-0.0.1.tar.gz
$ (cd deb_dist/mypackage-0.0.1/ && dpkg-buildpackage -rfakeroot -uc -us)
这将创建一个可安装的.deb,并且除了对Python 3.6的怪异py2dsc
依赖之外,即使我使用的是3.8,它也能很好地工作。
py2dsc
创建一个debian过渡树,其中包括debian/rules
并具有:
#!/usr/bin/make -f
export PYBUILD_NAME=mypackage
%:
dh $@ --with python3 --buildsystem=pybuild
下一步,我想让此软件包安装将运行python3程序的系统服务单元。我认为需要将服务文件称为python3-mypackage.service
才能与<package-name>.service
匹配,因为py2dsc
在包名前加上了python3-
。
我做了一些研究,发现pre
中的postinst
命令应该具有dh
选项,而不是黑客debian/rules
/ --with systemd
脚本添加,并且我需要在我的Ubuntu 18.04系统上安装dh-systemd
。为此,我在运行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 Unit的示例。 ,所以我不确定从这里去哪里。我想知道pybuild
的使用与--with systemd
的使用是否冲突?
解决方法
如果您打算使用 dpkg-buildpackage,您应该根据 python packaging documentation 创建 debian/ 目录和那里的所有文件。这将创建一个完全符合政策的 Debian 包。 stdeb 软件包仅提供了一种快速而肮脏的方法来创建 Debian 软件包。如果您打算在 Debian 存储库中发布此软件包,则使用 stdeb 会适得其反。
使用此方法,you can use the dh_systemd helper,并使用 debcompat >= 10 自动激活它。服务文件必须是 Debian 目录中的 packagename.service。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。