我有一个setup.py
的python应用程序可以通过setuptools安装它。然后我使用优秀的Effing package management将其打包在DEB和PKGNG中。我也用setuptools-pkg进行了一些快速测试,这似乎也有效。
现在我需要分发包括init脚本的软件包来启动/停止/管理服务。我在源代码库中有我的init脚本,根据what seems to be best practice,我在setuptools中没有对它们做任何事情,我在os特定的包装中处理它们:基于debian的系统我根据需要使用--deb-init
,--deb-upstart
和--deb-systemd
FPM选项。
如何使用FPM或通过任何其他方式构建包含正确rc.d
脚本的FreeBSD包?
我所看到的所有示例都是在通过ports collection构建程序包时添加rc.d
脚本,但这是一个内部应用程序,不会发布到Ports或者的PyPI。我希望能够在FreeBSD系统上查看存储库,启动一个命令,它给我一个包,将它分发给其他FreeBSD系统,使用pkg
安装它并将我的init脚本正确部署到{{1 }}。没有必要继续使用FPM,任何工作只要它给我一个结构良好的包。
答案 0 :(得分:2)
我强烈建议您创建您的包,就像它是否是任何其他端口一样,如果要发布的话。
通过这样做可以继承的一个优点是,您还可以包括所有测试并自动化部署,开箱即用,以便继续进行集成/交付设置。
结帐poudriere。您确实可以使用自己的设置维护一组自定义端口,并在您的环境中分发它们,而不会有任何麻烦:
pkg install -r your-poudriere yourpkg
如果这可能太多或者可能无法很好地适应您的使用案例,您可以随时回退到ansible,您可以在模板中创建自定义rc.d
一个ansible role。
如果您只想构建和部署某些内容,请说微服务,那么pkg
可能不是最好的工具,也许您只需要一个可以在所有平台上运行的主管({ {3}})这样您就可以分发您的代码并拥有一个启动/停止服务的方法。
答案 1 :(得分:0)
nbari's answer 可能是执行此操作的正确方法™,我可能会创建自己的“端口”并使用它在中央主机上构建包。
在我最初提出问题时,我采取了不同的方法,为了完整起见,我在此报告。
我仍在使用 myapp-1.0.0.txz
构建应用程序包(即 fpm -s python -t freebsd
),它基本上使用 Python 的 setuptools 基础结构来获取必要的信息,并且我没有在其中包含任何 rc.d 文件
我还构建了第二个包,我将使用源目录类型(即 myapp-init-1.0.0.txz
)将其称为 fpm -s dir -t freebsd
,并且我只在该包中包含 init 脚本。
这两个包都分发到主机并安装,从而解决了我的分发问题。