Давний спор – RPM или DEB что лучше и удобнее и так ли это все важно сейчас?
Все кто когда-либо работал с современным ПК понимают что установка/удаление дополнительного программного обеспечения является одним из ключевых аспектов администрирования и управления современных операционных систем и совсем необязательно быть профессиональным ИТ специалистом, с установкой дополнительного ПО практически повседневно сталкиваются и обычные пользователи. Если же говорить конкретно о дистрибутивах Linux, то стоит отметить, что на сегодняшний день большинств о семейств Linux дистрибутивов из числа широко представленных и используемых в корпоративном мире используют одну из двух самых распространенных систем установки программного обеспечения. Это используемая в Debian и всех ее производных, в том числе и в Ubuntu – deb, а также разработанная в RedHat и используемая в Red Hat Enterprise Linux и всех основанных на ней дистрибутивов – rpm. Исторически эти две системы соседствуют и их поклонники зачастую враждуют между собой отдавая предпочтения первому или второму формату. Попробуем разобраться в чем их ключевые преимущества и недостатки а также зададимся вопросом – а так ли это критично на сегодняшний день, в особенности с учетом появления таких технологий как OS-tree.
Итак, с точки зрения системного администратора, эти две системы установки пакетов не имеют серьезных, значимых архитектурных различий. Оба формата и Deb и Rpm – это по своей сути банальные архивы, созданные с помощью утилиты ar. Данные архивы включают в себя файлы программ, исполняемые файлы, библиотеки или файлы конфигурации. Кроме этого, в каждый пакет входят метаданные системы управления пакетами, именно этим и отличаются rpm и deb. Собственно сами файлы пакетов отличаются в основном именно этим, но не стоит забывать что еще есть система управления пакетами.
RPM (Red Hat Package Manager)
RPM – менеджер пакетов, используемый в дистрибутивах, основанных на Red Hat Enterprise Linux или архитектурно с ними совместимых, а также в дистрибутивах-форков, к примеру таких как широко известные не только в корпоративной среде но и для обычных пользователей Fedora, OpenSUSE, Red Hat, CentOS и других. Изначально этот пакетный менеджер был разработан в компании Red Hat еще в 1997 году и только для их собственного дистрибутива, но со временем он получил значительное распространение и стал применяться и в других дистрибутивах операционной системы.
С технической точки зрения, здесь используется сжатие gzip по алгоритму cpio и особый формат файла архива. Кроме cpio могут использоваться и другие алгоритмы сжатия, например, lzma или xz. В последнее время все программное обеспечение подписывается ключами для удостоверения подлинности, в частности RPM поддерживает подпись с помощью GPG и MD5. В начале файла находится заголовок, который идентифицирует файл как rpm архив, затем идет подпись, для проверки целостности и подлинности файла. Дальше идет заголовок, в котором содержаться данные о самом пакете, версия, архитектура, список файлов и т д. И только после всего этого идет сам архив с файлами пакета.
Для работы с RPM могут использоваться несколько различных пакетных менеджеров, это универсальная утилита rpm, пакетный менеджер zypper в OpenSUSE, dnf в Fedora, urpmi в Mageia, yum – во многих дистрибутивах, основанных на Fedora.
Deb (Debian Package Manager)
Если же говорить о DEB то файлы *.deb – это по сути архивы, созданные с помощью утилиты ar. Они могут быть сжаты с помощью GZIP, Bzip2, lzma, или XZ. Чаще всего для управления пакетами deb используется утилита dpkg, Но существует и множество других, не менее известных, например, gdebi, apt, aptitude и т.д. Deb пакеты используются для установки программного обеспечения во многих дистрибутивах, основанных на Debian или архитектурно совместимых с ним, в частности стоит назвать ныне широко известный (не менее чем сам Debian) Ubuntu со многими основанными на нем дистрибутивами. Из особенностей системы управления пакетами DEB можно назвать использование приоритетов для классификации пакетов по важности. Это пакеты, которые не находятся в зависимостях программы, но желательны для установки вместе с ней.
Техническое сравнение форматов пакетов
Попробуем же провести техническое сравнение данных форматов установочных пакетов. Несмотря на то, что оба формата по сути своей представляют архивный файл и с точки зрения пользователя или администратора ОС процесс работы с ними (установка/обновление/удаление) очень схож существуют следующие технические отличия представленные в таблице 1.
Таблица 1 – Техническое сравнение форматов пакетов.
Функция | DEB | RPM | Комментарий |
Верификация целостности пакета, безопасность и аутентификация | |||
PGP-подпись пакета | нет | да | Технически пакеты DEB могут поддерживать PGP подпись но в большинстве случаев подпись не применяется. |
Чек-суммы | да | да | |
Сохранение и выставление прав доступа и хозяев на устанавливаемые из пакета файлы | да | да | |
Использование с применением стандартных общедоступных утилит | |||
Распознавание с помощью “file” | да | да | |
Возможность распаковки стандартными утилитами | да | нет | |
Доступность метаданных пакета к прочтению | да | нет | |
Создание пакета | нет | нет | |
Метаданные | |||
Указание перечня зависимостей пакета | да | да | |
Рекомендованные к установки пакеты (расширяющие функционал устанавливаемого) | да | да | |
Конфликты с другими пакетами | да | да | |
Виртуальные пакеты | да | да | |
Зависимости и конфликты ориентированные на проверку версий пакетов-зависимостей | да | да | |
Зависимости от файлов | нет | да | Проверка доступен ли в системе определенный файл без проверки того какой пакет его предоставляет |
Наличие подписи или копирайта | нет | да | DEB имеет соответствующие подписи но есть определенная сложность их извлечения |
Группы пакетов | да | да | |
Приоритезация | да | нет | Пакету может быть назначен “приоритет” или “значимость” для системы с целью повышенного контроля версионности, выхода обновлений (или их запрет). |
Работа с пакетом | |||
Интерактивная установка | да | нет | Установка в рамках которой требуется взаимодействие с пользователем и указание им параметров. |
Предустановочный набор сценариев | да | да | |
Постустановочный набор сценариев | да | да | |
Набор сценарием перед удалением пакета | да | да | |
Набор сценариев после удаления пакета | да | да | |
Триггеры на события | нет | да | Выполнение действий пакетным менеджером над всеми программными пакетами затронутыми установкой или удалением конкретного пакета |
Формат пакета | |||
Используемый архиватор | GZIP, Bzip2, lzma, XZ | gzip |
Техническое сравнение пакетных менеджеров
Как видно из предыдущего раздела, разница между форматами пакетов с точки зрения их технических возможностей действительно невелика. Попробуем посмотреть со стороны пакетных менеджеров, т.е. того программного обеспечения что ими управляет. В силу большого многообразия доступных на сегодняшний день в различных дистрибутивах пакетных менеджеров, данное сравнение будет затрагивать наиболее распространенные, известные и многофункциональные из них.
Пакетный менеджер dnf/yum (rpm)
DNF и YUM — это менеджеры пакетов, которые используются в дистрибутивах Linux на базе Red Hat Enterprise Linux и их производных. DNF по сути является дальнейшим развитием yum и почти по всем командам полностью совместим с YUM и может выступать его прозрачной заменой.
В дистрибутивах Linux на базе Red Hat Enterprise Linux основным пакетным менеджером является YUM, расшифровываемый как Yellow Dog Updater Modifier. Это менеджер пакетов по умолчанию во многих дистрибутивах на основе RPM, включая CentOS, RHEL и Oracle Linux. Он облегчает установку, обновление, удаление и управление зависимостями в системе.
DNF, в свою очередь является преемником YUM. Этот менеджер пакетов используется в дистрибутивах Linux на основе RPM. Поскольку это своего рода эволюция Yum, она демонстрирует лучшую производительность. DNF — это многофункциональный менеджер пакетов, который поддерживает параллельную загрузку, модульные репозитории и расширенную поддержку плагинов.
Попробуем рассмотреть функционал данных пакетных менеджеров и сравнить их между собой, как представлено в таблице 2.
Таблица 2 – Техническое сравнение пакетных менеджеров DNF и YUM
Параметр | DNF | YUM |
Пакетный менеджер | Пакетный менеджер по умолчанию в RHEL 8, Fedora и последующих версиях RHEL. | Пакетный менеджер по умолчанию в RHEL 6,7, CentOS 6, 7, Oracle Linux 6, 7 и старых версиях RHEL |
API | Полностью документированный | Слабая документация, по сравнению с DNF |
Память | Использует меньше памяти при синхронизации метаданных | Интенсивное использование памяти, из-за использования python |
Производительность | Быстрее чем YUM и лучшее разрешение зависимостей | Довольно низкая |
Строк кода | 29к строк на языках C, C++, Python | 56к строк кода на Python |
Алгоритм решения зависимостей | Улучшенный по сравнению с YUM | Простой |
Обновление зависимостей | Не обновляет установленные зависимости, при установке пакета | Есть опция для обновления зависимостей, при установке пакета |
Управление репозиториями | Если один из репозиториев недоступен, то он будет пропущен, и работа продолжится | Прекратит работу если какой-либо репозиторий не доступен |
Пакетный менеджер apt (deb)
В дистрибутивах Linux на базе Debian установка и удаление программного обеспечения обычно управляются с помощью системы управления пакетами, известной как Advanced package Tool (APT). Он использует инструменты для управления, обновления, установки и удаления пакетов операционной системы. В качестве эталонного менеджера RPM пакетов для проведения технического сравнения был выбран YUM как наиболее широко распространенный на текущий момент. С его функциональным сравнением с более новым DNF можно ознакомиться в предыдущем разделе данной статьи.
Техническое сравнение (APT vs YUM)
Таблица 3 – Техническое сравнение APT и Yum
Параметр | APT | YUM |
Поддерживаемый формат пакетов | deb | rpm |
Используется | Дистрибутивах на базе Debian (Ubuntu, Mint) | Дистрибутивах на базе RedHat (SuSe, Oracle Linux, Fedora) |
Репозиторий пакетов | Репозитории APT для хранения метаданных и информации о пакете | Репозитории RPM для хранения метаданных и информации о пакете |
Возможности поиска и управления пакетами | Доступно сравнительно меньше команд, чем YUM. | Доступно больше опций, чем APT. |
Установка пакетов | Не разрешена из локальных файлов без добавления (./). | Разрешена из локальных файлов |
Обновления | Для обновления пакетов необходимо использовать upgrade | Для обновления пакетов необходимо использовать update |
Зависимости | Для разрешения зависимости используются несколько проходов | Для разрешения зависимости используется один проход. |
Поддержка транзакций | Нет | Есть, с возможностью откатить назад установленные обновления или пакет с его зависимостями |
История установок | Нет | Можно увидеть пакеты установленные пользователем, без учета их зависимостей |
Но на сегодняшний день появились и новые веяния и подходы к управлению программным обеспечением, давайте с ними ознакомимся.
Технология OS-Tree
Libostree – это библиотека, предназначенная для управления и обновления корневых файловых систем в операционных системах на основе Linux. Она была разработана с учетом требований к безопасности, надежности и эффективности обновлений в распределенных и серверных средах. Libostree является ключевым компонентом таких проектов, как OSTree и Flatpak, и активно используется в различных дистрибутивах Linux, таких как Fedora Silverblue, Endless OS и CoreOS.
OSTree – это система управления корневыми файловыми системами, которая использует libostree для хранения и обновления файловых систем. Она предоставляет механизм версионирования файловой системы, что позволяет безопасно и эффективно обновлять систему целиком или откатываться к предыдущим версиям. OSTree используется в различных сценариях, например, для обновления операционных систем на серверах, встроенных устройствах и контейнерах.
Принцип работы libostree базируется на концепции иммутабельности файловых систем. Это означает, что файловая система не изменяется напрямую, а каждое обновление создает новую версию файловой системы. При этом изменения сохраняются в виде дельт-патчей, что позволяет экономить место и уменьшать время обновления. Каждая версия файловой системы имеет свой уникальный идентификатор (хеш), что обеспечивает надежность и возможность проверки целостности данных.
Одним из ключевых преимуществ libostree является возможность атомарного обновления операционной системы. Это означает, что обновление либо полностью применяется, либо откатывается целиком в случае ошибки. Такой подход обеспечивает стабильность и надежность системы во время процесса обновления. Кроме того, libostree поддерживает механизмы автоматического разрешения конфликтов при обновлении, что упрощает процесс обслуживания системы.
Libostree также обеспечивает механизмы безопасности при обновлении операционной системы. Он поддерживает проверку цифровых подписей обновлений для предотвращения атак на целостность данных. Таким образом, пользователи могут быть уверены в том, что полученные обновления не были изменены злоумышленниками.
Важным аспектом libostree является его интеграция с другими технологиями, такими как Flatpak. Flatpak – это технология пакетирования приложений, которая также использует libostree для хранения и обновления приложений. Используя libostree в комбинации с Flatpak, пользователи получают цельные решения для управления как операционной системой в целом, так и приложениями.
Утилита rpm-ostree работает поверх ostree и позволяет устанавливать RPM-файлы в качестве “слоя” в образ ostree. Это позволяет устанавливать RPM-файлы в ОС.
Когда пакет устанавливается с помощью rpm-ostree, создается новый образ ОС путем добавления полезной нагрузки RPM к существующему образу ОС и создания нового комбинированного образа.
Чтобы увидеть недавно установленные RPM-файлы, необходимо перезагрузить систему с новым образом.
Таблица 4 – Сравнение классического подхода обновления системы при помощи пакетного менеджера (dnf) и управление ПО при помощи rpm-ostree
Параметр | rpm-ostree | dnf |
Тип обновления | Обновление выполнено путём скачивания и применения “слоя” с новыми версиями пакетов целиком. | Систему можно обновить по пакетно, выбрав необходимые пакеты вручную или обновить все доступные |
Доступность новых версий пакетов после установки | Чтобы система увидела обновлённые пакеты необходимо перезагрузить систему с использованием нового образа системы | Новая версия пакета доступна системе сразу после окончания процесса обновления |
Организация файловой системы | Доступ к всем бинарным и библиотечным файлам системы только на чтение. Для записи доступны только каталоги /etc и /var | Классическая файловая система с доступом на чтение-запись пользователю root и выбранным пользователям |
Тестирование бета-версий ОС | Легко можно переключиться на бета-версию следующей версии ОС и последующей перезагрузкой вернуться на стабильную | При обновлении до бета-версии ОС откатиться назад на стабильную будет крайне проблематично или практически невозможно |
Откат системы после неудачного обновления | Очень легко – просто перезагружаемся с предыдущего образа | Крайне затруднителен. Ручной поиск проблем и откат необходимых пакетов. |
Звучит интригующе, по сути если основной образ операционной системы можно обновлять целиком за одну “атомарную” операцию а не каждое приложение в отдельности то не все ли равно что там “под капотом”, какой там формат пакетов используется? Ведь по сути обновление происходит прозрачно для пользователя и не подразумевает никакого вмешательства.
Но это хорошо для основной ОС и окружения, но как быть со всем многообразием прикладного и системного ПО которое пользователь захочет установить в систему? Для решения данной проблемы рассмотрим “стандартизированные” методы пакетирования и дистрибуции ПО под названием SNAP и FlatPak а также проведем их сравнение.
Описание технологии SNAP
Технология Snap – это способ упаковки и доставки приложений для операционных систем Linux, разработанный компанией Canonical, создателем дистрибутива Ubuntu. Snap позволяет упаковывать приложения в изолированные контейнеры, которые содержат все необходимые зависимости и библиотеки, обеспечивая портативность, безопасность и простоту управления приложениями на различных дистрибутивах Linux.
Основные принципы и возможности Snap:
- Контейнеризация приложений – Snap использует технологию контейнеризации для упаковки приложений в изолированные среды, называемые снапами (snaps). Каждый снап содержит приложение и все необходимые зависимости, что позволяет изолировать его от других приложений и от операционной системы. Это повышает безопасность и стабильность работы.
- Портативность и независимость от дистрибутива – приложения Snap могут быть установлены и запущены на различных дистрибутивах Linux, поддерживающих технологию Snap, без необходимости адаптации или перепаковки. Это обеспечивает портативность приложений и упрощает их использование на различных системах.
- Управление зависимостями – Snap упаковывает все необходимые зависимости вместе с приложением, что позволяет избежать проблем совместимости и конфликтов между разными версиями библиотек. Пользователи могут быть уверены, что приложение будет работать корректно, независимо от того, какие версии библиотек уже установлены на их системе.
- Обновления приложений – Snap предоставляет механизм для обновления приложений независимо от операционной системы. Пользователи могут получать обновления напрямую от разработчиков через центральный репозиторий Snap. Это упрощает процесс обновления и позволяет пользователям всегда использовать последние версии приложений.
- Изоляция приложений – Использование контейнеров для запуска приложений обеспечивает изоляцию данных и процессов между различными приложениями (при помощи Apparmor). Каждое приложение работает в своем собственном окружении, не имея доступа к данным других приложений или операционной системы, что повышает безопасность работы системы.
- Цифровые подписи – Snap поддерживает использование цифровых подписей для проверки подлинности и целостности приложений. Это помогает предотвратить внедрение зловредного кода или изменение приложений третьими лицами. Пользователи могут быть уверены, что установленные приложения были созданы официальными разработчиками и не подвергались изменениям после упаковки.
- Расширенные права доступа – Snap позволяет разработчикам указывать права доступа, которые должны быть предоставлены приложению для выполнения определенных операций. Например, приложение может запросить доступ к камере, микрофону или файловой системе. Пользователь может контролировать эти права и предоставлять или отклонять их по запросу.
- Интеграция с рабочим столом – Приложения Snap интегрируются с рабочим столом Linux, обеспечивая полноценную работу с системными ресурсами, такими как меню, значки, темы оформления и т. д. Это делает использование Snap-приложений более комфортным для пользователей и обеспечивает единый пользовательский опыт на различных дистрибутивах Linux.
Описание технологии FLATPAK
Flatpak – это технология упаковки и доставки приложений для операционных систем Linux. Она предоставляет среду исполнения и механизм изоляции для приложений, позволяя им работать в изолированных контейнерах, называемых “песочницами” (sandbox). Это обеспечивает безопасность, надежность и портативность приложений, а также упрощает управление зависимостями и обновлениями.
Основные принципы и возможности Flatpak:
- Контейнеризация приложений – Flatpak использует технологию контейнеризации для упаковки приложений в изолированные контейнеры. Каждое приложение запускается в своей собственной “песочнице”, которая содержит все необходимые зависимости и библиотеки. Это позволяет изолировать приложения друг от друга и от операционной системы, что повышает безопасность и стабильность работы системы.
- Портативность и независимость от дистрибутива – приложения Flatpak могут быть установлены и запущены на любом дистрибутиве Linux, поддерживающем технологию Flatpak, без необходимости перепаковки или адаптации под конкретную систему. Это делает приложения портативными и обеспечивает их независимость от дистрибутивов, что упрощает развертывание и использование на различных системах.
- Обновления приложений – Flatpak предоставляет механизм для обновления приложений независимо от операционной системы. Пользователи могут получать обновления приложений напрямую от разработчиков через центральный репозиторий Flatpak или использовать какой-то другой сторонний репозиторий. Это упрощает процесс обновления и позволяет пользователям всегда использовать последние версии приложений.
- Расширенные права доступа – Flatpak позволяет разработчикам указывать права доступа, которые должны быть предоставлены приложению для выполнения определенных операций. Например, приложение может запросить доступ к камере, микрофону или файловой системе. Пользователь может контролировать эти права и предоставлять или отклонять их по запросу.
- Управление зависимостями – Flatpak позволяет либо упаковывать все необходимые зависимости вместе с приложением, либо размещать библиотеки приложений в окружениях, общих для нескольких пакетов, что устраняет проблемы совместимости и конфликтов между разными версиями библиотек. Пользователи могут быть уверены, что приложение будет работать корректно, независимо от того, какие версии библиотек уже установлены на их систем
- Цифровые подписи – Flatpak поддерживает использование цифровых подписей для проверки подлинности и целостности приложений. Это помогает предотвратить внедрение зловредного кода или изменение приложений третьими лицами. Пользователи могут быть уверены, что установленные приложения были созданы официальными разработчиками и не подвергались изменениям после упаковки.
- Изоляция приложений – Использование песочниц для запуска приложений (при помощи технологии SELinux) обеспечивает изоляцию данных и процессов между различными приложениями. Это повышает безопасность системы, поскольку каждое приложение работает в своем собственном окружении, не имея доступа к данным других приложений или операционной системы.
- Интеграция с рабочим столом – Приложения Flatpak интегрируются с рабочим столом Linux, обеспечивая полноценную работу с системными ресурсами, такими как меню, значки, темы оформления и т.д. Это делает использование Flatpak-приложений более комфортным для пользователей и обеспечивает единый пользовательский опыт на различных дистрибутивах Linux.
Техническое сравнение snap и flatpak
Обе технологии (snap и flatpak) созданы для запуска портируемых приложений, поддерживаемых в любом дистрибутиве Linux. Запуск приложений осуществляется максимально безопасным для основной системы способом, с выдачей только необходимых прав доступа и разрешений на использование того или иного оборудования.
Отличия между технологиями приведены в таблице 5 :
Таблица 5 – Техническое сравнение SNAP и Flatpak
Параметр | flatpak | snap |
Разработчик | Red Hat | Canonical |
Репозитории | Множество репозиториев. Можно создавать свой. | Только Ubuntu Snap Store |
Время запуска приложений | flatpak приложения запускаются быстрее snap | snap приложения пока запускаются медленнее flatpak |
Открытый код | код flatpak полностью открытый (как клиентская, так и серверная часть) | Открытый код имеет только клиентская часть. Серверная часть – проприетарная собственность Canonical |
Изоляция | SELinux | Apparmor |
Стратегия инкапсуляции | flatpak пакеты гораздо меньше по размеру, чем snap пакеты, так как могут устанавливать по зависимости другие flatpak пакеты, которые необходимы для их работы. | В пакете snap должно быть всё, что нужно программе. Тяжёлые runtime (GNOME, KDE) могут быть оформлены в виде отдельного snap |
Права администратора | Не требует прав администратора для установки приложения | Требует root доступа при установке приложения |
На подумать….
В виду того что однозначного выбора в пользу RPM/DEB сделать невозможно, в силу незначительности их технологических и функциональных возможностей, наверное наиболее перспективным является вариант использования и построения дистрибутивов на основе технологии OS-TREE нивелирующей вопрос используемого формата пакетов и обеспечивающей больший контроль целостности и безопасности ОС. С точки зрения установки дополнительного ПО то крайне правильным видится использование “универсальной” системы дистрибуции ПО за счет установки универсальных образов Snap/Flatpak как основу для установки дополнительного ПО.