Зависимость пакета указывает, что для установки или работы одному пакету нужен другой пакет, возможность или совместимая версия. Диспетчеры пакетов, работающие с репозиториями, используют эти метаданные, чтобы рассчитать согласованный набор изменений, а не рассматривать каждый архив отдельно.
Пакеты · Урок 4
Зависимости пакетов
Узнайте, как метаданные пакетов выражают требуемые возможности, версии, конфликты и отношения с общими библиотеками.
Отношения зависимостей
Метаданные пакета могут выражать не только простое требуемое имя. В зависимости от формата дистрибутива отношения могут включать:
- обязательные зависимости
- ограничения минимальной, максимальной или точной версии
- альтернативы, где требование удовлетворяет любой из нескольких поставщиков
- рекомендации или предложения с более слабой семантикой
- конфликты, нарушения совместимости или замены
- виртуальные возможности, предоставляемые несколькими пакетами
Эти правила позволяют решателю выбрать набор версий пакетов, совместимый с настроенными репозиториями, архитектурой и установленным состоянием. Решение может потребовать обновлений, удалений или выбора между поставщиками, поэтому проверяйте предложенную транзакцию до подтверждения.
Что пытается получить решатель зависимостей, работающий с репозиториями?
Общие библиотеки как зависимости
Общая библиотека содержит скомпилированный код, который несколько программ могут отображать в память во время работы. Совместное использование сокращает дублирование реализаций и позволяет дистрибутивам независимо обновлять общую библиотеку, однако программы зависят от совместимого двоичного интерфейса приложения, или ABI.
В системах Linux на основе ELF исполняемый файл может записывать имя требуемой библиотеки, например SONAME. При запуске программы динамический компоновщик находит подходящую установленную библиотеку. Метаданные пакета обычно представляют это требование как зависимость от пакета или возможности, предоставляющих совместимую библиотеку.
Что такое общая библиотека?
Совместимость версий и ABI
Наличия файла с похожим именем библиотеки недостаточно. Должны соответствовать требуемые ABI, архитектура, символы и иногда минимальная версия. Ручная замена библиотеки дистрибутива может сломать все зависимые программы, даже если имя файла выглядит правильным.
Сопровождающие пакетов кодируют отношения библиотек и координируют переходы при изменении ABI. Оставляйте собственные библиотеки под управлением диспетчера пакетов; для программ, которым нужна конфликтующая версия, используйте поддерживаемые механизмы параллельной установки, контейнеров, окружений или сборки.
Почему программа может завершиться ошибкой, даже если существует файл библиотеки с похожим именем?
Нарушенные состояния зависимостей
Проблема зависимостей может возникнуть из-за смешанных репозиториев, прерванных операций, вручную установленных архивов, зафиксированных версий, удалённых файлов или несовместимых сторонних программ. Не отвечайте на неё удалением файлов базы пакетов или слепой принудительной установкой.
Сначала прочитайте диагностику диспетчера пакетов, обновите метаданные только доверенных репозиториев, проверьте удерживаемые или закреплённые версии и изучите предлагаемое исправление. Низкоуровневый установщик пакетов может распаковать архив, не получая всех зависимостей; высокоуровневый инструмент репозитория обычно безопаснее для обычной установки, поскольку разрешает всю транзакцию.
Каково распространённое ограничение установки одного локального пакета низкоуровневым инструментом архивов?
В лаборатории Управление общими библиотеками в Linux исследуйте отношения времени выполнения, а затем сравните их с метаданными пакетов в лаборатории Управление пакетами с помощью RPM.
Урок завершён
Вы завершили Зависимости пакетов
Теперь вы можете объяснить, как работает разрешение зависимостей пакетов.
Распознавайте обязательные, альтернативные, версионные и конфликтующие отношения.
Связывайте пакеты общих библиотек с требованиями ABI времени выполнения.
Считайте имена файлов менее веским свидетельством, чем совместимость архитектуры и интерфейсов.
Проверяйте полную транзакцию диспетчера пакетов до применения исправлений.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт