stringtranslate.com

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

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

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ «Что такое менеджер пакетов?». Архивировано из оригинала 17 октября 2017 года . Проверено 19 декабря 2018 г.
  2. ^ «Распространение программного обеспечения». Делл КАСЕ. Архивировано из оригинала 3 октября 2015 года . Проверено 11 июля 2012 года .
  3. ^ «История управления пакетами *nix» . 14 августа 2017 г. Архивировано из оригинала 24 октября 2021 г. Проверено 12 октября 2021 г.
  4. ^ «Обзор выпуска InfoMagic за декабрь 1994 г.» . Архивировано из оригинала 29 октября 2021 года . Проверено 12 октября 2021 г.
  5. ^ «Хронология Perl и его культуры». Архивировано из оригинала 11 января 2013 года . Проверено 29 октября 2021 г.
  6. ^ Людовик Куртес, Управление функциональными пакетами с помощью Guix. Архивировано 15 мая 2020 г. в Wayback Machine , июнь 2013 г., Мадрид, Европейский симпозиум по Lisp 2013.
  7. Такер, Крис (15 марта 2007 г.). «OPIUM: Оптимальный менеджер установки/удаления пакетов» (PDF) . 29-я Международная конференция по программной инженерии (ICSE'07). Калифорнийский университет в Сан-Диего. п. 1. дои : 10.1109/ICSE.2007.59. ISBN 978-0-7695-2828-1. S2CID  1279451. Архивировано (PDF) из оригинала 14 июня 2011 года . Проверено 14 сентября 2011 г.
  8. ^ «Схемы классификации репозиториев Linux» . www.brainticle.blogspot.com. 13 января 2006 г. Архивировано из оригинала 11 октября 2007 г. Проверено 1 марта 2008 г.
  9. ^ "CentOS yum закрепляет обороты" . centos.org. Архивировано из оригинала 2 ноября 2007 года . Проверено 1 марта 2008 г.{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  10. ^ ab "Страница руководства pacman(8)" . Archlinux.org . Архивировано из оригинала 31 августа 2019 года . Проверено 1 марта 2008 г.
  11. ^ «Как сохранить установленными определенные версии пакетов (сложные)» . debian.org. Архивировано из оригинала 14 ноября 2019 года . Проверено 1 марта 2008 г.
  12. ^ «Можно закрепить пакет в черном списке» . Архивировано из оригинала 22 июля 2011 года . Проверено 19 августа 2010 г.
  13. ^ "документация/sles11". ru.opensuse.org . Архивировано из оригинала 1 декабря 2022 года . Проверено 16 августа 2017 г.
  14. ^ «Менеджер пакетов XBPS - Справочник по Void Linux» . docs.voidlinux.org . Архивировано из оригинала 23 января 2023 года . Проверено 19 декабря 2022 г.
  15. ^ "swupd-client/swupd.1.rst на master ·clearlinux/swupd-client · GitHub». github.com . Архивировано из оригинала 7 декабря 2022 года . Проверено 22 июня 2022 г.
  16. ^ "Pacman/Rosetta - ArchWiki". wiki.archlinux.org . Архивировано из оригинала 20 ноября 2016 года . Проверено 17 сентября 2017 г.
  17. ^ «Исходный код dpkg версии 0.93.15» . Архивировано из оригинала 2 апреля 2015 года . Проверено 19 декабря 2018 г.
  18. ^ Элко Долстра, «Интеграция разработки и развертывания программного обеспечения». Архивировано 21 сентября 2019 г. на Wayback Machine .
  19. Уотерс, Джон К. (8 сентября 2015 г.). «JFrog выпускает «универсальное» хранилище артефактов» . АДТ Маг . Журнал «Тенденции разработки приложений». Архивировано из оригинала 2 марта 2016 года . Проверено 19 февраля 2016 г.
  20. Декостер, Ксавье (18 августа 2013 г.). «Обзор экосистемы NuGet». CodeProject.com . Архивировано из оригинала 5 июля 2020 года . Проверено 6 февраля 2020 г.
  21. ^ "Финк - Дом" . finkproject.org . Архивировано из оригинала 18 августа 2021 года . Проверено 2 сентября 2021 г.
  22. ^ «Управление зависимостями данных». github.com . Проверено 13 июля 2023 г.
  23. ^ "КБокс". gieexplore.ieee.org : 125–132. Январь 2017 г. doi :10.1109/ICSC.2017.77. S2CID  14980310 . Проверено 13 июля 2023 г.
  24. ^ «Как управление пакетами все изменило» . ianmurdock.com. Архивировано из оригинала 23 февраля 2009 года . Проверено 1 марта 2008 г.
  25. ^ «PackagingCon 2021 - конференция для разработчиков и упаковщиков менеджеров пакетов» . сайт упаковки-con.org . Архивировано из оригинала 2 сентября 2021 года . Проверено 2 сентября 2021 г.

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