我想知道 apt 在发布同一软件包的多个主要版本时的行为是什么。例如,如果我有一个名为 的软件包foo
,其最新版本为1.0.0
,并且我发布了版本2.0.0
,然后发布了版本,那么在运行和1.1.0
时哪个会被视为最新软件包:最后发布的软件包(在本例中为)还是版本号最高的软件包(在本例中为)?sudo apt update
sudo apt install foo
1.1.0
2.0.0
答案1
默认情况下,apt
下载版本号最高的包(即使这不是最后发布的版本)。
然而,如果两个包都在单独的存储库中,则可以使用 安装早期版本sudo apt install foo=1.1.0
。
之后,您可以阻止该特定包升级到版本 2.0.0 sudo apt-mark hold foo
。
(要恢复此行为,你必须取消保持包裹)。
答案2
它基于按顺序评估的几个条件:
- 软件包优先级。优先级越高,该特定软件包将被优先考虑,即使这意味着“降级”。如果两个软件包的优先级相同,则将继续
- 纪元。冒号前的数字,通常用于表示上游版本控制的变化。如果未指定纪元,则假定为 0。
- 上游版本。是软件包的裸版本,通常位于连字符之前。它的评估方式与其他使用点的版本方案相同。每个值都按位置评估,按点划分的组从左到右进行评估。确切的算法是Debian 政策文档中描述。
- Debian 的版本。连字符后。与上游版本相同。
换句话说,它将始终尝试安装更高的版本号,除非您包含不同的时代或使用优先级固定它。dpkg 将忽略所有这些,只确保依赖关系得到满足。