更新服务的替代方案

更新服务的替代方案

我想从*.deb包中安装服务,使用 链接到它update-alternatives。然后启用/启动符号链接。现有的 Debian 档案中有这方面的例子吗?如果没有,人们会如何做呢?

我这样做是因为我希望能够在同一台计算机上部署软件的多个版本,然后用于update-alternatives选择运行哪个版本。

update-alternatives对于使用并依赖 debhelper 提供服务的东西,典型的控制文件可能如下所示:

# myapp99.postinst
update-alternatives --install \
    /lib/systemd/system/myapp.service myapp \
    /lib/systemd/system/myapp99.service 99

#DEBHELPER#
# myapp99.prerm
update-alternatives --remove myapp lib/systemd/system/myapp99.service

#DEBHELPER#

但这里的问题是在我已经完成它之后#DEBHELPER#将继续运行。myapp.servicepostrmupdate-alternatives --remove

我可以在 postrm 中将我的程序移至update-alternatives --removeafter #DEBHELPER#,但我仍然会遇到一个问题,即清除旧的未使用的程序包将停止/禁用myapp.service。我确信还有其他事情我也没有考虑。

现有的 Debian 档案中是否有任何软件包可以完成我想做的事情?

我几乎正在考虑在不这样做的情况下执行此操作debhelper:在安装之前检查链接是否存在,如果是新的则启用。检查清除后链接是否存在,并且仅当这是该服务的最后一个供应商时才停止/禁用/屏蔽。如果这是唯一的方法,那很好......我只是不想重新发明轮子并引入错误。

答案1

Debian 代码搜索表明唯一执行类似操作的包是iptables-persistent,而且我不觉得它试图做你想要做的事情。

我没有一个可靠的方法来处理你的提议;我会以不同的方式处理它:

  • 一种可能性是根本不提供多项服务;相反,构建一个提供服务的通用包,并让该服务使用使用替代方案处理的二进制文件;

  • 另一种方法是提供多个服务,但不将它们设置为替代方案,并依靠管理员使用 systemd 功能来选择启用哪个实例。

在后一种情况下,dh_installsystemd --no-enable将很有用(在debian/rules)。

相关内容