2021-10-06

E: Unable to locate package XXXXX

unable_to_locate_package_xxxxx.md

概要

Linux でパッケージを apt-get install するとき、以下のようなエラーが発生することがありました。

E: Unable to locate package XXXXX

解決方法としては、以下を試してみてください。

  1. apt update or apt-get update してから再試行する
  2. パッケージが存在するかを確認する

このうち、1. は検索するといっぱい出てくるので割愛します。そもそも説明するほどでもなく、実行するだけです。

一方、2. については一言で書くと元も子もないのですが、ここにたどり着くのが結構大変だったので、メモを残しておきます。

前提状況

Docker Compose でビルドしようとしたとき、以下のような Dockerfile で、以前はビルドできていたものが、本題のエラーを吐いていました。

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8 RUN apt-get update && \ apt-get install -y --no-install-recommends postgresql-client-11

ちなみに、このエラーは postgresql-client-13 にすることで解決しました。いつの間にか 11 が使用できなくなっていたようです。

使用する PostgreSQL の Docker イメージも、バージョンを合わせて postgres:13.4-alpine にしました。

Linux のバージョンやコードネームを確認する

まず、以下のようなコマンドで、使用している Linux のバージョンやコードネームを確認します。

$ cat /etc/lsb-release # Ubuntu $ cat /etc/os-release # Debian

自分の場合、どのディストリビューションか分からなかったので、以下のようにして確認しました。

  • Dockerfile のエラーを吐いた行を含めてコメントアウトして、できるだけ小さい構成でビルドして起動する
  • Docker コンテナに入って、「Linux バージョン 確認」で検索して出てきたコードを片っ端から実行する

ちなみに、Debian GNU/Linux 11 (bullseye) でした。

ディストリビューションのパッケージを検索する

使用している Linux のディストリビューションの公式ページで、パッケージ検索ページを開きます。

その他のディストリビューションでも「Debian パッケージ」みたいに検索すると、出てくると思います。

あとは、インストールに失敗したパッケージ名で検索して、そもそも存在するのか (typo も確認) と、前項で確認したバージョンで使用できるかを確認してください。

自分の場合、Debian で postgresql-client- で検索すると、以下のような感じでした。

  • postgresql-client-11
    • buster (oldstable)
  • postgresql-client-13
    • bullseye (stable)
    • bookworm (testing)
    • sid (unstable)

ということで、11 は使用できず、13 が使用可能であることが分かりました。

0 件のコメント:

コメントを投稿

ラビット・チャレンジ - Stage 3. 深層学習 前編 (Day 1)

提出したレポートです。 絶対書きすぎですが、行間を埋めたくなるので仕方ない。 Rabbit Challenge - Stage 3. 深層学習 前編 (Day 1) 0. 深層学習とは何か この講義(Day1)の内容では、ニューラルネットワークを用いた学習方法として、順...