![安装特定版本的 debian 软件包](https://linux22.com/image/173562/%E5%AE%89%E8%A3%85%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%AC%E7%9A%84%20debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85.png)
使用包管理器(例如npm
(对于 javascript)或pip
(对于 python))安装包教会我要非常具体地了解包版本,以避免我正在编写的软件中出现奇怪的行为甚至意外的错误。
我知道apt
包管理器是一种非常不同的动物,但我认为非常精确不会有什么坏处。我错了!
看起来直到几天前以下命令还在工作:
我创建了一个脚本,以“步骤”安装特定版本的 apt 软件包。步骤的一个示例如下:
apt-get install git=1:2.20.1-2+deb10u1
但现在我得到:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '1:2.20.1-2+deb10u1' for 'git' was not found
为了完成安装,我需要安装以下版本:
apt-get install git=1:2.20.1-2+deb10u3
必须有一种方法可以使用相同的脚本在不同的计算机上安装相同的软件,对吗?或许:
apt-get install git=1:2.20.1-2*
请帮助以正确的方式完成此操作。
提前致谢。
答案1
您提到的工具之间,或者更确切地说,它们提供访问的存储库之间存在根本的理念差异。
由 寻址的存储库npm
,pip
提供对全部他们分发的软件包的发布版本。作为依赖这些包的项目的开发人员,您可以选择适合您的项目的版本 - 无论是范围、特定版本还是“最新”,都由您决定你要为这个选择承担责任。
所寻址的存储库apt
(如 Debian 等发行版中所使用的那样)仅提供对其所分发的软件包的一小部分(在大多数情况下为一个)版本的访问。发行版的开发人员为您选择版本,并承担该选择的责任。这个选择伴随着一些承诺,或者至少是意图;具体来说,当您使用大多数基于版本的发行版时,安装给定的软件包将始终在发行版的整个生命周期中提供相同的功能。
因此,由于您使用的是 Debian 10,因此适当的咒语是
apt install git
git
在 Debian 10 的整个生命周期中,这将安装具有相同功能的版本。唯一的更改将解决严重的错误和安全问题(情况就是这样git
:您列出的两个版本之间的更改解决了两个安全问题)。
错误当然会发生,但一旦发生,发行版就会严肃对待。如果您提交了一个错误,描述了由给定版本的发行版中的软件包升级引起的回归,我希望它会在短时间内得到处理。 (事实上,给定的软件包在稳定版本中进行了升级,这意味着有人在掌控方向盘。)
(如果你真的想承担所有责任,你可以使用快照.debian.org安装特定版本的软件包。)