Введение
Программные инструменты для работы с программными пакетами
Менеджер пакетов или система управления пакетами — это набор программных инструментов, автоматизирующих процесс установки, обновления, настройки и удаления компьютерных программ на компьютере согласованным образом. Менеджер пакетов работает с пакетами – дистрибутивами программного обеспечения и данных в архивных файлах. Пакеты содержат метаданные, такие как название программного обеспечения, описание его назначения, номер версии, разработчик, контрольную сумму (желательно криптографическую хеш-функцию) и список зависимостей, необходимых для корректной работы программного обеспечения. После установки метаданные сохраняются в локальной базе данных пакетов. Менеджеры пакетов обычно поддерживают базу данных зависимостей программного обеспечения и информации о версиях, чтобы предотвратить несовместимость программного обеспечения и отсутствие необходимых компонентов. Они тесно взаимодействуют с репозиториями программного обеспечения, менеджерами бинарных репозиториев и магазинами приложений. Менеджеры пакетов разработаны для устранения необходимости ручной установки и обновления программного обеспечения. Это особенно полезно для крупных предприятий, операционные системы которых обычно состоят из сотен или даже десятков тысяч отдельных программных пакетов.
История
Ранним менеджером пакетов был SMIT (и его серверная часть installp) от IBM AIX. SMIT был представлен вместе с AIX 3.0 в 1989 году. Ранние менеджеры пакетов, появившиеся примерно в 1994 году, не обладали автоматическим разрешением зависимостей, но уже значительно упрощали процесс добавления и удаления программного обеспечения из работающей системы. К 1995 году, начиная с CPAN, менеджеры пакетов стали выполнять функции загрузки пакетов из репозитория, автоматического разрешения зависимостей и установки необходимых компонентов, что существенно облегчило установку, удаление и обновление программного обеспечения в системе.
Проблемы с общими библиотеками
Компьютерные системы, использующие динамическую компоновку библиотек вместо статической, совместно используют исполняемые библиотеки машинных инструкций между пакетами и приложениями. В таких системах конфликтные зависимости между различными пакетами, требующими разные версии библиотек, приводят к проблеме, неформально известной как "ад зависимостей". В системах Microsoft Windows при работе с динамически компонуемыми библиотеками это также называют "DLL hell". Современные менеджеры пакетов в основном решили эти проблемы, обеспечивая параллельную установку нескольких версий библиотеки (например, система Framework в OPENSTEP), любых видов зависимостей (например, слоты в Gentoo Portage) и даже пакетов, скомпилированных с разными версиями компилятора (например, динамические библиотеки, созданные компилятором Glasgow Haskell, где стабильный ABI отсутствует), чтобы другие пакеты могли указывать, с какой версией они были скомпонованы или даже установлены.
Фронт-энда для локально компилируемых пакетов
Системные администраторы могут устанавливать и поддерживать программное обеспечение, используя инструменты, отличные от систем управления пакетами. Например, локальный администратор может загрузить исходный код без упаковки, скомпилировать его и установить. Это может привести к рассинхронизации состояния локальной системы с базой данных менеджера пакетов. В этом случае локальному администратору потребуется предпринять дополнительные действия, такие как ручное управление зависимостями или интеграция изменений в менеджер пакетов. Существуют инструменты, обеспечивающие интеграцию локально скомпилированных пакетов в систему управления пакетами. Для дистрибутивов, основанных на файлах deb и rpm, а также Slackware Linux, доступен CheckInstall, а для систем, использующих рецепты, таких как Gentoo Linux, и гибридных систем, таких как Arch Linux, можно сначала создать рецепт, который обеспечит соответствие пакета локальной базе данных пакетов.
Поддержание конфигурации
Особенно сложными при обновлении программного обеспечения являются обновления файлов конфигурации. Поскольку менеджеры пакетов, по крайней мере на Unix-системах, изначально создавались как расширения утилит архивирования файлов, они обычно могут лишь перезаписывать или сохранять файлы конфигурации, но не применять к ним правила. Существуют исключения, которые обычно касаются конфигурации ядра (которая, в случае повреждения, сделает компьютер неработоспособным после перезагрузки). Проблемы могут возникнуть при изменении формата файлов конфигурации, например, если старый файл конфигурации не отключает явно новые опции, которые должны быть отключены. Некоторые менеджеры пакетов, такие как dpkg в Debian, позволяют выполнять настройку во время установки. В других случаях желательно устанавливать пакеты с конфигурацией по умолчанию, а затем перезаписывать её, например, при безголовой установке на большое количество компьютеров. Этот тип предварительно настроенной установки также поддерживается dpkg.
Хранилища
Чтобы предоставить пользователям больше контроля над тем, какое программное обеспечение они разрешают устанавливать на свою систему (а иногда и по юридическим или практическим причинам на стороне распространителей), программное обеспечение часто скачивается из различных репозиториев.
Каскадное удаление упаковки
Некоторые из более продвинутых функций управления пакетами предлагают "каскадное удаление пакетов", при котором удаляются все пакеты, зависящие от целевого пакета, а также все пакеты, от которых зависит исключительно целевой пакет.
Сравнение команд
Хотя команды специфичны для каждого конкретного менеджера пакетов, они в значительной степени сопоставимы, поскольку большинство менеджеров пакетов предлагают схожие функции. или – это имя пакета. Действие Homebrew apt pacman dnf (yum) portage zypper Nix xbps swupd WinGet Установка пакета Удаление пакета или Обновление всех пакетов Обновление базы данных программного обеспечения или Показать доступные для обновления пакеты или (является сокращением от , а является сокращением от .) (требует репозитория пакетов Void) или Удалить устаревшие пакеты и конфигурационные файлы Показать устаревшие пакеты (является сокращением от .) или Удалить пакет (и устаревшие пакеты) или
The Arch Linux Pacman/Rosetta wiki offers an extensive overview.
Вики Arch Linux Pacman/Rosetta предлагает подробный обзор.
The Arch Linux Pacman/Rosetta wiki offers an extensive overview.
Распространенность
Менеджеры пакетов, такие как dpkg, существуют с 1994 года. Дистрибутивы Linux, ориентированные на бинарные пакеты, сильно зависят от систем управления пакетами как от основного способа установки, обновления и поддержки программного обеспечения. Мобильные операционные системы, такие как Android (на базе Linux), iOS (на базе Unix) и Windows Phone, практически полностью полагаются на магазины приложений соответствующих производителей и, следовательно, используют собственные специализированные системы управления пакетами.
Сравнение с монтажниками
Менеджер пакетов часто называют "установщиком", что может привести к путанице между менеджерами пакетов и программами установки. Различия заключаются в следующем:
Сравнение с магазинами приложений
Магазины приложений также можно рассматривать как пакетные менеджеры на уровне приложений. В отличие от традиционных пакетных менеджеров, магазины приложений созданы для обеспечения оплаты за само программное обеспечение (а не за разработку программного обеспечения) и могут предлагать только монолитные пакеты без зависимостей или их разрешения. Обычно они крайне ограничены в функциональности управления из-за сильного упора на простоту, а не на мощность или расширяемость, и распространены в коммерческих операционных системах и закрытых "умных" устройствах.
Универсальный менеджер пакетов
Также известный как менеджер бинарных репозиториев, это программный инструмент, предназначенный для оптимизации загрузки и хранения бинарных файлов, артефактов и пакетов, используемых и создаваемых в процессе разработки программного обеспечения. Эти менеджеры пакетов призваны стандартизировать подход предприятий ко всем типам пакетов. Они предоставляют пользователям возможность применять метрики безопасности и соответствия требованиям ко всем типам артефактов. Универсальные менеджеры пакетов часто называют центральным элементом цепочки инструментов DevOps.
Формат упаковки
Каждый менеджер пакетов опирается на формат и метаданные пакетов, которыми он может управлять. То есть, менеджерам пакетов требуются сгруппированные файлы, собранные для конкретного менеджера пакетов, вместе с соответствующими метаданными, такими как зависимости. Часто базовый набор утилит управляет основной установкой из этих пакетов, а несколько менеджеров пакетов используют эти утилиты для предоставления дополнительной функциональности. Например, yum использует rpm в качестве базовой системы. Yum расширяет функциональность базовой системы, добавляя такие возможности, как простая конфигурация для обслуживания сети систем. В качестве другого примера, Synaptic Package Manager предоставляет графический пользовательский интерфейс, используя библиотеку Advanced Packaging Tool (apt), которая, в свою очередь, опирается на dpkg для основной функциональности. Alien – это программа, которая преобразует пакеты между различными форматами Linux, поддерживая преобразование между пакетами rpm, соответствующими стандарту Linux Standard Base (LSB), deb, Stampede (.slp), Solaris (.pkg) и Slackware (.tgz, txz, tbz, tlz). В мобильных операционных системах Google Play использует формат пакета Android application package (APK), а Microsoft Store – форматы APPX и XAP. (И Google Play, и Microsoft Store имеют одноименные менеджеры пакетов.)
Системы свободного и открытого программного обеспечения
По своей природе свободного и открытого программного обеспечения, пакеты под аналогичными и совместимыми лицензиями доступны для использования на ряде операционных систем. Эти пакеты можно объединять и распространять с помощью конфигурируемых и внутренне сложных систем упаковки, чтобы обрабатывать множество комбинаций программного обеспечения и управлять зависимостями и конфликтами, связанными с конкретными версиями. Некоторые системы упаковки свободного и открытого программного обеспечения также сами распространяются как свободное и открытое программное обеспечение. Одно из типичных различий между управлением пакетами в проприетарных операционных системах, таких как Mac OS X и Windows, и в системах свободного и открытого программного обеспечения, таких как Linux, заключается в том, что системы свободного и открытого программного обеспечения позволяют устанавливать и обновлять пакеты сторонних разработчиков тем же механизмом, в то время как менеджеры пакетов Mac OS X и Windows обновляют только программное обеспечение, предоставляемое соответственно Apple и Microsoft (за исключением некоторых драйверов сторонних производителей в Windows). Возможность непрерывного обновления стороннего программного обеспечения обычно реализуется путем добавления URL-адреса соответствующего репозитория в файл конфигурации системы управления пакетами.
Менеджеры пакетов на уровне приложений
Помимо системных менеджеров пакетов, существуют дополнительные менеджеры пакетов для операционных систем с ограниченными возможностями и для языков программирования, в которых разработчикам требуются самые свежие библиотеки. В отличие от менеджеров пакетов системного уровня, менеджеры пакетов на уровне приложений ориентированы на небольшую часть программной системы. Как правило, они располагаются в дереве каталогов, которое не обслуживается менеджером пакетов системного уровня, например, `~/.local/share/` или `$HOME/Applications`. Однако это может быть не так для менеджеров пакетов, работающих с библиотеками программирования, что может привести к конфликтам, поскольку оба менеджера пакетов могут претендовать на "владение" файлом и нарушать процесс обновления.
Управление зависимостью от данных
В 2016 году Эдгард Маркс, ученый-компьютерщик из Лейпцигского университета, ввел термин Data Dependency Management для обозначения систем, работающих с управлением данными. Системы Data Dependency Management разработаны для упрощения развертывания и управления данными в облаке, на персональных компьютерах или интеллектуальных устройствах (на периферии сети). Фреймворки Data Dependency Management могут использоваться для описания происхождения данных, лицензирования, а также их зависимостей. Концепция управления зависимостями данных берет начало в инструментах управления зависимостями программных пакетов, таких как npm для JavaScript, gem для Ruby и NuGet для .NET. Их цель – предоставить пользователям возможность управлять зависимостью программного обеспечения от данных, например, моделей машинного обучения для приложений, управляемых данными. Они полезны для публикации, поиска и установки пакетов данных. Типичными примерами фреймворков управления зависимостями данных являются Hugging Face, KBox и другие.
Влияние
Ян Мёрдок отмечал, что управление пакетами — это "крупнейший вклад Linux в индустрию", размывающий границы между операционной системой и приложениями, и что оно упрощает "вывод новых разработок на рынок и развитие операционной системы". Существует также конференция для разработчиков систем управления пакетами под названием PackagingCon. Она была основана в 2021 году с целью изучения различных подходов к управлению пакетами.