Одно из основных отличий между дистрибутивами Linux - это способ управления пакетами программного обеспечения.
Из этой статьи вы узнаете что такое пакеты, форматы пакетов и пакетные менеджеры в Linux, а также как они работают и какие типы пакетов в Linux вообще существуют.
Содержание статьи
- Что такое пакетный менеджер в Linux
- Что такое пакет?
- Как работают пакетные менеджеры?
- Виды пакетных менеджеров
- Выводы
Что такое пакетный менеджер в Linux
Если говорить простыми словами, пакетный менеджер - это инструмент, с помощью которого вы можете устанавливать, удалять, обновлять, настраивать и управлять пакетами программного обеспечения в операционной системе. Пакетный менеджер может быть графическим приложением, как центр приложений, или инструментом командной строки, как apt-get или pacman.
Скорее всего, вы часто встречали термин пакет на этом сайте или на других сайтах о Linux. Для того чтобы понять что такое пакетный менеджер сразу надо понять что такое пакет.
Что такое пакет?
В данном контексте, пакет обычно означает приложение. Это может быть графическое приложение, инструмент командной строки или даже библиотека используемая другими программами. Пакет представляет из себя архив файлов, содержащий исполняемый файл программы, конфигурацию и информацию о её зависимостях.
Раньше программы нужно было устанавливать из исходного кода. Тогда вам нужно было посмотреть файл README программы, найти там от каких компонентов программа зависит и где должны находится исполняемые файлы. Обычно репозиторий программы содержит скрипт configure или Makefile. Однако вам всё равно надо было самому собрать программу из исходников вместе со всеми её зависимостями (которые часто тоже надо было собирать из исходников).
Для того чтобы это всё упростить разработчики дистрибутивов Linux создали свои форматы пакетов. Это позволяет предоставлять пользователям готовые к использованию (уже скомпилированные) исполняемые файлы, метаданные (название, версию и т д), а также зависимости.
Это как испечь торт и купить торт:
Примерно в середине 90-х, разработчики Debian создали формат пакетов .deb. А в Red Hat создали систему управления пакетами RPM (Сокращение от Red Hat Package Manager). Вы всё ещё можете компилировать программное обеспечение, но теперь это не обязательно. Конечно, для взаимодействия с этими пакетами и их использования вам понадобится пакетный менеджер.
Как работают пакетные менеджеры?
Обратите внимание, что пакетный менеджер - это общий концепт, использующийся не только в Linux. Вы можете также увидеть пакетные менеджеры разработанные для разных программ или языков программирования. Например, есть пакетный менеджер PIP для управления пакетами Python и даже текстовый редактор Atom имеет собственный пакетный менеджер для установки плагинов.
По скольку эта статья всё же про Linux, будем смотреть на вещи из перспективы Linux. Хотя, большинство написанного здесь будет актуально для всех пакетных менеджеров.
Вот диаграмма, сделанная на основе данных из SUSE Wiki, которая поможет вам понять как работает пакетный менеджер:
Почти все дистрибутивы Linux имеют репозитории пакетов, которые содержат колекции пакетов программного обеспечения. Таких репозиториев может быть несколько и репозиторий может хранить программное обеспечения разных видов.
Кроме того, репозитории содержат мета-данные для каждого пакета, с информацией такой как: имя пакета, версия, описание и т д. Это та информация, которую вы видите когда выполняете команду просмотра информации о пакете. В Ubuntu/Debian это apt с параметром show:
apt show
Ваш пакетный менеджер в первую очередь взаимодействует с метаданными. Обычно он создает локальный кеш мета данных в вашей системе. Когда вы выполняете команду обновления, пакетный менеджер обновляет локальный кеш, получая новые метаданные из репозитория. Например:
apt update
Когда же вы выполняете команду установки программы, например apt install, то пакетный менеджер обращается к этому кешу, а затем уже скачивает файлы пакета через интернет из соотвествующего репозитория.
Пакет может может иметь зависимости. Это значит что пакетному менеджеру будет необходимо установить ещё и другие пакеты. Это всё обычно происходит автоматически и все нужное устанавливается вместе с пакетом который вы хотите установить:
Аналогично, когда вы удаляете пакет используя пакетный менеджер, он автоматически удаляет пакеты которые больше не нужны. Или как минимум, информирует вас что система содержит более не используемые пакеты, которые можно удалить.
Кроме установки и удаления, вы можете использовать пакетный менеджер для того чтобы настроить пакеты так как вам нужно. Например, можно запретить обновление определенного пакета при обновлении системы. Пакетные менеджеры могут делать много других вещей.
Виды пакетных менеджеров
Пакетные менеджеры отличаются в зависимости от формата пакетов. Однако для некоторых форматов пакетов может быть несколько пакетных менеджеров. Например, для формата пакетов RPM используются пакетные менеджеры Yum и Dnf. Для Deb существуют apt-get и apititude работающие в терминале.
Но пакетные менеджеры могут быть не только для командной строки. Для Ubuntu и Debian есть пакетный менеджер с графическим интерфейсом Synaptic. Центр приложений вашего дистрибутива тоже пакетный менеджер, даже если он использует apt или dnf для управления пакетами.
Выводы
Не будем дальше углубляться в эту тему, потому что учитывая разнообразие дистрибутивов Linux, о пакетных менеджерах можно говорить очень много. Но это отдалит нас от основной задачи понять что же такое пакетный менеджер. Также в этой статье не были упомянуты современные универсальные форматы пакетов Snap и Flatpak. Надеюсь теперь вы немного лучше понимаете как устроено управление пакетами в Linux.