在preinst Debian维护脚本中获取新版本

时间:2011-03-25 21:08:13

标签: debian packages

我想阻止较旧的Debian软件包踩踏新版本的Debian软件包。

我正在尝试通过将当前的Debian软件包版本与debian / preinst维护脚本中当前安装的版本进行比较来实现此目的。理想情况下,我想提供警告和(继续y / n?)提示。

这个问题与How to get the newly-installed version within a Debian postinst script?密切相关。那个问题是在'09创建的,所以我不确定是否适合在这个问题中添加我的问题。

对旧问题的回答是,“为什么你不能简单地在软件包中硬编码?”

我的回答是我不想在另一个位置管理该版本。该版本已经在debian / changelog中,而Python模块的 init .py脚本已经作为版本。这个逻辑也需要复制到我们正在维护的其他几个内部Debian软件包中。理想情况下,我希望通过删除构建Debian软件包的过程中的步骤来尽可能简单。

我已经阅读了相关的Debian文档http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html,虽然我可以获得旧版本但是无法获得我当前正在安装的版本。

我在debian / preinst中回显了env,它确实提供了一个包含版本的环境变量......:SUDO_COMMAND = / usr / bin / dpkg -i python-mypkg_1.9.3-2_all.deb。我应该能够以这种方式获得版本,但我不确定我是否可以依赖此变量存在于此软件包将部署到的每个发行版中。这样做也似乎是一种黑客行为。

我知道dpkg-parsechangelog,这是一个很棒的工具!,但它只在解压缩包时才有效。它在文档中也清楚地说明了这一点。

我还尝试使用Python pckg_resources模块来发现版本:pckg_resources.require(“mypkg”)[0]。版本。如果模块尚未安装在目标机器上,它将失败 - 这绝对有意义。

似乎应该在debian / control文件中有一个选项,或者我可以使用一些工具来防止这种情况发生而不重新发明轮子。谢谢大家!

2 个答案:

答案 0 :(得分:0)

我将使用SUDO_COMMAND。这至少可以使我不必将版本硬编码到preinst维护脚本中(它已经存在于其他两个位置!!)。这是一个极端的黑客攻击,但我找不到任何有用的文档可能会让我采用更明智的方法。

仅供参考,env变量SUDO_COMMAND似乎存在于我使用过的每个Debian环境中。

答案 1 :(得分:0)

尝试:

spring.jpa.hibernate.ddl-auto: none