Для пакета gcc не найден кандидат на установку: как исправить ошибку

Ошибка E: Для пакета «gcc» не удалось найти кандидата на установку появляется в терминале сразу после команды sudo apt install gcc и означает одно: менеджер пакетов APT не нашёл в подключённых репозиториях ни одной версии gcc, которую можно было бы установить на вашу систему. Сам пакет при этом существует — проблема почти всегда кроется в устаревшем локальном индексе пакетов, отключённых репозиториях или несоответствии версии дистрибутива.

Ниже разберём, почему APT не видит кандидата на установку, какие проверки выполнить в первую очередь и как восстановить установку компилятора без переустановки системы. Инструкция подходит для Ubuntu, Debian и производных дистрибутивов, использующих пакетный менеджер apt.

Почему APT не находит кандидата на установку

Менеджер пакетов не скачивает программы напрямую из интернета при каждой команде. Он опирается на локальный кэш-индекс — список всех доступных пакетов и их версий, который формируется при выполнении apt update. Если этот индекс устарел, пуст или ссылается на недоступные серверы, APT честно сообщает, что кандидата на установку нет, даже если пакет существует в репозитории.

Типичные причины ошибки выглядят так:

  • 🔧 Не выполнялось обновление индекса — команда sudo apt update не запускалась после установки системы или давно не запускалась;
  • 🌐 Отключены основные репозитории — в файле sources.list закомментированы или отсутствуют нужные источники, например компонент main;
  • 📦 Устаревший выпуск дистрибутива — релиз достиг конца поддержки (EOL), и его репозитории перенесены в архив, поэтому стандартные адреса не отвечают;
  • 🔒 Проблемы с сетью или зеркалом — сервер репозитория недоступен, блокируется провайдером или прокси.

Отдельный случай — минимальные сборки и контейнеры Docker. В них индекс пакетов часто вообще пуст сразу после запуска образа, поэтому любая установка завершается подобной ошибкой до первого обновления списков.

Шаг 1. Обновление индекса пакетов

Первое действие при этой ошибке — обновить локальный индекс. Вам нужно выполнить в терминале:

sudo apt update

Команда обращается ко всем источникам из sources.list и заново загружает списки пакетов. Если в выводе видны строки с ошибками вида Failed to fetch или 404 Not Found — причина найдена: часть репозиториев недоступна, и их адреса нужно исправить. Если обновление прошло чисто, повторите установку:

sudo apt install gcc
⚠️ Внимание: не путайте apt update и apt upgrade. Первая команда лишь обновляет список доступных пакетов и ничего не устанавливает — она полностью безопасна. Вторая обновляет саму систему и для решения этой ошибки не обязательна.

Проверить, видит ли система пакет после обновления индекса, можно командой apt-cache policy gcc. В выводе должна отображаться строка Кандидат: с номером версии. Если вместо версии указано (нет) — переходите к проверке репозиториев.

📊 На каком этапе возникла ошибка с gcc?
Сразу после установки системы
После долгого перерыва без обновлений
Внутри Docker-контейнера
После смены зеркала репозиториев

Шаг 2. Проверка подключённых репозиториев

Если обновление индекса не помогло, необходимо проверить, какие источники вообще подключены. Список репозиториев хранится в файле /etc/apt/sources.list и в файлах каталога /etc/apt/sources.list.d/. В новых выпусках Ubuntu используется также формат /etc/apt/sources.list.d/ubuntu.sources.

Откройте файл командой cat /etc/apt/sources.list и убедитесь, что строки с репозиториями не закомментированы символом # и содержат компонент main — именно там находится пакет gcc. Пример строки для Debian:

deb http://deb.debian.org/debian bookworm main

Для Ubuntu строка выглядит похоже, но с адресом archive.ubuntu.com и кодовым именем вашего выпуска (например, jammy или noble). Кодовое имя установленной версии можно узнать командой lsb_release -a или cat /etc/os-release.

Шаг 3. Проблема устаревшего выпуска (EOL)

Когда выпуск дистрибутива достигает конца поддержки, его репозитории убирают с основных серверов в архив. Для старых выпусков Ubuntu пакеты переезжают на old-releases.ubuntu.com, для старых выпусков Debian — на archive.debian.org. Система продолжает стучаться по старым адресам, получает ошибки, и индекс остаётся пустым.

