Создание rpm пакета пошаговое руководство

Как создать rpm пакет

RPM (Red Hat Package Manager) используется для управления установкой и обновлением программного обеспечения на системах на базе RPM, таких как RHEL, CentOS и Fedora. Понимание структуры RPM и правильная подготовка пакета позволяют автоматизировать развёртывание приложений и снизить риск ошибок при установке.

Для создания RPM необходимо подготовить исходные файлы, определить зависимости и написать SPEC-файл, который задаёт структуру пакета, инструкции по сборке и установке. SPEC-файл содержит разделы prep, build, install и files, где конкретно указываются действия на каждом этапе.

Перед сборкой пакета важно настроить директории rpmbuild и убедиться в наличии всех требуемых библиотек и инструментов. Неправильная структура каталогов или пропущенные зависимости часто становятся причиной ошибок сборки и некорректной работы пакета.

После сборки RPM необходимо провести тестирование: проверить установку, удаление и корректность всех файлов в системе. Для этого применяются команды rpm -ivh и rpm -e, а также проверка цифровых подписей пакета, если это требуется для продакшн-среды.

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

Подготовка исходных файлов для RPM

Перед сборкой RPM необходимо собрать все исходные файлы приложения в единую директорию. Обычно создают архив с расширением .tar.gz или .tar.bz2, включающий исходный код, конфигурационные файлы и скрипты установки. Имя архива должно соответствовать шаблону имя-программы-версия.tar.gz, например myapp-1.2.3.tar.gz, чтобы rpmbuild корректно его распознал.

Все патчи и дополнительные файлы следует разместить в подкаталоге SOURCES в структуре rpmbuild. Для каждого патча необходимо указать применяемую версию и порядок применения. Рекомендуется проверять контрольные суммы файлов с помощью md5sum или sha256sum, чтобы исключить повреждение архива перед сборкой.

Если приложение использует сторонние библиотеки, их исходники и файлы зависимостей тоже должны быть подготовлены. Все файлы должны иметь правильные права доступа: скрипты – 755, конфигурационные файлы – 644. Это гарантирует корректную установку и работу пакета на целевой системе.

Для проектов с автоматической сборкой полезно создать README или INSTALL файл, где подробно описываются шаги компиляции и установки. Эти файлы можно включить в RPM для удобства администраторов и упрощения отладки при тестировании пакета.

Установка и настройка rpm-build

Для сборки RPM-пакетов требуется пакет rpm-build. На системах RHEL, CentOS и Fedora установка выполняется командой sudo dnf install rpm-build или sudo yum install rpm-build в зависимости от версии системы. Проверить успешную установку можно командой rpm —version.

После установки создаётся стандартная структура каталогов в домашней директории пользователя: ~/rpmbuild/BUILD, ~/rpmbuild/RPMS, ~/rpmbuild/SOURCES, ~/rpmbuild/SPECS, ~/rpmbuild/SRPMS. Если директории отсутствуют, их можно создать вручную с помощью rpmdev-setuptree, который автоматически создаёт все необходимые подкаталоги.

В конфигурационном файле ~/.rpmmacros рекомендуется задать переменные %_topdir для указания пути к корневой директории rpmbuild и %_tmppath для временных файлов сборки. Это позволяет изменять расположение каталогов без изменения системных настроек и упрощает многопользовательскую сборку пакетов.

Для сборки пакетов, требующих компиляции, необходимо убедиться, что установлены компиляторы и утилиты сборки: gcc, make, autoconf, automake. Их наличие можно проверить через gcc —version и make —version. Без этих инструментов сборка RPM с исходными файлами невозможна.

Создание структуры каталогов для пакета

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

  • BUILD – временные файлы сборки пакета.
  • RPMS – готовые бинарные RPM-файлы, разделённые по архитектурам.
  • SOURCES – исходные архивы, патчи и дополнительные файлы.
  • SPECS – SPEC-файлы с инструкциями сборки и установки.
  • SRPMS – исходные RPM-пакеты, включающие исходники и SPEC-файлы.

