Debian 11 (bullseye)のEOLでdeb.debian.orgのsecurityリポジトリが404になった

  • Debian
  • Docker
  • APT

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何が起きたか

bullseye系タグのベースイメージでDockerビルドをしていたら、apt-get installでgitやlibpq-devの取得に失敗した。

E: Failed to fetch http://deb.debian.org/debian-security/pool/updates/main/g/git/git-man_2.30.2-1+deb11u5_all.deb 404 Not Found

apt-get update自体は通っているのに、実際のパッケージ本体の取得だけ404になるパターンだった。

原因

Debian 11 (bullseye)のLTSサポートが2026年8月31日で終了していた。それに伴ってdeb.debian.org/debian-security側のミラーから、bullseye-security向けの古いパッケージバージョンが削除されている。apt-get updateでインデックス(Release/Packages)自体は取れるのに、.debファイル本体だけ404になるのはこのため。

同時期にGitHub上でも同じ現象の報告が複数あった(mitmproxy、lldap、EvalAIなど)。ベースイメージをbullseye系タグで固定しているプロジェクトが軒並み引っかかっている状態だった。

対応

恒久対応としてはbookwormへの移行が筋だが、すぐには切り替えられない状況だったので、まずはAPTの向き先をarchive.debian.orgに切り替えて応急処置した。

RUN echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99no-check-valid-until \
&& sed -i \
-e 's/deb.debian.org/archive.debian.org/g' \
-e 's/ftp.jp.debian.org/archive.debian.org/g' \
-e '/security.debian.org/d' \
-e '/bullseye-security/d' \
-e '/bullseye-updates/d' \
/etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
libpq-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

ポイントは以下:

  • security.debian.orgとbullseye-security/bullseye-updatesを指す行はまるごと削除して、archive.debian.org上のメインリポジトリだけに寄せた。security/updates系の行を残したまま向き先だけ変えると、archive側でも同じように404になるケースがあった。
  • archive.debian.orgはRelease側の日付が古いままので、Acquire::Check-Valid-Until "false"を入れておかないとapt-get update側で弾かれることがある。

注意点

この対応をすると、bullseye-securityの更新が一切入らなくなる。つまり今後出るCVEには追従されなくなるので、あくまで暫定処置。実際、bookwormへの移行を進めている最中の繋ぎとして使っている。

未確認

archive.debian.org側のパス構造やミラー構成は、アーキテクチャやDebianのバージョンによってはsources.listのパス自体(bullseye-security → bullseye/updates等)を書き換えないと通らないケースもあるらしい。今回の環境では上記の書き換えだけで通ったが、他の環境で同じ対応が効くかは未確認。