我想做的是为 Python3 应用程序创建一个 Debian 包,并让该包安装相关的 systemd 服务,并在删除或更新包时删除/更新它。
我有一个 Python3 程序,我想将它捆绑到 Ubuntu 18.04 上的 Debian 包中。我已经能够使用 asetup.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,并且除了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
脚本,不如在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
?