我如何使用stdeb3/py2dsc和dpkg构建包将python应用程序与systemd单元打包



我想做的是为Python3应用程序创建一个Debian包,让该包安装一个相关的systemd服务,并在删除或更新该包时删除/更新它。

我有一个Python3程序,我想把它捆绑到Ubuntu18.04上的Debian包中。我已经能够用setup.pystdeb3附带的py2dsc程序成功地做到这一点。

$ 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,除了对Python3.6的奇怪的py2dsc依赖之外,即使我使用的是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-

我做了一些研究,发现debian/rules中的dh命令应该添加--with systemd选项,而不是破解pre/postinst脚本,我需要在Ubuntu 18.04系统上安装dh-systemd。为了实现这一点,我在运行py2dsc之后暂停,将相关条目添加到debian/rules,然后运行dpkg-buildpackage

由于我不理解的原因,dpkg-buildpackage:的输出中没有提到dh-systemd

...
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的使用相冲突?

如果您要使用dpkg构建包,您应该根据python打包文档创建debian/目录和那里的所有文件。这将创建一个完全符合策略的Debian包。stdeb包只提供了一种快速而肮脏的方法来创建Debian包。如果您打算在Debian存储库中发布此包,那么使用stdeb会适得其反。

使用此方法,您可以使用dh_systemd帮助程序,并使用debcompat>=自动激活它10.服务文件必须是Debian目录上的packagename.service。

相关内容

  • 没有找到相关文章

最新更新