我怎样才能强制包 A 的 postinst 在包 B 的 postinst 之前运行而不依赖于它?

我怎样才能强制包 A 的 postinst 在包 B 的 postinst 之前运行而不依赖于它?

(提示读者:出于本文的目的,您可以放心地忽略 ufw 是什么以及它实际上是如何工作的。我的问题不是关于 ufw,而是关于包装)。

我有自己的 Deb 包我的包。它会进行一些联网操作,并需要打开某些端口。可以肯定的是,唯一可能安装的防火墙是联邦快递。我希望我的软件包不依赖于 ufw 的存在。相反,我希望它的postinst例程能够确定是否存在ufw,如果存在则添加规则。这是我当前的postinst

if ufw version > /dev/null 2>&1; then
    ufw allow in proto udp from any to any port 12345
fi

如果安装了 ufw,则此方法可正常工作;如果未安装 ufw,则此方法可正常工作。

失败但是如果我的包和 ufw 同时安装:

apt-get install mypackage ufw

发生的情况是,mypackage 和 ufw 都被解包,然后Setting up首先为 mypackage 调用该阶段,发现 ufw 存在(ufw version成功),但由于尚未设置,它还不能正常工作,并且添加规则失败:

Selecting previously unselected package mypackage.
Unpacking mypackage (from .../mypackage_1.0_all.deb) ...
Selecting previously unselected package ufw.
Unpacking ufw (from .../archives/ufw_0.31.1-2_all.deb) ...
# ...
Setting up mypackage (1.0) ...
ERROR: Couldn't stat '/etc/default/ufw'
ERROR: Couldn't stat '/etc/default/ufw'
dpkg: error processing mypackage (--configure):
  subprocess installed post-installation script returned error exit status 1

我怎样才能强制--configureufw 在我的之前运行,而不依赖于 ufw?

相关内容