120

I'm using a docker image as a base for my own development that adds the jessie backports repository in its Dockerfile and uses that to install a dependency. This image uses the following command to add the repository:

echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list

The problem is that fetching packages from the backports repository now fails with the following error (this used to work previously):

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

I looked on that server, and those paths are indeed not present there.

I tried to figure out on the Debian backports site whether this particular repository should still be available, and I didn't find any indication that this was deprecated or something like that.

Is this a temporary issue with the repository, or is the jessie-backports repository not available anymore? And if this is not a temporary issue, what options do I have to use this or an equivalent repository without upgrading to the newer Debian stable version?

129

Wheezy and Jessie were recently removed from the mirror network, so if you want to continue fetching Jessie backports, you need to use archive.debian.org instead:

deb [check-valid-until=no] http://archive.debian.org/debian jessie-backports main

(Validity checks need to be disabled since the repository is no longer being updated. Jessie’s apt doesn’t support the check-valid-until flag, see inostia’s answer for details, and the configuration summary further down in this answer.)

The jessie-updates repository has been removed: all the updates have been merged with the main repository, and there will be no further non-security updates. So any references to jessie-updates in sources.list or sources.list.d files need to be removed. Security updates will continue to be provided, on LTS-supported architectures, in the security repository, until June 30, 2020.

Since you’re building a container image, I highly recommend basing it on Debian 9 (Stretch) instead. To stay on Debian 8 (Jessie), your repositories should end up looking like

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

(without the jessie-updates repository).

You’ll also need to disable validity checks in /etc/apt/apt.conf (which will apply to all repositories):

Acquire::Check-Valid-Until "false";
  • 1
    Sorry, my answer was perhaps not all that clear; the line I gave was only for backports. jessie-updates doesn’t exist any more, so you should delete that altogether, and the Jessie security updates are still on security.debian.org. – Stephen Kitt Mar 26 at 15:15
  • 2
    @Ian no, security updates are provided on security.debian.org, not through backports or updates. There won’t be any more non-LTS stable updates, so jessie-updates is no longer useful on the main mirror network, and there won’t be any more backports either, so the same goes for jessie-backports. – Stephen Kitt Mar 26 at 15:57
  • 1
    Not working for me: ``` E: Release file for archive.debian.org/debian/dists/jessie-backports/InRelease is expired (invalid since 34d 20h 7min 12s). Updates for this repository will not be applied. ``` – Avi Kivity Mar 26 at 16:34
  • 2
    Have found that subsequent apt commands also seem to require -o Acquire::Check-Valid-Until=false (per unix.stackexchange.com/a/45973/186565) in order to avoid the expiration error. – sumitsu Mar 26 at 21:01
  • 2
    @sumitsu thanks, setting that in apt.conf should work too (see my update). – Stephen Kitt Mar 26 at 22:39
34

After trying solutions suggested by @inostia and @Stephen Kitt I was still getting the following error:

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.

I figured out that it can be solved by removing the line deb http://deb.debian.org/debian jessie-updates main from /etc/apt/sources.list.

I ended up with the following snippet in my 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
  • 1
    I had the same issue as you did and your snippet worked for me! – cafemike Mar 27 at 14:45
  • 1
    I had to teak sed part as In my case docker image (postgres) was using httpredir.debian.org instead of deb.debian.org. – harrybvp Mar 27 at 22:19
  • 1
    Thank you!!! I've been struggling for two days to fix my Dockerfile after the Debian jessie change, I pasted your snippet in and it's all working again. – wpjmurray Mar 28 at 15:57
  • sorry, but still same issue .... – user1722245 Mar 28 at 16:31
  • 5
    Here is an updated version of your sed command that did the trick for me: sed -i '/deb http:\/\/\(deb\|httpredir\).debian.org\/debian jessie.* main/d' /etc/apt/sources.list – speedplane Mar 29 at 0:26
20

This happened to me provisioning a Vagrant box that was using Debian "Jessie".

Following Stephen Kitt's answer, switching to archive.debian.org worked for me, but I had to add it to /etc/apt/sources.list.d/jessie-backports.list, rather than to /etc/apt/sources.list.

I added the following line to provision.sh:

echo "deb http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list

I then also got a security error running apt-get update.

Following How to work around "Release file expired" problem on a local mirror, this fixed that error:

apt-get -o Acquire::Check-Valid-Until=false update

Alternatively, to disable checks permanently, add this to provision.sh:

echo "Acquire::Check-Valid-Until \"false\";" > /etc/apt/apt.conf.d/100disablechecks

Then you can run all apt commands without the -o flag.

3

For those using NodeJS with older docker image foundations. I had some frozen images that had these older sources for the compilation of extra libs.

Context: if you wanted to install python during a docker build you ran into this issue during a build of the image (within the last 24 hours) as it failed to source dependencies during a docker build.

I tried the archive path recommendations in this post but couldn't get past the 404's. (also coming from the archive.debian.org location as of today)

Solution: I ended up switching to the latest container version of node (which has python libs already pre-installed) that, and updating some libs in the package json (which now also include binary libs that used to want pythyon) made the issue obsolete.

In the end, updating the foundation image for the container stack (node:latest) seemed to be the most straight-forward path to resolution.

Be wary of stale image stacks with binary dependencies included, they'll probably take a while to update the core OS layer.

  • Hi Glen, thanks for posting. I think I'm running into same issue in dockerfile as I have "RUN apt-get update -y && apt-get install supervisor python python-dev curl -y --force-yes". I'm using FROM node:6.11.2, what must I do to get past this? – Aaron Apr 2 at 9:07
  • 1
    For Docker Node images, an alternative is to use the -stretch images: node:<version>-stretch – lukeaus Apr 9 at 5:15

protected by Jeff Schaller Mar 27 at 13:01

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.