使用apt安装任意版本软件包的推荐方法是什么?

Modified on: Thu, 18 Apr 2019 05:20:03 +0800

问题:

我需要一种在Debian系统上安装某些软件包的特定固定版本的方法。 snapshot.debian.org似乎提供了实现此目的的方法,但即使在我的apt-sources中添加快照之后也是如此我无法apt-get install该快照存档中的某些特定版本的软件包。

问题:

从Debian快照存档安装特定软件包版本的官方或“正确”方法是什么?

背景&我试过的:

让我们使用Debian8 Jessie和3.16.x内核二进制文件作为我们的例子。在撰写本文时,Jessie发布的内核是3.16.43-2 + deb8u5。说我想安装3.16.43-2 + deb8u4。

我首先在debian快照档案中搜索我想要的版本(http://snapshot.debian.org/binary/linux-image-3.16.0-4-amd64/)并点击我正在寻找的内核的确切版本,我来http://snapshot.debian.org/package/linux/3.16.43-2%2Bdeb8u4/#linux-image-3.16.0-4-amd64_3.16.43-2:2b:deb8u4 一>

从那里,我可以看到这个包是“在2017-09-20 22:12:21看到debian-security”和“在2017-10-08 16:31:52看到debian”。我决定使用前者并依赖于debian-security快照20170920T221221Z。< / p>

按照snapshot.debian.org首页上的说明,我将以下内容添加到我的/ etc /apt/sources.list:

deb http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main
deb src http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates main

然后我运行apt-get -o Acquire::Check-Valid-Until=false update并看到更新(似乎)成功完成。

我认为这将允许我现在安装所需的内核版本,但只知道两个安装候选,3.16.43-2 + deb8u2和3.16.43-2 + deb8u5。没有+ deb8u4的迹象:

# apt-cache madison linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://security.debian.org/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u5 | http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.43-2+deb8u2 | http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
linux-image-3.16.0-4-amd64 | 3.16.7-ckt25-2 | http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages
     linux |  3.16.39-1 | http://cloudfront.debian.net/debian/ jessie-backports/main Sources

# apt-cache policy linux-image-3.16.0-4-amd64
linux-image-3.16.0-4-amd64:
  Installed: 3.16.43-2+deb8u5
  Candidate: 3.16.43-2+deb8u5
  Version table:
     3.16.43-2+deb8u5 0
        500 http://security.debian.org/ jessie/updates/main amd64 Packages
        500 http://snapshot.debian.org/archive/debian-security/20170920T221221Z/ jessie/updates/main amd64 Packages
 *** 3.16.43-2+deb8u2 0
        500 http://cloudfront.debian.net/debian/ jessie/main amd64 Packages
        100 /var/lib/dpkg/status
     3.16.7-ckt25-2 0
        500 http://cloudfront.debian.net/debian/ jessie-updates/main amd64 Packages

此外,如果我尝试指定并安装我想要的版本,它将返回“Not Found”:

# apt-get install linux-image-3.16.0-4-amd64=3.16.43-2+deb8u4
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '3.16.43-2+deb8u4' for 'linux-image-3.16.0-4-amd64' was not found

我已经设法通过下载.deb二进制文件和dpkg -i安装它来解决这个问题,但我更喜欢使用apt而不是curl'ing .debs并安装它们。任何人都可以解释我需要做什么才能apt-get install一个特定的包或至少解释为什么这不能按照我期望的方式工作到?

作者:devnall

最佳答案

这不是确切的科学,但是这里有一个可能的解释,说明为什么它不适用于这个特定的情况(它通常有效,当你没有跟踪目标变化太快时)。

给定的存储库通常只引用Packages文件中的一个软件包版本,例如,这个。这不是技术义务,例如deb https://dl.winehq.org/wine-builds/debian/ jessie main在其Packages文件中包含同一个包的多个版本,所有这些都可以通过apt检索-get,像你一样使用=,但Debian(TM)不会在同一个Packages文件中保留对多个版本的引用。

如果查看您要查找的软件包所在的实际目录,可以看到这两个版本都可用:

linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u4_amd64.deb
linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u5_amd64.deb

当deb8u5出现时,之前对deb8u4的引用消失了。 deb8u4 .deb可能仍然被其他存储库引用或者根本没有经历过一些“垃圾收集”。单击快照导航中的“prev change”仅导致deb8u3没有deb8u4或deb8u5。这意味着deb8u4和deb8u5之间的变化发生得太快,deb8u4的Packages文件可供下载,或者fast.debian.org在deb8u5替换它之前保存这个中间Packages文件。

中丢失了debian-security中的引用(以及相应的校验和和签名的Release文件)

再次尝试使用debian(而不是debian-security):

linux-image-3.16.0-4-amd64_3.16.43-2 + deb8u4_amd64.deb

使用相应的包。 xz文件。这个只有deb8u2的条目...并且只保留这个。新版本应该来自debian-security直到8.10发布,所以即使它们出现在池中,也只是因为snapshot.debian.org使所有版本都出现在同一个地方。

很抱歉,对于这个特定的软件包版本,我没有看到下载deb8u4的方法。即使可以从链接下载并且dpkg -i可以安装它,也无法验证下载的内容,因此应该避免使用。

注意:您的方法是正确的。您通常可以通过固定某些特定包的特定快照来完成它,允许apt-get自动选择它们(不需要=)并避免以后升级它们。那里有解释:https://wiki.debian.org/AptPreferences。持有它们也是有效的(dpkg --set-selectionsapt-mark hold)以避免升级。

作者:,A.B

相关问答

添加新评论