Менеджер пакетов или система управления пакетами — это набор программных инструментов, которые последовательно автоматизируют процесс установки, обновления, настройки и удаления компьютерных программ на компьютере . [1]
Менеджер пакетов имеет дело с пакетами , дистрибутивами программного обеспечения и данными в архивных файлах . Пакеты содержат метаданные , такие как имя программного обеспечения, описание его назначения, номер версии, поставщика, контрольную сумму (предпочтительно криптографическую хэш-функцию ) и список зависимостей , необходимых для правильной работы программного обеспечения. После установки метаданные сохраняются в локальной базе данных пакетов. Менеджеры пакетов обычно поддерживают базу данных зависимостей программного обеспечения и информации о версиях, чтобы предотвратить несоответствие программного обеспечения и отсутствие предварительных требований. Они тесно сотрудничают с репозиториями программного обеспечения , менеджерами бинарных репозиториев и магазинами приложений .
Менеджеры пакетов созданы для устранения необходимости установки и обновления вручную. Это может быть особенно полезно для крупных предприятий, чьи операционные системы обычно состоят из сотен или даже десятков тысяч различных пакетов программного обеспечения. [2]
Первым менеджером пакетов был SMIT (и его внутренняя программа установки) от IBM AIX . SMIT был представлен вместе с AIX 3.0 в 1989 году.
Ранние менеджеры пакетов, появившиеся примерно в 1994 году, не имели автоматического разрешения зависимостей [3] , но уже могли радикально упростить процесс добавления и удаления программного обеспечения из работающей системы. [4]
Примерно к 1995 году, начиная с CPAN , менеджеры пакетов начали загружать пакеты из репозитория, автоматически разрешать их зависимости и устанавливать их по мере необходимости, что значительно упростило установку, удаление и обновление программного обеспечения из системы. [5]
Пакет программного обеспечения — это архивный файл , содержащий компьютерную программу, а также необходимые метаданные для ее развертывания. Компьютерная программа может иметь исходный код , который необходимо сначала скомпилировать и собрать. [6] Метаданные пакета включают описание пакета, версию пакета и зависимости (другие пакеты, которые необходимо установить заранее).
На менеджеров пакетов возложена задача поиска, установки, обслуживания или удаления пакетов программного обеспечения по команде пользователя. Типичные функции системы управления пакетами включают в себя:
Компьютерные системы, которые полагаются на динамическое связывание библиотек, а не на статическое связывание библиотек , совместно используют исполняемые библиотеки машинных инструкций в пакетах и приложениях. В этих системах конфликтующие отношения между различными пакетами, требующими разных версий библиотек, приводят к проблеме, в просторечии известной как « ад зависимостей ». В системах Microsoft Windows это также называется « DLL-адом » при работе с динамически подключаемыми библиотеками. [7]
Современные менеджеры пакетов в основном решили эти проблемы, позволяя параллельную установку нескольких версий библиотеки (например, системы OPENSTEP Framework ), любых зависимостей (например, слотов в 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] Эти менеджеры пакетов стремятся стандартизировать подход предприятий ко всем типам пакетов. Они дают пользователям возможность применять показатели безопасности и соответствия ко всем типам артефактов. Универсальные менеджеры пакетов считаются центральным элементом цепочки инструментов DevOps . [20]
Каждый менеджер пакетов полагается на формат и метаданные пакетов, которыми он может управлять. То есть менеджерам пакетов необходимо, чтобы группы файлов были объединены для конкретного менеджера пакетов вместе с соответствующими метаданными, такими как зависимости. Часто основной набор утилит управляет базовой установкой этих пакетов, а несколько менеджеров пакетов используют эти утилиты для предоставления дополнительных функций.
Например, yum использует rpm в качестве бэкэнда. Yum расширяет функциональность серверной части, добавляя такие функции, как простая настройка для обслуживания сети систем. Другой пример: диспетчер пакетов Synaptic предоставляет графический интерфейс пользователя с использованием библиотеки 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 . [21] Однако это может быть не так для менеджеров пакетов, которые работают с программными библиотеками, что приводит к возможному конфликту, поскольку оба менеджера пакетов могут претендовать на «владение» файлом и могут нарушить обновление.
В 2016 году Эдгард Маркс, ученый-компьютерщик из Лейпцигского университета, ввёл термин «Управление зависимостями данных» [22] для обозначения систем, которые занимаются управлением данными. Системы управления зависимостями данных предназначены для облегчения развертывания и управления данными в облаке, на персональных компьютерах или интеллектуальных устройствах (периферийных устройствах). Структуры управления зависимостями данных можно использовать для описания того, как данные были задуманы, лицензирования, а также их зависимостей. Концепция управления зависимостями данных исходит из таких инструментов управления зависимостями программных пакетов, как npm для JavaScript, gem для Ruby и NuGet для .NET. Их смысл заключается в том, чтобы позволить пользователям управлять зависимостью программного обеспечения от данных, например моделей машинного обучения для приложений, управляемых данными. Они полезны для публикации, поиска и установки пакетов данных. Типичным примером инфраструктур управления зависимостями данных являются Hugging Face, KBox и другие.
Ян Мердок прокомментировал, что управление пакетами — это «самое большое достижение, которое Linux привнес в индустрию», что оно стирает границы между операционной системой и приложениями и что оно «облегчает внедрение новых инноваций [...] в рынок и [...] развивать ОС». [24]
Существует также конференция для разработчиков менеджеров пакетов, известная как PackagingCon. Он был создан в 2021 году с целью понять различные подходы к управлению пакетами. [25]
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )