Я полностью согласен с тем, что многие меткие сообщения гораздо более загадочны, чем хотелось бы, и часто даже вводят в заблуждение. Однако хорошо то, что при работе с apt некоторое время вы будете сталкиваться с сообщениями снова и снова и привыкнете к тому, как их исправлять.
В зависимости от того, что вы знаете о том, что apt делает за кулисами, может быть не так просто понять все детали. Я попробую, надеясь угадать ваш фон и правильно интерпретировать ваш вопрос. Пожалуйста, потерпите меня, если я ошибаюсь :-)
Как правило, сообщения, на которые вы ссылаетесь, «не будут установлены» или «невозможно» относятся к зависимостям, которые необходимы для вашего пакета, который вы устанавливаете, по сравнению с пакетами, уже установленными в вашей системе.
Чтобы понять это, вам нужно знать, что большинство пакетов поставляются не со всеми файлами, которые им действительно необходимы для запуска. Обычай Linux заключается в использовании программного обеспечения с открытым исходным кодом везде, где это возможно, поэтому каждый пакет использует множество библиотек. Это двоичные BLOB-объекты, заполненные функциями, которые исполняемый файл может использовать на лету. Проблема в том, что, с одной стороны, эти проекты с открытым исходным кодом все время меняются и получают очень частые обновления, а с другой стороны, программы закодированы для работы с определенной версией, т.е. версией, которую разработчик использовал во время компиляции. Так что вам нужна именно эта версия или совместимая версия. Было бы легко, если бы каждый разработчик, например. CUDA будет поставлять все библиотеки, которые они использовали во время компиляции.Это не так, потому что большинство из них являются стандартными библиотеками, которые, скорее всего, также используются другими программами, и это будет означать, что каждая программа будет огромной для загрузки и хранения всех этих дубликатов данных (кстати, Docker или AppImage как раз делают это для подскажите решение этой проблемы). Из-за этой проблемы в вашей системе обычно имеется несколько версий системных библиотек. Однако становится сложно, когда библиотеки несовместимы или конфликтуют друг с другом, например. потому что только одна библиотека может получить доступ к системному ресурсу одновременно. В этом случае вы должны найти версию библиотеки, совместимую со всеми установленными пакетами, которые их используют.
Это то, что apt пытается сделать для каждой установки, которую вы делаете. Это не ИИ, поэтому его возможности ограничены. Сообщение невозможной ситуации заключается в том, что у вас явно конфликт, когда нужны две абсолютно несовместимые версии библиотеки одновременно. Чаще всего речь идет не о непосредственно используемых библиотеках, а о библиотеках, которые должны запускаться библиотеками. Существует целая иерархия зависимостей.
Очень поучительно зайти на github за любым приличным программным обеспечением и следовать инструкциям по компиляции. Компиляция в Linux очень проста. Но в большинстве случаев это кошмар, чтобы найти и установить все зависимости. И если вы используете не самые новые, а более старые версии, вы не можете использовать самые новые зависимости, но вам также нужно выяснить, какие версии исходного кода вам нужны для каждой из зависимостей. Это дает очень хорошее представление о том, с чем работает apt.
Таким образом, сообщение «она не будет установлена» может быть вызвано тем, что требуемая библиотека доступна и будет работать нормально, но любая из их зависимостей имеет конфликт где-то в будущем.
Теперь, что вы можете сделать?
Вы можете решить эту проблему лучше, чем apt, если отследите каждый конфликт, а затем выясните, какие другие приложения затронуты, а затем решите, какие из них важны, а какие нет.Например, вы можете узнать, что ваш блокировщик для установки CUDA является инструментом обмена сообщениями по умолчанию, который вы все равно не используете. Простое решение — удалить его и все его библиотеки (когда они больше нигде не используются, apt сделает это). После этого apt может установить его.
К сожалению, я не знаю ни одного инструмента, который позволяет вам просматривать эти деревья зависимостей таким образом, чтобы легко понять и отследить эти связи.
У меня тоже есть такие случаи, и первым делом нужно попробовать Aptitude. Он не установлен по умолчанию:
sudo установить aptitude
Aptitude в основном такой же, как и apt, но он больше и имеет гораздо больше логики для обработки таких случаев. В случае этих сообщений aptitude предложит вам варианты. Некоторые могут быть поддельными, просто скажите «нет», и вы получите еще один. Например, он предложит «понизить версию» пакета. Это означает, что нужно установить более старую версию. Он предложит «удалить» пакет или установить дополнительные пакеты в качестве обходного пути. Проблема в том, что он не говорит вам, каковы последствия, то есть он не говорит вам, что «если вы понизите это, приложение XYZ может больше не работать должным образом». Это просто дает вам варианты выхода из дилеммы, которую «способный» не смог решить.
Поэтому, глядя на предложения от Aptitude, было бы неплохо увидеть, какие пакеты всплывают, и можете ли вы установить соединения самостоятельно. Вы можете заметить, что есть инструмент, который вы недавно установили. Это может дать вам намек на то, что вы все равно не используете. Удалите его и повторите попытку.
Также запустите виртуальную машину с пустой Ubuntu и попробуйте установить там свои вещи, это может быть очень полезно, потому что вы видите, есть ли конфликт в выпуске Ubuntu из коробки. Им пора добраться до таких мест и сделать пост как можно более конкретным.
Надеюсь, я не потерял вас и не утомил вас, и это немного нацелено на ваш вопрос.
Теперь apt за кулисами довольно сложен, потому что он написан на языке низкого уровня, и поэтому довольно сложно включить сложные или продвинутые алгоритмы обнаружения и разрешения. Это надежный и компактный инструмент, работающий в любой (даже минимальной) системе. И это так.