Ошибка 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. В выводе должна отображаться строка Кандидат: с номером версии. Если вместо версии указано (нет) — переходите к проверке репозиториев.
Шаг 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]. Учтите, что набор версий зависит от выпуска дистрибутива — сверяйтесь с тем, что реально предлагает ваш репозиторий.
☑️ Порядок устранения ошибки
Сравнение типичных причин и решений
Сводная таблица поможет быстро сопоставить симптом с действием:
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Кандидат не найден сразу после установки ОС | Пустой индекс пакетов | Выполнить 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 активен.