Для организации пользовательских пакетов внутри BUILD можно создать отдельные подкаталоги с именами проектов. Это облегчает отслеживание версий и управление патчами:

  1. Создать подкаталог myapp-1.2.3 в BUILD.
  2. Разместить исходники и патчи в SOURCES с соответствующими именами.
  3. Создать SPEC-файл в SPECS с точным указанием исходного архива и всех зависимостей.

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

Написание SPEC-файла для RPM

SPEC-файл задаёт инструкцию для сборки RPM-пакета, включая метаданные, зависимости, скрипты и список файлов. Файл должен располагаться в каталоге SPECS и иметь имя вида имя-программы.spec, например myapp.spec.

Основные разделы SPEC-файла:

Раздел Назначение Пример
Header Метаданные пакета: имя, версия, релиз, описание, лицензия, URL, группы Name: myapp
Version: 1.2.3
Release: 1%{?dist}
License: MIT
Summary: Приложение для мониторинга
Prep Подготовка исходников: распаковка архивов, применение патчей %setup -q
%patch0 -p1
Build Компиляция исходного кода и сборка бинарных файлов %configure
make %{?_smp_mflags}
Install Копирование файлов в временный каталог для пакета make install DESTDIR=%{buildroot}
Files Список файлов и каталогов, которые будут включены в RPM /usr/bin/myapp
/etc/myapp/config.ini
Changelog История изменений для версии пакета * Thu Nov 21 2025 Developer <dev@example.com> — 1.2.3-1
— Добавлена поддержка systemd

При написании SPEC-файла важно точно указывать версии зависимостей через Requires и корректно использовать макросы rpmbuild для совместимости с разными системами. Ошибки в разделах Prep и Install приводят к сбоям сборки и некорректной установке пакета.

Добавление файлов и скриптов в пакет

Файлы и скрипты включаются в RPM через раздел %files SPEC-файла и соответствующие скриптовые макросы. Все пути должны указывать на расположение файлов в файловой системе после установки пакета.

Рекомендуется разделять файлы по категориям и назначению:

  • Бинарные файлы – /usr/bin или /usr/local/bin.
  • Конфигурационные файлы – /etc/имя_программы с указанием макроса %config для сохранения изменений пользователя при обновлении.
  • Логи и временные файлы – /var/log/имя_программы или /var/tmp.
  • Документация – /usr/share/doc/имя_программы с макросом %doc.

Скрипты выполняются на этапах установки и удаления пакета. В SPEC-файле они задаются через:

  1. %pre – выполняется до установки файлов.
  2. %post – выполняется после установки.
  3. %preun – перед удалением пакета.
  4. %postun – после удаления пакета.

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

if [ ! -d /var/log/myapp ]; then mkdir -p /var/log/myapp; fi

Все файлы, добавляемые в пакет, должны иметь корректные права доступа: исполняемые файлы – 755, конфигурационные – 644. Это обеспечивает корректную работу приложения после установки RPM.

Сборка RPM пакета с помощью rpmbuild

Для сборки RPM используется команда rpmbuild с указанием пути к SPEC-файлу. Стандартная команда выглядит так: rpmbuild -ba ~/rpmbuild/SPECS/myapp.spec. Флаг -ba собирает как бинарный, так и исходный RPM.

Перед запуском сборки следует убедиться, что все исходники и патчи находятся в каталоге SOURCES и соответствуют имени и версии, указанным в SPEC-файле. Любое несоответствие приведёт к ошибке file not found.

Для многопоточности сборки можно использовать макрос %{?_smp_mflags} в разделе Build SPEC-файла, что ускоряет компиляцию на системах с несколькими ядрами.

После завершения сборки проверяется наличие RPM-файлов в каталогах RPMS/архитектура и SRPMS. Их имена должны соответствовать шаблону имя-версия-релиз.arch.rpm, например myapp-1.2.3-1.x86_64.rpm. Если файлы отсутствуют, необходимо изучить лог сборки и исправить ошибки в SPEC-файле или исходниках.

Проверка и тестирование собранного RPM

После сборки RPM необходимо убедиться, что пакет корректно устанавливается и удаляется. Для проверки используют команду rpm -ivh для установки и rpm -e для удаления. Проверяется наличие всех файлов в системе и правильность их расположения.

