2

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

我有一个 Python3 程序,我想将它捆绑到 Ubuntu 18.04 上的 Debian 包中。我已经能够使用 asetup.pypy2dsc附带的程序成功地做到这一点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,并且除了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,因为py2dscpython3-包名称之前。

我做了一些研究,发现与其破解pre/postinst脚本,不如在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

4

1 回答 1

1

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

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

于 2020-12-27T12:05:32.307 回答