Решение — заменить адреса серверов в sources.list на архивные либо, что предпочтительнее, обновиться до поддерживаемого выпуска. Устаревшие релизы не получают обновлений безопасности, поэтому работа на них — компромисс, допустимый разве что в изолированных средах.

⚠️ Внимание: перед правкой sources.list обязательно сделайте резервную копию файла. Ошибка в адресе или кодовом имени выпуска приведёт к тому, что APT вообще перестанет получать списки пакетов.
Как узнать, что выпуск устарел

Выполните sudo apt update и посмотрите на строки с ошибками. Если сервер отвечает кодом 404 для вашего кодового имени выпуска — релиз, скорее всего, переведён в архив. Сверьте даты поддержки на официальном сайте дистрибутива.

Шаг 4. Альтернативные способы установки компилятора

После восстановления репозиториев компилятор можно поставить несколькими способами. Часто удобнее установить метапакет build-essential, который подтягивает не только gcc, но и g++, make и заголовочные файлы, необходимые для сборки программ:

sudo apt install build-essential

Если нужна конкретная версия компилятора, укажите её в имени пакета, например sudo apt install gcc-12. Список доступных версий покажет команда apt-cache search ^gcc-[0-9]. Учтите, что набор версий зависит от выпуска дистрибутива — сверяйтесь с тем, что реально предлагает ваш репозиторий.

☑️ Порядок устранения ошибки

Выполнено: 0 / 5

Сравнение типичных причин и решений

Сводная таблица поможет быстро сопоставить симптом с действием:

СимптомВероятная причинаРешение
Кандидат не найден сразу после установки ОСПустой индекс пакетовВыполнить sudo apt update
Ошибки 404 при apt updateУстаревший выпуск (EOL)Сменить зеркала на архивные или обновить релиз
Индекс обновляется, но кандидата нетОтключён компонент mainИсправить sources.list
Ошибка в Docker-контейнереИндекс не загружен в образеЗапустить apt update перед установкой
Failed to fetch для всех источниковНет сети или проблемы с DNS/проксиПроверить подключение и настройки прокси

Обратите внимание: в контейнерах Docker команду apt update нужно выполнять в том же RUN-слое Dockerfile, что и установку пакета, иначе индекс может быть удалён при очистке слоёв, и ошибка вернётся. Это специфичная особенность сборки образов, о которой часто забывают.

Если ничего не помогло

В редких случаях причина лежит глубже: повреждён кэш APT или сломаны зависимости. Попробуйте очистить локальный кэш и загрузить индекс заново:

sudo apt clean

sudo apt update

Также проверьте, нет ли сторонних PPA-репозиториев, которые конфликтуют с основными источниками — их список находится в /etc/apt/sources.list.d/. Временно отключите сомнительные источники, повторите обновление индекса и попытку установки. Если и после этого кандидат не появляется, сверьтесь с официальной документацией вашего дистрибутива: возможно, пакет в вашем выпуске называется иначе или вынесен в отдельный компонент репозитория.

Частые вопросы

Что означает «не найден кандидат на установку»?

Это сообщение APT о том, что в локальном индексе пакетов нет ни одной версии указанного пакета, доступной для установки. Обычно причина — устаревший индекс, отключённые репозитории или недоступные серверы источников.

Достаточно ли команды sudo apt update для исправления ошибки?

В большинстве случаев — да, особенно на свежеустановленной системе или в контейнере. Если после обновления индекса команда apt-cache policy gcc по-прежнему показывает отсутствие кандидата, нужно проверять sources.list и актуальность выпуска дистрибутива.

Чем отличается gcc от build-essential?

gcc — это сам компилятор языка C. build-essential — метапакет, который устанавливает gcc, g++, make и базовые библиотеки разработки. Для сборки программ из исходников обычно ставят именно его.

Можно ли установить gcc без доступа к интернету?

Да, если у вас есть установочный ISO-образ дистрибутива — его можно подключить как локальный репозиторий. Либо перенести deb-пакеты и их зависимости с другой машины. Оба способа требуют аккуратного учёта зависимостей.

Ошибка появляется только для gcc, остальные пакеты ставятся. Почему?

Возможно, пакет называется иначе в вашем выпуске или отсутствует в подключённых компонентах репозитория. Проверьте точное имя через apt-cache search gcc и убедитесь, что компонент main активен.