1

我有一个 python 应用程序,它setup.py可以通过setuptools安装它。然后我使用出色的 Effing包管理将它打包到 DEB 和 PKGNG 中。我还使用setuptools-pkg进行了一些快速测试,这似乎也有效。

现在我需要分发包含初始化脚本的包来启动/停止/管理服务。我在源代码库中有我的初始化脚本,根据似乎是最佳实践,我没有在 setuptools 中对它们做任何事情,而是在特定于操作系统的包装中处理它们:对于我使用的基于 debian 的系统和FPM选项(根据需要)--deb-init--deb-upstart--deb-systemd

如何rc.d使用 FPM 或通过任何其他方式构建包含正确脚本的 FreeBSD 软件包?

我见过的所有示例都是在通过端口集合rc.d构建包时添加脚本,但这是一个内部应用程序,不会发布到端口或 PyPi 上。我希望能够检查 FreeBSD 系统上的存储库,启动一个给我一个包的命令,将它分发到其他 FreeBSD 系统,使用安装它并将我的 init 脚本正确部署到. 没有必要为此继续使用 FPM,只要它给我一个格式良好的包,任何东西都可以。pkg/usr/local/etc/rc.d/<myappname>

4

2 回答 2

2

我强烈建议创建您的包,就像它是任何其他端口一样,无论是否要发布。

这样做可以继承的优势之一是,您还可以包含所有测试并自动化部署,开箱即用地作为持续集成/交付设置的基础。

看看poudriere。您确实可以使用自己的设置维护一组自定义端口,并将它们分布在您的环境中,而不会有任何麻烦:

pkg install -r your-poudriere yourpkg

如果这可能太多或可能无法很好地适应您的用例,您可以随时回退到 ansible ,您可以在ansible 角色rc.d的模板中创建自定义。

如果你只是想构建和部署一些东西,比如说一个微服务,那么可能pkg不是最好的工具,也许你只需要一个可以在你所有平台上工作的主管(sysutils/immortal)这样你就可以分发你的代码和有一个用于启动/停止服务的配方。

于 2017-12-10T13:04:23.300 回答
0

nbari 的答案可能是这样做的正确方式™,我可能会创建自己的“端口”并使用它在中央主机上构建包。

在我最初提出问题时,为了完整起见,我采取了不同的方法,我在这里报告。

我仍在使用 构建应用程序包(即。myapp-1.0.0.txzfpm -s python -t freebsd,它基本上使用 Python 的 setuptools 基础结构来获取必要的信息,并且我没有在其中包含任何 rc.d 文件。

我还构建了第二个包,我将myapp-init-1.0.0.txz使用源目录类型(即。fpm -s dir -t freebsd)调用它,并且我只在该包中包含 init 脚本。

两个软件包都分发到主机并安装,从而解决了我的分发问题。

于 2021-01-19T23:43:52.737 回答