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