Менеджер пакетов или система управления пакетами — это набор программных инструментов, которые автоматизируют процесс установки, обновления, настройки и удаления компьютерных программ для компьютера согласованным образом. [1]
Менеджер пакетов имеет дело с пакетами , дистрибутивами программного обеспечения и данными в архивных файлах . Пакеты содержат метаданные , такие как имя программного обеспечения, описание его назначения, номер версии, поставщик, контрольная сумма (предпочтительно криптографическая хэш-функция ) и список зависимостей, необходимых для правильной работы программного обеспечения. После установки метаданные сохраняются в локальной базе данных пакетов. Менеджеры пакетов обычно ведут базу данных зависимостей программного обеспечения и информации о версии для предотвращения несоответствий программного обеспечения и отсутствия предварительных условий. Они тесно сотрудничают с репозиториями программного обеспечения , менеджерами двоичных репозиториев и магазинами приложений .
Менеджеры пакетов разработаны для устранения необходимости в ручных установках и обновлениях. Это может быть особенно полезно для крупных предприятий, чьи операционные системы обычно состоят из сотен или даже десятков тысяч различных программных пакетов. [2]
Ранним менеджером пакетов был SMIT (и его бэкэнд installp) из IBM AIX . SMIT был представлен в AIX 3.0 в 1989 году. [ необходима цитата ]
Ранние менеджеры пакетов, появившиеся примерно в 1994 году, не имели автоматического разрешения зависимостей [3], но уже могли значительно упростить процесс добавления и удаления программного обеспечения из работающей системы. [4]
Примерно к 1995 году, начиная с CPAN , менеджеры пакетов начали выполнять работу по загрузке пакетов из репозитория, автоматически разрешая их зависимости и устанавливая их по мере необходимости, что значительно упростило установку, удаление и обновление программного обеспечения из системы. [5]
Пакет программного обеспечения — это архивный файл, содержащий компьютерную программу, а также необходимые метаданные для ее развертывания. Компьютерная программа может быть в исходном коде , который должен быть сначала скомпилирован и собран. [6] Метаданные пакета включают описание пакета, версию пакета и зависимости (другие пакеты, которые должны быть установлены заранее).
Менеджеры пакетов отвечают за поиск, установку, обслуживание или удаление пакетов программного обеспечения по команде пользователя. Типичные функции системы управления пакетами включают:
Компьютерные системы, которые полагаются на динамическое связывание библиотек вместо статического связывания библиотек, совместно используют исполняемые библиотеки машинных инструкций для пакетов и приложений. В этих системах конфликтующие отношения между различными пакетами, требующими разные версии библиотек, приводят к проблеме, в разговорной речи известной как « ад зависимостей ». В системах Microsoft Windows это также называется « ад DLL » при работе с динамически связанными библиотеками. [7]
Современные менеджеры пакетов в основном решили эти проблемы, позволяя параллельную установку нескольких версий библиотеки (например, системы Framework OPENSTEP ) , зависимостей любого рода (например, слотов в Gentoo Portage ) и даже пакетов, скомпилированных с помощью разных версий компилятора (например, динамических библиотек, созданных компилятором Glasgow Haskell , для которых не существует стабильного ABI ), чтобы позволить другим пакетам указывать, с какой версией они связаны или даже установлены.
Системные администраторы могут устанавливать и обслуживать программное обеспечение с помощью инструментов, отличных от программного обеспечения для управления пакетами. Например, локальный администратор может загрузить неупакованный исходный код, скомпилировать его и установить. Это может привести к тому, что состояние локальной системы выйдет из синхронизации с состоянием базы данных менеджера пакетов . Локальному администратору потребуется предпринять дополнительные меры, такие как ручное управление некоторыми зависимостями или интеграция изменений в менеджер пакетов.
Существуют инструменты, обеспечивающие интеграцию локально скомпилированных пакетов с управлением пакетами. Для дистрибутивов на основе файлов .deb и .rpm , а также Slackware Linux, есть CheckInstall , а для систем на основе рецептов, таких как Gentoo Linux , и гибридных систем, таких как Arch Linux , можно сначала написать рецепт, который затем гарантирует, что пакет впишется в локальную базу данных пакетов. [ необходима цитата ]
Особенно проблематичными при обновлении программного обеспечения являются обновления файлов конфигурации. Поскольку менеджеры пакетов, по крайней мере в системах Unix, возникли как расширения утилит архивирования файлов , они обычно могут только перезаписывать или сохранять файлы конфигурации, а не применять к ним правила. Существуют исключения из этого правила, которые обычно применяются к конфигурации ядра (которая, если сломается, сделает компьютер непригодным для использования после перезапуска). Проблемы могут возникнуть, если формат файлов конфигурации изменится; например, если старый файл конфигурации явно не отключает новые параметры, которые следует отключить. Некоторые менеджеры пакетов, такие как dpkg в Debian , допускают настройку во время установки. В других ситуациях желательно устанавливать пакеты с конфигурацией по умолчанию, а затем перезаписывать эту конфигурацию, например, при безголовых установках на большое количество компьютеров. Этот вид предварительно настроенной установки также поддерживается dpkg.
Чтобы предоставить пользователям больше контроля над типами программного обеспечения, которые они разрешают устанавливать в своей системе (а иногда и по юридическим причинам или из соображений удобства со стороны дистрибьюторов), программное обеспечение часто загружается из нескольких репозиториев программного обеспечения . [8]
Когда пользователь взаимодействует с программным обеспечением управления пакетами для выполнения обновления, обычно пользователю предоставляется список действий, которые необходимо выполнить (обычно список пакетов для обновления, и, возможно, с указанием старых и новых номеров версий), и пользователю предоставляется возможность либо принять обновление оптом, либо выбрать отдельные пакеты для обновления. Многие менеджеры пакетов можно настроить так, чтобы они никогда не обновляли определенные пакеты или обновляли их только при обнаружении критических уязвимостей или нестабильностей в предыдущей версии, как определено упаковщиком программного обеспечения. Этот процесс иногда называется закреплением версии .
Например:
Некоторые из более продвинутых функций управления пакетами предлагают «каскадное удаление пакетов» [10] , при котором все пакеты, зависящие от целевого пакета, и все пакеты, от которых зависит только целевой пакет, также удаляются.
Хотя команды специфичны для каждого конкретного менеджера пакетов, они в значительной степени транслируемы, поскольку большинство менеджеров пакетов предлагают схожие функции.
Подробный обзор представлен в вики Arch Linux Pacman/Rosetta. [ 16 ]
Менеджеры пакетов, такие как dpkg, существовали еще в 1994 году. [17]
Дистрибутивы Linux, ориентированные на бинарные пакеты, в значительной степени полагаются на системы управления пакетами как на основные средства управления и поддержки программного обеспечения. Мобильные операционные системы, такие как Android (на основе Linux), iOS ( на основе Unix ) и Windows Phone, полагаются почти исключительно на магазины приложений своих поставщиков и, таким образом, используют собственные специализированные системы управления пакетами.
apt-get
, утилита CLI , устанавливающая MediaWikipacman
, утилита CLI для дистрибутивов на базе ArchМенеджер пакетов часто называют «менеджером установки», что может привести к путанице между менеджерами пакетов и установщиками . Различия включают в себя:
Большинство систем управления конфигурацией программного обеспечения рассматривают сборку программного обеспечения и развертывание программного обеспечения как отдельные, независимые шаги. Утилита автоматизации сборки обычно берет файлы исходного кода, которые могут быть прочитаны человеком , уже находящиеся на компьютере, и автоматизирует процесс их преобразования в исполняемый двоичный пакет на том же или удаленном компьютере. Позже менеджер пакетов, обычно работающий на каком-то другом компьютере, загружает эти предварительно созданные исполняемые двоичные пакеты через Интернет и устанавливает их.
Однако оба типа инструментов имеют много общего:
make install
.Некоторые инструменты, такие как Maak и AAP , предназначены для управления как сборкой, так и развертыванием и могут использоваться либо как утилита автоматизации сборки, либо как менеджер пакетов, либо и то, и другое. [18]
Магазины приложений также можно считать менеджерами пакетов уровня приложений (без возможности установки всех уровней программ [19] [20] ). В отличие от традиционных менеджеров пакетов, магазины приложений предназначены для обеспечения возможности оплаты самого программного обеспечения (а не разработки программного обеспечения) и могут предлагать только монолитные пакеты без зависимостей или разрешения зависимостей. [21] [20] Они, как правило, крайне ограничены в своих функциональных возможностях управления из-за сильного акцента на упрощении, а не на мощности или появлении , и распространены в коммерческих операционных системах и заблокированных «умных» устройствах.
Менеджеры пакетов также часто имеют только проверенный человеком код. Многие магазины приложений, такие как Google Play и App Store от Apple, проверяют приложения в основном с помощью только автоматизированных инструментов; вредоносное ПО с устройствами поражения может пройти эти тесты, обнаруживая, когда программное обеспечение автоматически тестируется, и задерживая вредоносную активность. [22] [23] [24] Однако есть исключения; например, база данных пакетов npm полностью полагается на проверку своего кода после публикации, [25] [26] в то время как база данных пакетов Debian имеет обширный процесс проверки человеком, прежде чем любой пакет попадет в основную стабильную базу данных. Бэкдор XZ Utils использовал годы создания доверия для вставки бэкдора, который, тем не менее, был пойман во время тестирования базы данных.
Также известный как менеджер бинарных репозиториев , это программный инструмент, разработанный для оптимизации загрузки и хранения двоичных файлов, артефактов и пакетов, используемых и создаваемых в процессе разработки программного обеспечения . [27] Эти менеджеры пакетов направлены на стандартизацию того, как предприятия обрабатывают все типы пакетов. Они дают пользователям возможность применять метрики безопасности и соответствия ко всем типам артефактов. Универсальные менеджеры пакетов упоминаются как находящиеся в центре инструментальной цепочки DevOps . [28]
Каждый менеджер пакетов полагается на формат и метаданные пакетов, которыми он может управлять. То есть менеджерам пакетов нужны группы файлов, которые будут объединены для конкретного менеджера пакетов вместе с соответствующими метаданными, такими как зависимости. Часто основной набор утилит управляет базовой установкой из этих пакетов, а несколько менеджеров пакетов используют эти утилиты для предоставления дополнительной функциональности.
Например, 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 (APK), тогда как Microsoft Store использует форматы APPX и XAP . (И Google Play, и Microsoft Store имеют одноименные менеджеры пакетов.)
По своей природе свободное и открытое программное обеспечение , пакеты под схожими и совместимыми лицензиями доступны для использования в ряде операционных систем. Эти пакеты можно объединять и распространять с помощью настраиваемых и внутренне сложных систем упаковки для обработки множества перестановок программного обеспечения и управления зависимостями и конфликтами, связанными с конкретной версией. Некоторые системы упаковки свободного и открытого программного обеспечения также сами выпускаются как свободное и открытое программное обеспечение. Одно из типичных различий между управлением пакетами в проприетарных операционных системах, таких как Mac OS X и Windows, и в свободном и открытом программном обеспечении, таком как Linux, заключается в том, что системы свободного и открытого программного обеспечения позволяют также устанавливать и обновлять сторонние пакеты с помощью того же механизма, тогда как менеджеры пакетов Mac OS X и Windows будут обновлять только программное обеспечение, предоставленное Apple и Microsoft соответственно (за исключением некоторых сторонних драйверов в Windows). Возможность непрерывного обновления стороннего программного обеспечения обычно добавляется путем добавления URL-адреса соответствующего репозитория в файл конфигурации управления пакетами.
Помимо менеджеров приложений системного уровня, существуют некоторые дополнительные менеджеры пакетов для операционных систем с ограниченными возможностями и для языков программирования , разработчикам которых требуются новейшие библиотеки .
В отличие от менеджеров пакетов системного уровня, менеджеры пакетов прикладного уровня фокусируются на небольшой части программной системы. Обычно они находятся в дереве каталогов, которое не поддерживается менеджером пакетов системного уровня, например, c:\cygwin или /opt/sw . [29] Однако это может быть не так для менеджеров пакетов, которые работают с библиотеками программирования, что может привести к возможному конфликту, поскольку оба менеджера пакетов могут заявлять, что они «владеют» файлом, и могут нарушить обновления.
В 2016 году Эдгард Маркс, ученый-компьютерщик из Лейпцигского университета, ввел термин Data Dependency Management [30] для обозначения систем, которые занимаются управлением данными. Системы Data Dependency Management предназначены для упрощения развертывания и управления данными в облаке, на персональных компьютерах или интеллектуальных устройствах (edge). Фреймворки Data Dependency Management могут использоваться для описания того, как были задуманы данные, лицензирования, а также их зависимостей. Концепция управления зависимостью данных исходит из инструментов управления зависимостями пакетов программного обеспечения, таких как npm для JavaScript, gem для Ruby и NuGet для .NET. Их обоснование заключается в том, чтобы позволить пользователям управлять зависимостью программного обеспечения от данных, например, моделей машинного обучения для приложений, управляемых данными. Они полезны для публикации, поиска и установки пакетов данных. Типичным примером фреймворков управления зависимостью данных являются Hugging Face, KBox [31] и другие.
Ян Мердок прокомментировал, что управление пакетами — это «самое большое достижение, которое Linux привнес в отрасль», что оно стирает границы между операционной системой и приложениями и что оно «упрощает продвижение новых инноваций [...] на рынок и [...] развитие ОС». [32]
Также существует конференция для разработчиков менеджеров пакетов, известная как PackagingCon. Она была создана в 2021 году с целью понять различные подходы к управлению пакетами. [33]
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )