我有一个用于 Django 系统的 .deb 安装程序,我需要向安装该软件的人询问一些问题。我可以看到一些方法来做到这一点,我想知道什么是 Debian 软件包的最佳实践。
现在通常,debconf 将是显而易见的解决方案。但是在这种情况下,我想每次都问这个问题,而不是让 Debian 记住它们并将它们应用于每次后续升级。其原因与问题的性质有关。具体来说,问题是“您现在要应用数据库迁移吗?” 和“你想建立一个演示数据库吗?”
现在,这些都可以在安装后手动完成,但到目前为止的经验表明,这一步很容易忘记,所以我想提示一下。我会自动执行迁移步骤,除了我们偶尔需要从其他机器迁移数据库,并且在应用迁移之前更容易完成。“演示数据库”问题通常仅在首次安装时使用,因此取决于迁移情况。但是,我们不希望 Debian 记住该选择并每次都应用它,因为它可能会损坏现有的、正在使用的数据库。
所以我想知道正统的 Debian 式方法可能是什么。我可以使用 postinst 脚本中的 shell 提示符,但如果有更好的方法,我会尽快这样做。我应该补充一点,我知道“再问一次”,但这似乎只能作为一个全局设置,我会尽快为这个包做这个。
最后一件事:这是一个内部系统,永远不会托管在公共存储库上,所以我不会过度担心无人值守安装或非 bash 安装环境等考虑因素。
这已经困扰了我几个星期了。感激地收到任何帮助。
有一种正统的方法可以解决您的问题,它应该允许您以“类似 Debian”的方式处理您的情况。
您可以重置 debconf 问题,以便每次都再次显示它:用于
db_reset
忘记之前的答案(如果需要),并db_fset ... seen false
忘记之前已经显示过该问题。这应该允许您询问是否每次都应用迁移。为了处理演示数据库问题,我将添加一个附加的隐藏设置,它会记住是否安装了演示数据库。这样,您可以使用通常的 debconf 机制来记住问题是否已被询问,以便仅在首次安装时显示;然后,可以查看demo数据库是否已经安装,避免安装两次。
我会将演示数据库拆分为一个单独的包。这是新手用户玩的东西,但我想将此和任何支持代码保留在生产环境之外。被问到我是否想安装演示的东西,而我想做的只是更新,这真的很烦人。
我将作为普通 DebConf 问题处理的更新问题,但反过来:一个低优先级(通常是隐藏的)、默认无问题,询问是否需要在数据库迁移时停止更新。这允许管理员配置一个完全自动化的过程,或者一个除了迁移之外的完全自动化的过程。
大多数更新不需要迁移,因此打扰用户是没有意义的,并且为用户提供让旧系统运行并中止更新的选项为他们提供了一个安全的选择。