Открыть сервис

RPM Package Manager

RPM Package Manager (изначально Red Hat Package Manager, сокращённо RPM) — это система управления пакетами, используемая в операционных системах на базе ядра Linux. Она предназначена для установки, обновления, удаления и проверки целостности программного обеспечения, распространяемого в виде RPM-пакетов (файлов с расширением .rpm). RPM является основным форматом пакетов для дистрибутивов Red Hat Enterprise Linux (RHEL), Fedora, CentOS, openSUSE, а также для ряда других, основанных на них.

История

Создание и ранние версии

RPM был разработан в 1995 году компанией Red Hat как замена более ранним системам управления пакетами, таким как dpkg (Debian) и собственным скриптам установки. Первая версия RPM (1.0) была выпущена вместе с дистрибутивом Red Hat Linux 2.0. Основной целью было создание единого, стандартизированного формата для распространения и управления программным обеспечением, который бы поддерживал зависимости, проверку целостности и возможность автоматического обновления.

Развитие и стандартизация

В 1997 году вышла версия RPM 2.0, которая ввела поддержку цифровых подписей для проверки подлинности пакетов. В 2000 году, с выходом Red Hat Linux 7.0, была представлена версия RPM 3.0, которая значительно улучшила работу с зависимостями и добавила поддержку сценариев (pre/post-install, pre/post-remove). В 2002 году RPM 4.0 принёс поддержку многопоточности и улучшенную обработку метаданных.

Форматы и стандарты

В 2004 году RPM 4.2 стал основой для стандарта LSB (Linux Standard Base) — набора стандартов, направленных на обеспечение совместимости между различными дистрибутивами Linux. В 2007 году RPM 4.6 ввёл поддержку формата rpm2cpio для извлечения файлов из пакетов. В 2012 году RPM 4.10 добавил поддержку сжатия xz и улучшенную обработку больших файлов. Современная версия RPM (на 2024 год — 4.18) продолжает развиваться, поддерживая новые алгоритмы сжатия, улучшенную безопасность и интеграцию с современными инструментами сборки.

Архитектура и принцип работы

Структура RPM-пакета

RPM-пакет представляет собой архив (обычно в формате cpio), сжатый с помощью gzip, bzip2, xz или zstd, который содержит:

  • Метаданные: название, версия, архитектура, описание, лицензия, список зависимостей (requires, provides, conflicts), информация о разработчике.
  • Файлы: исполняемые файлы, библиотеки, конфигурационные файлы, документация.
  • Сценарии: скрипты, выполняемые до и после установки, удаления или обновления пакета (pre/post install, pre/post remove, pre/post trans).
  • Цифровая подпись: для проверки подлинности и целостности пакета.

База данных RPM

RPM ведёт собственную базу данных (обычно в /var/lib/rpm), которая хранит информацию о всех установленных пакетах: их версиях, файлах, зависимостях и состоянии. База данных используется для проверки целостности системы, разрешения зависимостей и отслеживания изменений.

Разрешение зависимостей

RPM поддерживает механизм зависимостей: каждый пакет может указывать, какие другие пакеты (или их версии) ему необходимы (requires) и какие он предоставляет (provides). При установке или обновлении RPM проверяет, удовлетворены ли все зависимости. Если нет — операция прерывается с сообщением об ошибке. Для автоматического разрешения зависимостей используются менеджеры пакетов более высокого уровня, такие как dnf (Fedora, RHEL 8+) или yum (CentOS, RHEL 7 и ранее).

Классификация и виды

По архитектуре

RPM-пакеты могут быть собраны для разных архитектур процессоров: x86_64, i686, aarch64, armv7hl, ppc64le, s390x и других. Пакет, собранный для одной архитектуры, не может быть установлен на другую (за исключением случаев эмуляции или совместимости, например, i686 на x86_64).

По типу

  • Бинарные пакеты (.rpm): содержат готовые к выполнению файлы, библиотеки и конфигурации. Они предназначены для конечных пользователей.
  • Исходные пакеты (.src.rpm или .srpm): содержат исходный код, патчи и сборочные скрипты (spec-файлы). Они используются для сборки бинарных пакетов.

По назначению

  • Пакеты приложений: содержат программы, библиотеки, документацию.
  • Пакеты библиотек: предоставляют разделяемые библиотеки (.so), необходимые для работы других программ.
  • Пакеты разработки (обычно с суффиксом -devel): содержат заголовочные файлы, статические библиотеки и файлы для сборки программ, использующих данную библиотеку.

Применение и значение

В дистрибутивах Linux

