我使用 docker 映像作为我自己的开发的基础,在其 Dockerfile 中添加 jessie backports 存储库并使用它来安装依赖项。该映像使用以下命令添加存储库:
echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
问题是从向后移植存储库获取包现在失败并出现以下错误(这以前可以正常工作):
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
我查看了该服务器,这些路径确实不存在。
我试图在 Debian backports 网站上弄清楚这个特定的存储库是否仍然可用,但我没有发现任何迹象表明它已被弃用或类似的东西。
这是存储库的临时问题,还是 jessie-backports 存储库不再可用?如果这不是一个临时问题,我必须有哪些选项来使用这个或等效的存储库而不升级到较新的 Debian 稳定版本?
答案1
Wheezy 和 Jessie 最近已从镜像网络中删除,所以如果你想继续获取 Jessie 向后移植,你需要使用archive.debian.org
:
deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main
(由于存储库不再更新,因此需要禁用有效性检查。Jessie'sapt
不支持该check-valid-until
标志,请参阅伊诺斯蒂亚的回答有关详细信息,以及本答案中进一步的配置摘要。)
存储jessie-updates
库已被删除:所有更新已与主存储库合并,并且不会有进一步的非安全更新。因此,任何对jessie-updates
insources.list
或文件的引用都sources.list.d
需要删除。安全更新将继续提供,在 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
(没有jessie-updates
存储库)。
您还需要禁用有效性检查/etc/apt/apt.conf
(这将适用于所有存储库):
Acquire::Check-Valid-Until "false";
答案2
在尝试了@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.
我发现可以通过删除该行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
答案3
对于那些使用 NodeJS 和较旧的 docker 镜像基础的人。我有一些冻结的图像,其中包含用于编译额外库的旧源代码。
上下文:如果您想在 docker 构建期间安装 python,则在构建映像期间(过去 24 小时内)会遇到此问题,因为它无法在 docker 构建期间获取依赖项。
我尝试了这篇文章中的存档路径建议,但无法通过 404。 (也来自今天的 archive.debian.org 位置)
解决方案:我最终切换到最新的节点容器版本(已经预装了 python 库),并更新了 json 包中的一些库(现在还包括以前需要 pythyon 的二进制库),使问题变得过时。
最后,更新容器堆栈的基础映像(节点:最新)似乎是解决问题的最直接途径。
警惕包含二进制依赖项的陈旧映像堆栈,它们可能需要一段时间才能更新核心操作系统层。
答案4
如果没有任何效果,请使用包含这些错误的面板:
Unable to correct missing packages.
WARNING: The following packages cannot be authenticated!
W: GPG error
W: An error occurred during the signature verification.
Updates for this repository will not be applied.
E: Failed to fetch
E: Aborting install
考虑一个全面发行升级和源列表清理以保存您的机器。这些笔记只需要几分钟,但最糟糕的是。
第一次访问/etc/apt/sources.list.d/
,并删除所有内容。 (进行备份)。
编辑/etc/apt/sources.list
,只保留这一行:
deb http://ftp.us.debian.org/debian stable main contrib
然后,以 root 身份运行:
aptitude update
aptitude full-upgrade
确认各种消息。然后尝试:
sudo apt update
应该不会引发任何错误,只需确认:
Reading package lists... Done
一些不同的套餐可以筹集一些冲突,在这些情况下,使用一次,这将解决各种冲突:
sudo aptitude -y install packagename otherpackagename
可能的其他错误:
W: There is no public key available for the following key IDs:
*648ACFXXXXX2FAB138*
要解决此问题,请按指定导入公钥:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFXXXXX2FAB138
您可能会收到一条非常罕见的消息!
A reboot is required to replace the running dbus-daemon.
Please reboot the system when convenient.
您可能会遇到旧内核和 libc 的问题:
Kernel must be upgraded
This version of the GNU libc requires kernel version 3.2 or later. Please upgrade your kernel
不要将这些注释应用于公共服务器。始终追求最后的 LTS。
https://www.debian.org/doc/manuals/debian-faq/ch-uptodate.en.html