stringtranslate.com

Менеджер пакетов

Synaptic , пример менеджера пакетов

Менеджер пакетов или система управления пакетами — это набор программных инструментов, которые автоматизируют процесс установки, обновления, настройки и удаления компьютерных программ для компьютера согласованным образом. [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, полагаются почти исключительно на магазины приложений своих поставщиков и, таким образом, используют собственные специализированные системы управления пакетами.

Сравнение с установщиками

Менеджер пакетов часто называют «менеджером установки», что может привести к путанице между менеджерами пакетов и установщиками . Различия включают в себя:

Сравнение с утилитой автоматизации сборки

Большинство систем управления конфигурацией программного обеспечения рассматривают сборку программного обеспечения и развертывание программного обеспечения как отдельные, независимые шаги. Утилита автоматизации сборки обычно берет файлы исходного кода, которые могут быть прочитаны человеком , уже находящиеся на компьютере, и автоматизирует процесс их преобразования в исполняемый двоичный пакет на том же или удаленном компьютере. Позже менеджер пакетов, обычно работающий на каком-то другом компьютере, загружает эти предварительно созданные исполняемые двоичные пакеты через Интернет и устанавливает их.

Однако оба типа инструментов имеют много общего:

Некоторые инструменты, такие как 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]

Смотрите также

Ссылки

  1. ^ "Что такое менеджер пакетов?". Архивировано из оригинала 17 октября 2017 г. Получено 19 декабря 2018 г.
  2. ^ "Software Distribution". Dell KACE. Архивировано из оригинала 3 октября 2015 года . Получено 11 июля 2012 года .
  3. ^ "История управления пакетами *nix". 14 августа 2017 г. Архивировано из оригинала 24 октября 2021 г. Получено 12 октября 2021 г.
  4. ^ "Обзор выпуска InfoMagic за декабрь 1994 года". Архивировано из оригинала 29 октября 2021 г. Получено 12 октября 2021 г.
  5. ^ "The Timeline of Perl and its Culture". Архивировано из оригинала 11 января 2013 года . Получено 29 октября 2021 года .
  6. Людовик Куртес, Функциональное управление пакетами с помощью Guix. Архивировано 15 мая 2020 г. на Wayback Machine , июнь 2013 г., Мадрид, Европейский симпозиум по Lisp 2013 г.
  7. ^ Такер, Крис (15 марта 2007 г.). "OPIUM: Optimal Package Install/Uninstall Manager" (PDF) . 29-я Международная конференция по программной инженерии (ICSE'07). Калифорнийский университет в Сан-Диего. стр. 1. doi :10.1109/ICSE.2007.59. ISBN 978-0-7695-2828-1. S2CID  1279451. Архивировано (PDF) из оригинала 14 июня 2011 г. Получено 14 сентября 2011 г.
  8. ^ "Схемы классификации репозиториев Linux". braintickle.blogspot.com. 13 января 2006 г. Архивировано из оригинала 11 октября 2007 г. Получено 1 марта 2008 г.
  9. ^ "CentOS yum pinning rpms". centos.org. Архивировано из оригинала 2 ноября 2007 г. Получено 1 марта 2008 г.{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  10. ^ ab "pacman(8) Manual Page". archlinux.org . Архивировано из оригинала 31 августа 2019 . Получено 1 марта 2008 .
  11. ^ "Как сохранить установленными определенные версии пакетов (сложный)". Debian.org. Архивировано из оригинала 14 ноября 2019 г. Получено 1 марта 2008 г.
  12. ^ "Apt pinning to blacklist a package". Архивировано из оригинала 22 июля 2011 г. Получено 19 августа 2010 г.
  13. ^ "documentation/sles11". en.opensuse.org . Архивировано из оригинала 1 декабря 2022 г. Получено 16 августа 2017 г.
  14. ^ "XBPS Package Manager - Void Linux Handbook". docs.voidlinux.org . Архивировано из оригинала 23 января 2023 г. Получено 19 декабря 2022 г.
  15. ^ "swupd-client/swupd.1.rst at master · clearlinux/swupd-client · GitHub". github.com . Архивировано из оригинала 7 декабря 2022 г. . Получено 22 июня 2022 г. .
  16. ^ "Pacman/Rosetta – ArchWiki". wiki.archlinux.org . Архивировано из оригинала 20 ноября 2016 . Получено 17 сентября 2017 .
  17. ^ "dpkg version 0.93.15 source code". Архивировано из оригинала 2 апреля 2015 г. Получено 19 декабря 2018 г.
  18. ^ Элко Долстра, «Интеграция разработки и развертывания программного обеспечения». Архивировано 21 сентября 2019 г. на Wayback Machine .
  19. ^ «Brew — это замена магазину приложений macOS, о необходимости которой вы даже не подозревали». www.msn.com . Получено 25 мая 2024 г.
  20. ^ ab King, Bertel (17 марта 2017 г.). «Сравнение магазинов приложений Linux: какой из них вам подходит?». MUO . Получено 25 мая 2024 г.
  21. ^ «Что такое менеджер пакетов?». www.debian.org .
  22. ^ Барретт, Брайан. «Как 18 вредоносных приложений проникли в App Store компании Apple». Wired .
  23. ^ Уиттакер, Зак (24 октября 2019 г.). «Миллионы загрузили десятки приложений Android из Google Play, которые были заражены рекламным ПО». TechCrunch .
  24. ^ Ньюман, Лили Хей. «Никогда (никогда) не загружайте приложения Android вне Google Play». Wired .
  25. ^ Оямаа, Андрес; Дууна, Карл (2012). «Оценка безопасности платформы Node.js». Международная конференция по интернет-технологиям и защищенным транзакциям 2012 года . IEEE. ISBN 978-1-4673-5325-0. Получено 22 июля 2016 г.
  26. ^ "Кодекс поведения npm: приемлемое содержимое пакета" . Получено 9 мая 2017 г.
  27. ^ Уотерс, Джон К. (8 сентября 2015 г.). «JFrog выпускает „универсальный“ репозиторий артефактов». ADT Mag . Журнал тенденций разработки приложений. Архивировано из оригинала 2 марта 2016 г. Получено 19 февраля 2016 г.
  28. ^ Декостер, Ксавье (18 августа 2013 г.). «Обзор экосистемы NuGet». CodeProject.com . Архивировано из оригинала 5 июля 2020 г. . Получено 6 февраля 2020 г. .
  29. ^ "Fink – Home". finkproject.org . Архивировано из оригинала 18 августа 2021 г. . Получено 2 сентября 2021 г. .
  30. ^ "Управление зависимостью данных". github.com . Получено 13 июля 2023 г. .
  31. ^ "KBox". IEEE : 125–132. Январь 2017. doi :10.1109/ICSC.2017.77. S2CID  14980310 . Получено 13 июля 2023 .
  32. ^ "Как управление пакетами изменило все". ianmurdock.com. Архивировано из оригинала 23 февраля 2009 года . Получено 1 марта 2008 года .
  33. ^ "PackagingCon 2021 – конференция для разработчиков менеджеров пакетов и упаковщиков". packing-con.org . Архивировано из оригинала 2 сентября 2021 г. . Получено 2 сентября 2021 г. .

Внешние ссылки