🍥
古いDebian GNU/Linuxでapt使用時にsources.listに記載のURLが404 Not Foundと言われる時の解決
これは何?
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
負荷ではなく、ミラーサーバーの容量確保などが主目的ですね。
リポジトリを提供しているのは「ボランティア」なサーバー群が多く、簡単にストレージ容量を数TBも拡張できませんので。
あと、サポートが終了したものを置いておくのも良くない、という判断もあります。