E: Unable to locate package <name> означает, что apt поискал пакет в своём локальном индексе и ничего не нашёл под этим именем. Чаще всего индекс пуст или устарел: сначала выполните sudo apt update, потому что свежие образы и контейнеры часто поставляются без него. Если ошибка осталась, имя не подходит для вашего выпуска или пакет лежит в компоненте или репозитории, который у вас не подключён.
sudo apt update
sudo apt install <package>
# всё ещё не найден? спросите apt, что он знает на самом деле
apt-cache policy <package>
apt-cache search --names-only <part-of-the-name>С русской локалью та же ошибка выглядит как E: Невозможно найти пакет <name> — так переведена текущая версия apt и в Debian 12, и в Ubuntu 24.04. В старых переводах и форумных цитатах встречается вариант «E: Не удалось найти пакет». Причины и решения одни и те же.
Вы выполнили apt update?
Когда вы набираете apt install, apt ничего не ищет в интернете. Он ищет в индексе в /var/lib/apt/lists, а скачивает этот индекс только apt update. Образы Docker удаляют его, чтобы оставаться компактными, а образу сервера может быть несколько недель. Если в каталоге нет файлов Packages, apt не знает ни одного пакета:
ls /var/lib/apt/lists/ | grep -c Packages # 0 = индекса нет
sudo apt update # читайте вывод — настоящая проблема в ошибках здесьЧитайте, что печатает apt update. Код 404, строка does not have a Release file (в русской локали — не содержит файла Release) или Temporary failure resolving (Временная ошибка при разрешении) означают, что индекс не обновился, и каждая следующая установка упадёт точно так же. Если же команда останавливается на блокировке, значит, идёт фоновое обновление — разбор в статье Could not get lock /var/lib/dpkg/lock (англ.).
В Dockerfile выполняйте update и install в одном RUN:
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl ca-certificates \
&& rm -rf /var/lib/apt/lists/*Docker кеширует каждый слой. Если apt-get update стоит в отдельном RUN, то при следующем добавлении пакета берётся закешированный индекс многонедельной давности, и установка падает с «unable to locate» или с 404. Удаление списков в конце держит образ маленьким — и именно поэтому каждому следующему RUN нужен собственный update.
Правильное ли имя пакета для вашего выпуска?
Имена пакетов чувствительны к регистру, меняются от выпуска к выпуску и часто не совпадают с нужной вам командой. Проверьте, что есть в индексе:
apt-cache search --names-only nginx # имена, содержащие "nginx"
apt search python3-requests # имена и описания
apt-cache policy python3-pip # "Candidate: (none)" = здесь не установитьВ русской локали вместо Candidate: (none) apt пишет Кандидат: (отсутствует). Для выпуска, на котором вы сейчас не работаете, ищите на packages.debian.org или packages.ubuntu.com, выбрав выпуск по кодовому имени. Имена, на которых регулярно спотыкаются:
python— в актуальных Debian и Ubuntu нет пакета Python 2 без номера версии. Ставьтеpython3, а если нужна командаpython— ещё иpython-is-python3. Подробнее в статье python: command not found (англ.).python3-pipв Ubuntu — имя верное, но пакет лежит вuniverse(см. ниже). Установка pip ведёт прямиком к следующей ошибке, и pip: command not found (англ.) разбирает обе.dnsutils— утилитыdigиnslookupсобраны в пакетbind9-dnsutils.dnsutilsосталось только переходным или виртуальным именем, а в Ubuntu 24.04 старое имя лежит вuniverse, тогда как настоящий пакет — вmain. Ставьте новое имя.software-properties-common— в Debian 13 этого пакета больше нет. Чем его заменить, описано в статье add-apt-repository: command not found (англ.).docker— движок Docker в архивах Debian и Ubuntu называетсяdocker.io, а в собственном репозитории Docker —docker-ce. Подробнее в статье docker: command not found (англ.).
Конкретная версия в имени работает, только если ваш выпуск поставляет именно её. В Debian 12, где Python 3.11, запрос 3.12 даёт вот что — лишние строки появляются потому, что имя с точкой apt пробует ещё и как шаблон:
E: Unable to locate package python3.12
E: Couldn't find any package by glob 'python3.12'
E: Couldn't find any package by regex 'python3.12'E: Невозможно найти пакет python3.12
E: Не удалось найти ни один пакет с помощью шаблона «python3.12»
E: Не удалось найти ни один пакет с помощью регулярного выражения «python3.12»Если вы знаете команду, но не пакет, спросите apt-file. Он ищет по спискам файлов всех пакетов, установленных и нет. На большинстве серверов с Ubuntu подсказку с именем пакета даёт и обработчик command-not-found, когда вы набираете отсутствующую команду.
sudo apt install -y apt-file
sudo apt-file update
apt-file search --regexp 'bin/dig$' # → bind9-dnsutils: /usr/bin/digЧего чаще всего не хватает на минимальном сервере: curl и wget — отдельные пакеты (см. curl: command not found (англ.) и wget: command not found (англ.)), ifconfig входит в net-tools, а ps — в procps.
Пакет лежит в компоненте, который не подключён?
Оба архива разделены на компоненты. В Ubuntu это main, restricted, universe и multiverse; в Debian — main, contrib, non-free и, начиная с Debian 12, non-free-firmware. Пакета из компонента, которого нет в ваших источниках, для apt просто не существует. Многие образы подключают меньше, чем полная установка: облачные образы Debian, например, часто содержат только main. Проверьте, что подключено в этой системе:
apt-cache policy | grep -o 'c=[a-z-]*' | sort -u
ls /etc/apt/sources.list /etc/apt/sources.list.d/Форматов файлов два, и свежий образ может использовать любой из них, поэтому смотрите в обоих местах. Новый формат deb822 используется по умолчанию в Ubuntu 24.04 — файл /etc/apt/sources.list.d/ubuntu.sources — и часто встречается в образах Debian 12 и 13, в файле debian.sources. Компоненты записаны одной строкой:
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpgКлассический однострочный формат в /etc/apt/sources.list — Ubuntu 22.04 и многие установки Debian — перечисляет компоненты в конце каждой строки:
# Ubuntu 22.04
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
# Debian 12
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmwareПравьте тот файл, который у вас действительно есть, затем выполните sudo apt update. В Ubuntu ту же правку делает sudo add-apt-repository universe, если установлен software-properties-common. Оставляйте каждому выпуску его собственные строки: строки Ubuntu, скопированные в Debian, или кодовое имя одного выпуска в другом дают систему, которая сломается при следующем обновлении.
Есть ли пакет для вашей архитектуры?
dpkg --print-architecture # amd64 или arm64 на большинстве серверовПакеты собираются под каждую архитектуру отдельно, и часть стороннего ПО выходит только для amd64 — на сервере с arm64 apt сообщит, что пакета нет. Для 32-битных пакетов в 64-битной системе архитектуру сначала нужно добавить: sudo dpkg --add-architecture i386 && sudo apt update, а затем ставить name:i386.
Это сторонний пакет?
docker-ce, google-chrome-stable, свежие сборки Node.js и PHP и многие утилиты от производителей вообще отсутствуют в архивах Debian и Ubuntu. apt узнаёт о них только после того, как вы добавите репозиторий и ключ подписи производителя, выполните apt update и увидите, что репозиторий подхватился без ошибок. Безопасный способ добавить его показан в ручном варианте из статьи add-apt-repository: command not found (англ.). Если после этого apt update ругается на новый репозиторий ошибкой NO_PUBKEY (англ.), ключа подписи нет или он лежит не там, где его ждёт запись источника.
Проверьте и то, что производитель выпускает пакеты для вашего выпуска. Репозиторий без ветки для вашего кодового имени отвечает 404 на apt update, и пакет остаётся «unable to locate» — обычное дело в первые месяцы после выхода новой версии Debian или Ubuntu.
. /etc/os-release && echo "$VERSION_CODENAME" # bookworm, trixie, jammy, noble …Что значит «Package x has no installation candidate»?
Это другое сообщение с другой причиной: apt знает это имя, потому что на него ссылается другой пакет, но ни один подключённый источник не предлагает под ним ничего устанавливаемого. В русской локали последняя строка выглядит как E: Для пакета «x» не найден кандидат на установку. Так выглядит вывод в Debian 12:
Package python is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
python-is-python3 2to3
E: Package 'python' has no installation candidateПакет python недоступен, но упомянут в списке зависимостей другого
пакета. Это может означать, что пакет отсутствует, устарел или
доступен из источников, не упомянутых в sources.list
Однако следующие пакеты могут его заменить:
python-is-python3 2to3
E: Для пакета «python» не найден кандидат на установку- Устаревшее имя — от него отказались. Замену apt часто называет сам, как в примере выше.
- Виртуальный пакет — имя вроде
mail-transport-agent, которое предоставляют несколько настоящих пакетов. apt перечислит их; установите один из них по имени. - Пакет в другом месте — он есть в компоненте или выпуске, которые у вас не подключены. Решение то же, что выше.
apt-cache policy <name>
apt-cache showpkg <name> # смотрите "Reverse Provides:"Поддержка вашего выпуска закончилась?
Когда поддержка выпуска заканчивается, его пакеты со временем уходят с обычных зеркал. Промежуточные выпуски Ubuntu переезжают на old-releases.ubuntu.com, а выпуски Debian после окончания поддержки переносятся на archive.debian.org. С этого момента apt update падает с 404, индекс остаётся пустым, и любая установка выдаёт «unable to locate». Две даты, которые стоит знать: стандартная поддержка Ubuntu 20.04 закончилась в мае 2025 года (исправления безопасности дальше идут только через Ubuntu Pro), а LTS-поддержка Debian 11 — в августе 2026 года.
cat /etc/os-releaseЕсли направить источники на архивное зеркало, один пакет поставить получится, но обновлений безопасности система всё равно не получит. Настоящее решение — поддерживаемый выпуск: обновитесь на месте, по одному выпуску за раз, или переустановите систему и восстановите данные. На VPS переустановить свежий шаблон из панели обычно быстрее, чем выхаживать систему без поддержки: любой KVM-тариф VMHeaven можно в любой момент переустановить из шаблона в личном кабинете и получить чистую систему, например VPS на Ubuntu 24.04.
Как выглядит та же ошибка в Rocky, Alma и Alpine?
dnf пишет No match for argument, а за ним Error: Unable to find a match. Решения устроены так же: найдите правильное имя и подключите репозиторий, в котором оно есть. В Rocky и Alma 9 это обычно EPEL:
dnf provides '*/bin/dig' # → bind-utils
sudo dnf install -y epel-release # Extra Packages for Enterprise Linux
sudo dnf config-manager --set-enabled crb # части пакетов EPEL нужен CRB (dnf-plugins-core)
sudo dnf install -y htopAlpine отвечает ERROR: unable to select packages с пометкой (no such package). Контейнеры стартуют без индекса, а в Alpine, установленном вручную, репозиторий community может быть закомментирован:
apk update # или apk add --no-cache, который сам скачивает свежий индекс
cat /etc/apk/repositories # есть ли строка community и не закомментирована ли она?
apk search -v 'cmd:dig' # какой пакет даёт команду
apk add bind-toolsЧастые вопросы
Что значит «E: Невозможно найти пакет» в Ubuntu или Debian?
Это та же ошибка E: Unable to locate package на системе с русской локалью: apt не нашёл имя в своём локальном индексе. Чаще всего индекс ещё не скачан — свежие образы и контейнеры Docker поставляются без него. Выполните sudo apt update и повторите установку. Если не помогло, проверьте имя пакета для вашего выпуска и подключён ли компонент universe: в нём лежит, например, python3-pip.
Как подключить universe в Ubuntu?
Выполните sudo add-apt-repository universe, затем sudo apt update. Если software-properties-common не установлен, допишите universe в строку Components: файла /etc/apt/sources.list.d/ubuntu.sources (Ubuntu 24.04) или в строки deb файла /etc/apt/sources.list (Ubuntu 22.04) и выполните apt update.
Что означает «Для пакета не найден кандидат на установку»?
Это русский текст сообщения Package has no installation candidate: apt знает имя, но ни один подключённый источник не предлагает под ним устанавливаемого пакета. Обычно имя устарело (python), виртуальное и его предоставляют несколько пакетов (mail-transport-agent) или пакет есть только в компоненте или выпуске, который не подключён. Что его заменяет или предоставляет, покажут apt-cache policy <name> и apt-cache showpkg <name>.