RPM является стандартным форматом для многих дистрибутивов Linux, особенно в корпоративной среде:

  • Red Hat Enterprise Linux (RHEL) и его клоны (CentOS, Rocky Linux, AlmaLinux) — используют RPM в сочетании с менеджером пакетов dnf.
  • Fedora — использует RPM и dnf.
  • openSUSE — использует RPM, но с менеджером пакетов zypper.
  • Mandriva (исторически) — использовала RPM с urpmi.

В корпоративной среде

RPM широко применяется в серверных и облачных средах, где важна стабильность, безопасность и возможность автоматизации. Система управления пакетами позволяет администраторам:

  • Устанавливать и обновлять программное обеспечение централизованно.
  • Проверять целостность системы (с помощью команды rpm -V).
  • Создавать собственные репозитории и пакеты для внутреннего использования.
  • Интегрироваться с системами управления конфигурациями (Ansible, Puppet, Chef).

В разработке

RPM используется разработчиками для сборки и распространения программного обеспечения. С помощью rpmbuild и spec-файлов можно создавать пакеты, которые легко устанавливаются и обновляются. Это особенно важно для проектов с открытым исходным кодом, где требуется поддержка разных дистрибутивов.

Инструменты и утилиты

Основные команды RPM

  • rpm -i <package.rpm> — установка пакета.
  • rpm -U <package.rpm> — обновление пакета.
  • rpm -e <package>удаление пакета.
  • rpm -q <package>запрос информации о пакете.
  • rpm -qa — вывод списка всех установленных пакетов.
  • rpm -V <package> — проверка целостности файлов пакета.
  • rpm --verify — проверка всех установленных пакетов.

Менеджеры пакетов высокого уровня

  • YUM (Yellowdog Updater Modified) — устаревший, но всё ещё используемый менеджер пакетов для RHEL/CentOS 7 и ранее. Автоматически разрешает зависимости.
  • DNF (Dandified YUM) — современный менеджер пакетов, используемый в Fedora, RHEL 8+ и CentOS 8+. Быстрее и эффективнее YUM, поддерживает плагины и транзакции.
  • Zypper — менеджер пакетов для openSUSE, также работающий поверх RPM.

Инструменты сборки

  • rpmbuild — утилита для сборки RPM-пакетов из spec-файлов и исходного кода.
  • mock — инструмент для сборки пакетов в изолированной среде (chroot), что обеспечивает чистоту сборки и воспроизводимость.

Критика и ограничения

Сложность разрешения зависимостей

RPM сам по себе не разрешает зависимости автоматически — он лишь сообщает об ошибке, если они не удовлетворены. Это перекладывает задачу на менеджеры пакетов высокого уровня (YUM, DNF), которые могут быть медленными или неэффективными при работе с большими репозиториями.

Фрагментация

Несмотря на стандартизацию, разные дистрибутивы могут использовать разные версии RPM, что приводит к несовместимости пакетов. Например, пакет, собранный для Fedora, может не установиться на RHEL из-за различий в зависимостях или версиях библиотек.

Отсутствие транзакционности

В отличие от некоторых других систем управления пакетами (например, dpkg с apt), RPM не поддерживает полноценные транзакции: если установка пакета прерывается (например, из-за ошибки), система может остаться в несогласованном состоянии. Однако современные менеджеры пакетов (DNF) частично решают эту проблему с помощью транзакций.

Зависимость от базы данных

RPM полагается на локальную базу данных, которая может быть повреждена (например, из-за сбоя питания или ошибки файловой системы). Восстановление базы данных может быть сложным и требовать ручного вмешательства.

Интересные факты

  • Название «RPM» изначально расшифровывалось как «Red Hat Package Manager», но после того, как формат стал использоваться в других дистрибутивах, было принято рекурсивное сокращение «RPM Package Manager».
  • RPM поддерживает установку пакетов из файлов, расположенных на удалённых серверах (по HTTP, FTP, NFS), а также из локальных директорий.
  • В RPM существует понятие «триггеров» — скриптов, которые выполняются при установке или удалении других пакетов, что позволяет автоматизировать сложные сценарии.
  • Формат RPM используется не только в Linux, но и в некоторых встраиваемых системах и даже в операционной системе IBM AIX (через утилиту rpm).

Источники

  • Red Hat. «RPM Package Manager». Официальная документация.
  • Fedora Project. «RPM Guide». Документация Fedora.
  • Linux Foundation. «Linux Standard Base (LSB)».
  • openSUSE. «RPM and Zypper». Документация openSUSE.
  • «Maximum RPM» — книга Эдварда Бэйли (Edward C. Bailey), 1997.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →