🍥

古いDebian GNU/Linuxでapt使用時にsources.listに記載のURLが404 Not Foundと言われる時の解決

2024/03/06に公開
1

これは何?

Dockerで古いPHPを動かさないといけなくて、Debianのバージョンが古い(具体的には、jessie)コンテナを使用しています。
いつもとは違う環境でdocker imageをpullして、apt update などすると、404 Not Foundとなってしまう場合があります。
さっきこうなって、一応解決できたので、備忘録としてメモ

根治対応

そもそもPHPのバージョン上げて、Debianのバージョンも上げるのがよろし

Debianのdebパッケージ配布場所について

Debianのパッケージ管理システムaptは、/etc/apt/sources.listに記載されたURLにアクセスし、パッケージを取得します。
デフォルトのURLは、deb.debian.orgもしくは、security.debian.orgになるようです。バージョンがjessieの話をしているので、最新版だと違うかも(未確認)

どうも負荷分散のためか、古いバージョンは、上記URLのサーバーには置かれなくなるらしく、archive.debian.orgに移るようです。(Debian使いには常識なのかな...)

上記を踏まえた対応

なので、/etc/apt/sources.listに記載のURLドメインを変更すれば良いというだけでした。

Dockerfileであれば、下記のような記載をapt実行前に加えます(テキトーですが)

RUN sed -i 's/deb.debian.org/archive.debian.org/g' /etc/apt/sources.list
RUN sed -i 's/security.debian.org/archive.debian.org/g' /etc/apt/sources.list

まとめ

パッとしらべて、パッとやっちゃったので、不正確なことや誤りがあるかもしれません。何かあれば、コメントかなにかでツッコんでくれたら嬉しいです。

追記

置き換えるより、下記のように追記の方がよさそうでした(下記は、Debian jessieの例です)

RUN echo "deb http://archive.debian.org/debian/ jessie main" > /etc/apt/sources.list \
    && echo "deb http://archive.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list

Discussion

Hideki YamaneHideki Yamane

どうも負荷分散のためか

負荷ではなく、ミラーサーバーの容量確保などが主目的ですね。
リポジトリを提供しているのは「ボランティア」なサーバー群が多く、簡単にストレージ容量を数TBも拡張できませんので。

あと、サポートが終了したものを置いておくのも良くない、という判断もあります。