我需要使用 构建一个 debian 包sbuild
。该包具有无法自动解析的依赖项 - 特别是依赖项指向已经有可用新版本的版本,但我需要坚持使用旧版本。结果,这些依赖项的安装失败,整个构建也失败。有人告诉我,我无法通过debian/control
其中指示所需版本来解决它(请参阅:https://askubuntu.com/questions/1379523/install-specific-package-version-through-meta-package)。
我注意到我仍然可以使用 手动安装这些依赖项apt-get install dep1=x.y.z
,因此只是包构建期间的依赖项解析机制阻止我安装正确版本的依赖项。如何插入自定义 bash 命令,该命令将在解析并解析依赖项apt-get
之前将依赖项安装在所需版本中?debian/control
我正在考虑覆盖,但也许文件debian/rules
中有不同的位置用于此类自定义?debian/*
答案1
正如您所确定的,严格的版本依赖性在debian/control
这里无济于事。
为了回答标题中的一般问题,Debian 软件包构建中的 shell 命令进入debian/rules
或从那里调用的文件中。例如,在debian/rules
(使用dh
样式)中:
override_dh_auto_build:
# your shell commands here ...
dh_auto_build
# ... or here
现在可以使用各种覆盖样式(execute_after_...
等等)。
但是,这在这种情况下也无济于事,因为不允许包构建在构建期间安装(或删除)其他包。debian/control
(或者更确切地说,源包中的处理结果debian/control
)应该完全指定构建依赖项;然后构建工具( pbuilder
、等)可以满足这一点sbuild
,并且然后构建开始。当包中的任何内容有机会运行任何命令时,为时已晚。
据我所知,使用单独的包处理您的场景的唯一方法是创建一个存储库包含您需要的特定版本的包,然后使其在构建上下文中可用。这还将提供安装构建生成的二进制包所需的运行时依赖项。
另一种方法是提供您的依赖项,IE包括他们的内容在您的源包中(并适当调整构建)。