В дистрибутиве Ubuntu и других, основанных на нем дистрибутивах, при установке новых пакетов пользователи могут столкнуться с ошибкой "package has no installation candidate" или по русски "Для пакета не найден кандидат на установку".
Эта ошибка может возникать при установке непопулярных программ или уже устаревших версий. Например, вы получите ее при попытке установить php5 или любой пакет, зависящий от этого в новой версии Ubuntu 16.04 или 16.10. В этой небольшой инструкции мы рассмотрим что означает ошибка "package has no installation candidate", а также как ее обойти и установить нужную программу.
Что означает package has no installation candidate?
Фактически, это означает то, что написано. Пакетный менеджер не нашел кандидата на установку для такого пакета. Ошибка будет выглядеть вот так в русской локализации:
Или в английской:
Пакетный менеджер просто не знает где искать такой пакет. Его нет в официальных репозиториях, и нет в репозиториях, подключенных к вашей системе. Все это нам говорит пакетный менеджер:
Пакет php5 недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
Из этого выплывает несколько способов решения проблемы, которые мы рассмотрим ниже.
Как решить package has no installation candidate?
Для начала нужно обновить списки пакетов из репозиториев, возможно, у вас старая версия системы и для нее этот пакет еще недоступен. Это особенно актуально для бета-версий Ubuntu. Для обновления выполните:
$ sudo apt update
Затем пробуйте снова установить ваш пакет. Если пакетный менеджер по-прежнему не может его найти, но вы точно знаете что такой пакет должен быть в официальных репозиториях, то, возможно, он есть в репозиториях партнеров Canonical. Нужно их добавить. Для этого откройте Источники программного обеспечения и установите все галочки:
Дальше система автоматически обновит список пакетов:
После этого можно устанавливать ваш пакет. Если его до сих пор нет мы можем пойти дальше и выполнить поиск по PPA. На сайте launchpad.net есть форма поиска:
Например, будем искать наш php 5. Вводим запрос в форму поиска и в результатах в первой же строке видим PPA, в котором есть нужная версия php. Такое решение подходит для многих пакетов.
На странице PPA мы уже видим способ добавления его в систему:
Например, для добавления этого PPA выполните такие команды:
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update
$ sudo apt-get update
После этого вы без труда установите нужный пакет.
Но если пакет не был найден в PPA, то остается только один способ - скачать deb установщик с сайта Ubuntu и установить его вручную. Вы можете скачать пакеты от старых версий ubuntu на сайте packages.ubuntu.com. Но вам нужно будет скачать все зависимости. Тут тоже есть отличная форма поиска:
Было найдено четыре версии, нам нужна последняя, для Trusty:
На странице кликните по архитектуре, в данном случае all, для загрузки:
Осталось только выбрать зеркало для загрузки и скачать файл:
Затем установить его с помощью dpkg:
$ sudo dpkg -i ./php5_5.5.9+dfsg-1ubuntu4.20_all.deb
Но не забудьте, что вам нужны все зависимости. Чтобы не делать это вручную, можно добавить репозиторий этого пакета в /apt/sources.list и заставить пакетный менеджер работать вместо вас. В нашем случае на сайте сказано, что нужно добавить строчку:
deb http://cz.archive.ubuntu.com/ubuntu trusty-updates main
Можно добавить только ее, но не всегда все зависимости будут находиться только в этом репозитории, так что будет лучше добавить сразу все репозитории нужной версии Ubuntu в этот файл. Например, для версии Trusty нужно добавить такие репозитории:
deb http://cz.archive.ubuntu.com/ubuntu trusty-updates main universe
deb http://security.ubuntu.com/ubuntu trusty-security main universe
deb http://cz.archive.ubuntu.com/ubuntu trusty main universe
deb http://security.ubuntu.com/ubuntu trusty-security main universe
deb http://cz.archive.ubuntu.com/ubuntu trusty main universe
Не забудьте обновить список пакетов:
$ sudo apt update
Далее можно установить нужную вам программу:
$ sudo apt install php5
После завершения, обязательно удалите все новые репозитории иначе при следующем обновлении, они сломают вам систему.