无法获取 jessie backports 存储库

use*_*345 195 debian repository

我使用 docker 镜像作为我自己开发的基础,在其 Dockerfile 中添加 jessie backports 存储库并使用它来安装依赖项。此映像使用以下命令添加存储库:

echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

问题是从 backports 存储库中获取包现在失败并出现以下错误(以前可以使用):

W: Failed to fetch
http://ftp.debian.org/debian/dists/jessie-backports/main/binary-amd64/Packages
404  Not Found

W: Failed to fetch
http://deb.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages
 404  Not Found
Run Code Online (Sandbox Code Playgroud)

我查看了那台服务器,那里确实不存在这些路径。

我试图在 Debian backports 站点上弄清楚这个特定的存储库是否仍然可用,但我没有发现任何迹象表明它已被弃用或类似的东西。

这是存储库的临时问题,还是 jessie-backports 存储库不再可用?如果这不是临时问题,在不升级到较新的 Debian 稳定版本的情况下,我有哪些选择可以使用这个或等效的存储库?

Ste*_*itt 231

Wheezy 和 Jessie 最近从镜像网络中删除,因此如果您想继续获取 Jessie 向后移植,则需要archive.debian.org改用:

deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main
Run Code Online (Sandbox Code Playgroud)

(需要禁用有效性检查,因为存储库不再更新。Jessieapt不支持该check-valid-until标志,有关详细信息,请参阅inostia 的答案,以及此答案中的配置摘要。)

jessie-updates库已被删除:所有的更新都被合并到主库中,并且不会有进一步的非安全更新。因此jessie-updates,需要删除对insources.listsources.list.dfiles 的任何引用。在 LTS 支持的架构上,安全存储库中将继续提供安全更新,直到 2020 年 6 月 30 日。

由于您正在构建容器映像,因此我强烈建议将其改为基于 Debian 9 (Stretch)。要继续使用 Debian 8 (Jessie),您的存储库最终应该看起来像

deb http://cdn-fastly.deb.debian.org/debian/ jessie main
deb-src http://cdn-fastly.deb.debian.org/debian/ jessie main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

deb http://archive.debian.org/debian jessie-backports main
deb-src http://archive.debian.org/debian jessie-backports main
Run Code Online (Sandbox Code Playgroud)

(没有jessie-updates存储库)。

您还需要禁用有效性检查/etc/apt/apt.conf(这将适用于所有存储库):

Acquire::Check-Valid-Until "false";
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用:``` E:http://archive.debian.org/debian/dists/jessie-backports/InRelease 的发布文件已过期(自 34d 20h 7min 12s 起无效)。不会应用此存储库的更新。`` (5认同)
  • @Ian 不,安全更新是在`security.debian.org` 上提供的,而不是通过向后移植或更新提供的。不会再有任何非 LTS 稳定更新,所以 `jessie-updates` 在主镜像网络上不再有用,也不会再有任何向后移植,所以 `jessie-backports` 也是如此. (2认同)
  • 发现后续的 `apt` 命令似乎也需要 `-o Acquire::Check-Valid-Until=false`(根据 https://unix.stackexchange.com/a/45973/186565)以避免过期错误。 (2认同)
  • @sumitsu 谢谢,在 `apt.conf` 中设置它也应该起作用(请参阅我的更新)。 (2认同)

小智 51

在尝试了@inostia 和 @Stephen Kitt 建议的解决方案后,我仍然收到以下错误:

W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages  404  Not Found

E: Some index files failed to download. They have been ignored, or old ones used instead.
Run Code Online (Sandbox Code Playgroud)

我发现它可以通过deb http://deb.debian.org/debian jessie-updates main/etc/apt/sources.list.

我在我的 Dockerfile 中得到了以下代码片段:

RUN echo "deb [check-valid-until=no] http://cdn-fastly.deb.debian.org/debian jessie main" > /etc/apt/sources.list.d/jessie.list
RUN echo "deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
RUN sed -i '/deb http:\/\/deb.debian.org\/debian jessie-updates main/d' /etc/apt/sources.list
RUN apt-get -o Acquire::Check-Valid-Until=false update
Run Code Online (Sandbox Code Playgroud)

  • 这是你的 `sed` 命令的更新版本,它对我有用: `sed -i '/deb http:\/\/\(deb\|httpredir\).debian.org\/debian jessie.* main /d' /etc/apt/sources.list` (6认同)

ino*_*tia 36

这发生在我配置一个使用 Debian“Jessie”的 Vagrant 机器上。

按照Stephen Kitt 的回答,切换到 archive.debian.org 对我有用,但我必须将它添加到/etc/apt/sources.list.d/jessie-backports.list,而不是/etc/apt/sources.list.

我将以下行添加到provision.sh

echo "deb http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
Run Code Online (Sandbox Code Playgroud)

然后我也遇到了一个安全错误 running apt-get update

按照如何解决本地镜像上的“发布文件过期”问题,这修复了该错误:

apt-get -o Acquire::Check-Valid-Until=false update
Run Code Online (Sandbox Code Playgroud)

或者,要永久禁用检查,请将其添加到provision.sh

echo "Acquire::Check-Valid-Until \"false\";" > /etc/apt/apt.conf.d/100disablechecks
Run Code Online (Sandbox Code Playgroud)

然后,您可以在apt没有-o标志的情况下运行所有命令。

  • 禁用适用于所有存储库的有效性检查不是很危险吗? (2认同)

小智 5

对于那些使用 NodeJS 和较旧的 docker 镜像基础的人。我有一些冻结的图像,其中包含用于编译额外库的旧源代码。

上下文:如果您想在 docker 构建期间安装 python,则在构建映像期间(过去 24 小时内)会遇到此问题,因为它无法在 docker 构建期间获取依赖项。

我尝试了这篇文章中的存档路径建议,但无法通过 404。(也来自今天的 archive.debian.org 位置)

解决方案:我最终切换到最新的节点容器版本(已经预装了 python 库),并更新了 json 包中的一些库(现在还包括以前需要 pythyon 的二进制库),使问题变得过时。

最后,更新容器堆栈的基础映像(节点:最新)似乎是解决问题的最直接途径。

警惕包含二进制依赖项的陈旧映像堆栈,它们可能需要一段时间才能更新核心操作系统层。

  • 对于 Docker Node 镜像,另一种方法是使用 `-stretch` 镜像:`node:<version>-stretch` (2认同)