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