Для проверки целостности и подписей RPM применяют rpm -K имя_пакета.rpm. Это позволяет убедиться, что пакет не повреждён и соответствует стандартам безопасности.

Важно проверить работу приложения после установки: запуск бинарных файлов, доступ к конфигурации и создание логов. Для приложений с системными сервисами рекомендуется тестировать запуск через systemctl start/stop имя_сервиса и проверять статус с помощью systemctl status.

Проверка зависимостей выполняется командой rpm -qpR имя_пакета.rpm, которая показывает список необходимых библиотек и пакетов. Это позволяет выявить недостающие зависимости до установки на целевую систему.

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

Установка и удаление RPM для проверки

Если приложение устанавливается с системными сервисами, их состояние проверяют через systemctl status имя_сервиса и выполняют запуск с помощью systemctl start имя_сервиса. Это позволяет убедиться, что сервис корректно интегрируется в систему.

Для удаления RPM применяется команда rpm -e имя_пакета. При этом проверяется очистка всех файлов и каталогов, за исключением конфигурационных файлов, если они были помечены макросом %config. Удаление с сохранением изменений пользователя помогает избежать потери важных данных при обновлениях.

После установки и удаления рекомендуется повторно проверять зависимости через rpm -qa | grep имя_пакета и убедиться, что пакет полностью удалён из системы. Это гарантирует корректное поведение при повторных тестах или обновлениях.

Вопрос-ответ:

Какие исходные файлы нужны для создания RPM-пакета?

Для сборки RPM требуются архивы с исходным кодом приложения, патчи, конфигурационные файлы и скрипты установки. Все файлы помещаются в каталог SOURCES, а их имена должны совпадать с указанными в SPEC-файле. Контрольные суммы md5sum или sha256sum помогают убедиться, что файлы не повреждены.

Как правильно настроить rpm-build перед сборкой пакета?

После установки rpm-build нужно создать структуру каталогов с помощью rpmdev-setuptree. Рекомендуется задать переменные в ~/.rpmmacros: %_topdir для корневой директории rpmbuild и %_tmppath для временных файлов. Также необходимо убедиться, что установлены компиляторы и утилиты сборки, такие как gcc, make, autoconf и automake.

Какие разделы включает SPEC-файл и как их использовать?

Основные разделы SPEC-файла: Header — метаданные пакета, Prep — подготовка исходников, Build — компиляция, Install — установка в временный каталог, Files — список включаемых файлов и Changelog — история изменений. В разделе Files указываются пути для бинарных, конфигурационных и документационных файлов с корректными правами доступа.

Каким образом проверять корректность собранного RPM-пакета?

После сборки пакет устанавливают командой rpm -ivh и удаляют через rpm -e. Проверяется наличие файлов в системе, права доступа и работа приложения. Для пакетов с сервисами проверяют их запуск и статус через systemctl start/stop/ status. Также проверяют зависимости с помощью rpm -qpR имя_пакета.rpm и цифровые подписи через rpm -K.

Как добавлять скрипты для установки и удаления в RPM?

Скрипты включаются в SPEC-файл через макросы: %pre — перед установкой, %post — после установки, %preun — перед удалением и %postun — после удаления. Скрипты должны проверять существование каталогов и файлов, например, создавать директорию логов только если она отсутствует: if [ ! -d /var/log/myapp ]; then mkdir -p /var/log/myapp; fi. Это предотвращает ошибки при повторной установке или удалении.

Как проверить, что собранный RPM-пакет устанавливается корректно и все файлы размещены правильно?

После сборки пакета его устанавливают командой rpm -ivh имя_пакета.rpm. Затем проверяют наличие всех файлов в указанных каталогах, соответствие прав доступа и работу приложения. Для сервисов выполняют запуск через systemctl start имя_сервиса и проверяют статус командой systemctl status. Для удаления пакета используют rpm -e имя_пакета и проверяют, что файлы и каталоги очищены, за исключением конфигурационных файлов, если они помечены макросом %config. Дополнительно проверяют зависимости через rpm -qpR имя_пакета.rpm и целостность пакета с помощью rpm -K.

Ссылка на основную публикацию