我想从*.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.service
postrm
update-alternatives --remove
我可以在 postrm 中将我的程序移至update-alternatives --remove
after #DEBHELPER#
,但我仍然会遇到一个问题,即清除旧的未使用的程序包将停止/禁用myapp.service
。我确信还有其他事情我也没有考虑。
现有的 Debian 档案中是否有任何软件包可以完成我想做的事情?
我几乎正在考虑在不这样做的情况下执行此操作debhelper
:在安装之前检查链接是否存在,如果是新的则启用。检查清除后链接是否存在,并且仅当这是该服务的最后一个供应商时才停止/禁用/屏蔽。如果这是唯一的方法,那很好......我只是不想重新发明轮子并引入错误。
答案1
Debian 代码搜索表明唯一执行类似操作的包是iptables-persistent
,而且我不觉得它试图做你想要做的事情。
我没有一个可靠的方法来处理你的提议;我会以不同的方式处理它:
一种可能性是根本不提供多项服务;相反,构建一个提供服务的通用包,并让该服务使用使用替代方案处理的二进制文件;
另一种方法是提供多个服务,但不将它们设置为替代方案,并依靠管理员使用 systemd 功能来选择启用哪个实例。
在后一种情况下,dh_installsystemd --no-enable
将很有用(在debian/rules
)。