Quick fix
# One-liner: locate the bad entry (look at the Err: line), curl-verify it, remove/comment it, then re-update
grep -r "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/ && curl -sI <URIs>/dists/<suite>/Release
What you will run into
apt-get update / apt-get install reports a broken source: Err:2 https://deb.debian.org/debian nonexistent-suite Release 404 Not Found, ending with E: The repository ... does not have a Release file. and exit code 100. You changed nothing, so why did it suddenly break?
Most likely one of the sources is down - apt-get update is the "fetch the index" stage, and any single failed source makes the whole command exit 100, even when the others are fine.
Why this happens
apt reports 404 + no Release file when the repository a source points to no longer serves dists/<suite>/Release:
| Scenario | Notes |
|---|---|
| Source URL dead | Project stopped maintaining the deb repo, domain expired, path changed |
| Suite name typo / nonexistent | bookworm written as bookworm2, or pointing at an unreleased/archived suite |
| Copied from an old tutorial | Repo deleted after publication - the most common way people get hit |
| Mirror partially synced | main present but universe missing, or an interrupted fetch left a half-done tree |
apt's addressing model is path composition of "source entry → suite → component → Release/index files": deb http://host/dists/<suite>/<component> maps to dists/<suite>/Release (plus Packages/Sources indexes).
404 + "no Release file" means the server no longer serves files at that path — it is not "bad network", it is "the addressed target does not exist".
Partially-synced mirrors, a mistyped suite name, and a decommissioned repo all land on the same layer.
Deterministic takeaway: the URL in the error is exactly what apt requested — verify existence manually with curl -I; a 404 during apt-get update affects only that source's component while others keep working (so "some sources broken" is the norm);
the fix is editing the source entry (/etc/apt/sources.list or /etc/apt/sources.list.d/), not re-running update repeatedly; fixed diagnostic: curl -I <error URL> returning 404 = dead source;
200 = check local list cache/proxy.
Step by step
1. Find which source is down — Required
Read the Err: lines in the full update output (repo URL + suite), then cross-check the entries:
grep -r "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/
(For deb822 format, look at the Types:/URIs:/Suites: lines.)
2. Verify the source is actually reachable — Required
curl -sI <URIs>/dists/<suite>/Release
200 = the source is fine; 404 = the entry is dead.
3. Remove or comment out the bad entry — Required
rm /etc/apt/sources.list.d/bad.list
Or comment it out, then re-run apt-get update.
4. Switch to a valid source — Required
Ubuntu official: http://archive.ubuntu.com/ubuntu/; Debian: https://deb.debian.org/debian/; in CN, switch to Tsinghua/Aliyun mirrors (same path structure, suite names unchanged).
Do not use sources from old tutorials - curl-verify before writing them in.
5. Dead PPA / too-old release — Required
When an old PPA is cleaned up by Launchpad it 404s - delete the matching /etc/apt/sources.list.d/<ppa>.list; after a release reaches EOL the official sources retire, so upgrade the release or use old-releases.ubuntu.com (temporary only).
How to confirm it works
update is fully green (measured output shape):
apt-get update
-> no Err: lines, exit 0 (measured apt-exit=0 after removing the bad source)Other environments
| Environment | Notes |
|---|---|
| Local 404 server | Same Err: ... 404 File not found + exit 100 (measured repro) |
| Mirror expired | Switch to Tsinghua/Aliyun; suite names unchanged |
| PPA discontinued | Delete the matching .list |
| EOL release | Upgrade, or old-releases (temporary) |
| Exit code 100 | Any single failed source does this; locate the Err: line first |
Symptom
apt-get update / apt-get install reports a broken source:
Err:2 https://deb.debian.org/debian nonexistent-suite Release
404 Not Found [IP: 151.101.90.132 443]
E: The repository 'https://deb.debian.org/debian nonexistent-suite Release' does not have a Release file.
Signs: Err:N ... 404 Not Found (or File not found) during the update stage, finally E: The repository ... does not have a Release file; apt-get exit code 100. Common: third-party custom deb source went offline/its path changed, PPA discontinued (old PPAs cleaned from Launchpad), mirror expired / component name typo, retired official sources of old Ubuntu releases (e.g. the old archive.ubuntu.com paths from the 12.10 era), leftover bad entries in /etc/apt/sources.list.d/.
Cause
When the repository a source (sources.list / sources.list.d/*.sources) points to no longer serves dists/<suite>/Release, apt reports 404 + no Release file. Possible causes:
- The source URL itself is dead (project stopped maintaining the deb repo, domain expired, path changed);
- Suite name typo or nonexistent (e.g.
bookwormwritten asbookworm2, or pointing at an unreleased/archived suite); - The source came from an old tutorial and the repo was deleted after publication (the most common way people get hit);
- The mirror only synced part of the components (
mainpresent,universemissing), or a network interruption left a half-done tree.
Note: apt-get update is the "fetch the index" stage - any single failed source makes the whole command exit 100, even when the others are fine.
Solution
- Locate which source is down: read the
Err:lines in the full update output (repo URL + suite), thengrep -r "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/(for deb822, look at theTypes:/URIs:/Suites:lines) to cross-check entries. - Verify the source is actually reachable:
curl -sI <URIs>/dists/<suite>/Release- 200 means the source is fine, 404 means the entry is dead. - Remove or comment out the bad entry: move the dead .list/.sources out of the directory (
rm /etc/apt/sources.list.d/bad.list) or comment it out, then re-runapt-get update. - Switch to a valid source: Ubuntu official
http://archive.ubuntu.com/ubuntu/(Debian:https://deb.debian.org/debian/); in CN, switch to Tsinghua/Aliyun mirrors (same path structure, suite names unchanged); don't use "sources from old tutorials" - curl-verify before writing them in. - Discontinued PPA: old PPAs added via
add-apt-repository404 after Launchpad cleanup - just delete the matching/etc/apt/sources.list.d/<ppa>.list. - Too-old release: after EOL the official sources retire (404) - upgrade the release or use
old-releases.ubuntu.com(temporary only).
Verification Evidence
- Local measurement (2026-08-29, WSL Ubuntu, apt 2.x, isolated temp sources via
-o Dir::Etc::sourcelist=..., system config untouched): - Bad source 1:
deb https://deb.debian.org/debian/ nonexistent-suite main-> update reportsErr:2 ... nonexistent-suite Release 404 Not Found,E: does not have a Release file, apt-exit=100; - Bad source 2: local 404 server (
python3 -m http.serverreturning only 404) -> sameErr: ... 404 File not found+ exit 100, identical to real "mirror expired / source dead" - reproducible locally; - Fix path: switch to the host's valid mirror (
archive.ubuntu.com+ correct suite) -> update normal, apt-exit=0. - Source comparison: 1BAH/fenrir#10 (custom deb source 404 can't install), amandeepg/notifyosdconfig#1 (old PPA 404) - same phenomenon.
Evidence details kept locally (2026-08-29)
Applicable tools (1)
This problem is linked from the tool pages below — reachable from either side.
aptBundled solutions (combos)
This problem is part of the following verified bundles.
Source & evidence
← Coding Agents & Terminal domain | Problem Catalog Experience | Facing another issue? Go to the Helpdesk