如何从维护者脚本中优雅地退出 deb 安装?

How do I gracefully exit a deb install from a maintainer script?

我正在构建一个 deb,它使用 debconf 来询问用户是否真的想要安装它(简单的布尔模板)。优雅退出安装的最佳方式是什么,以便稍后用户可以 apt-get install pkg-name 并看到一个新的配置菜单?

我目前的解决方案是检查 preinst 脚本中的值,如下所示:

db_get pkg-name/confirm_install
if [ "$RET" = "false" ]; then
      db_purge
      exit 1
fi

exit 1 是必要的,以防止 apt-get 继续并认为已安装软件包,db_purge 允许用户使用干净的 debconf 数据库重新安装。但是,它会抛出一个讨厌的错误:

dpkg: error processing pkg-name (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 pkg-name
E: Sub-process /usr/bin/dpkg returned an error code (1)

是否有更好的方法来处理从 deb 维护者脚本中退出安装?

我不相信有。从 dpkg 的角度来看,用户要求安装包,如果最终没有发生,它需要尽可能多地解释以表明它没有发生以及为什么没有发生。

相反,您可以允许包干净地完成安装,但不启用包提供的任何额外行为,直到用户运行特殊的 "reconfigure" 脚本(或标准 dpkg-reconfigure $yourpkg).