RPMBUILD в ALT Linux: Полное практическое руководство для сборки и подписания пакетов

Главное: в ALT Linux сборка RPM-пакетов выполняется только от непривилегированного пользователя. Попытка сборки под root приводит к ошибке “current site policy disallows root to build packages”. Для локальной отладки используйте rpmbuild, а для изолированной и автоматизированной сборки — hasher и gear/gear-rpm.

Оглавление
  1. 1. Введение
  2. 2. Подготовка окружения для локальной сборки rpmbuild
  3. 2.2. Структура каталогов RPM и макросы
  4. 2.3. Установка инструментов сборки
  5. 2.4. Настройка временного каталога и прав
  6. 3. Базовая сборка пакетов с помощью rpmbuild
  7. 4. Сборка в изолированной среде: hasher
  8. 5. Автоматизация на основе git: gear/gear-rpm
  9. 6. Подпись пакетов и конфигурация GPG
  10. 7. Практические советы по написанию .spec
  11. 8. Отладка и устранение ошибок
  12. 9. Инструменты экосистемы ALT Linux и полезные утилиты
  13. 10. Приложения
  14. 11. Глоссарий терминов
  15. Использованные материалы

1. Введение

1.1. Что такое RPM и rpmbuild

RPM — формат пакетов и экосистема упаковки ПО в дистрибутивах семейства RPM. rpmbuild — инструмент сборки пакетов на основе spec-файла и исходников, обеспечивающий фазовую сборку: подготовка, компиляция, установка в BUILDROOT и упаковка.

1.2. Политика безопасности ALT Linux при сборке

В ALT Linux сборка из-под root запрещена и приводит к ошибке

rpmbuild: current site policy disallows root to build packages

Для сборки всегда используйте непривилегированного пользователя (см. раздел 2.1).

1.3. Подходы к сборке: локальная, изолированная, автоматизированная

  • Локальная сборка (rpmbuild) — быстрая отладка и итерации на рабочей станции (см. раздел 3).
  • Изолированная сборка (hasher) — чистое воспроизводимое окружение для официального качества (см. раздел 4).
  • Автоматизация (gear/gear-rpm) — интеграция Git + rpmbuild для CI/CD и повторяемости (см. раздел 5).

1.4. Минимальные требования и окружение

  • ALT Linux нативного семейства (p10, Sisyphus).
  • Доступ в интернет для загрузки BuildRequires и исходников.
  • Пакеты rpm-build, rpm-utils, а при необходимости — hasher, gear-rpm.

2. Подготовка окружения для локальной сборки rpmbuild

2.1. Создание пользователя и базовая инициализация

  1. Создайте группу и пользователя для сборки: bash# adduser rpm -g rpm # su - rpm
  2. Инициализируйте дерево сборки: bash$ rpmdev-setuptree Или вручную: bash$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

2.2. Структура каталогов RPM и макросы

2.2.1. Стандартная иерархия

  • BUILD — сборка исходников
  • RPMS — готовые бинарные пакеты
  • SOURCES — архивы исходников
  • SPECS — spec-файлы
  • SRPMS — исходные пакеты

2.2.2. Файл ~/.rpmmacros

%_topdir %(echo $HOME/rpmbuild)
%_tmppath %(echo $HOME/rpmbuild/tmp)
%packager ВашеИмя <email@domain>
%_gpg_name ВашеИмя

2.3. Установка инструментов сборки

#bash
dnf install rpm-build rpm-utils rpmdevtools

При локальной отладке достаточно rpm-build, для автоматизации — дополнительно устанавливайте hasher и gear-rpm.

2.4. Настройка временного каталога и прав

Если требуется отдельный tmp:

#bash
mkdir -p ~/rpmbuild/tmp
chmod 700 ~/rpmbuild/tmp

Убедитесь, что макрос %_tmppath указывает на этот каталог.

3. Базовая сборка пакетов с помощью rpmbuild

3.1. Установка SRPM (src.rpm) и раскладка SOURCES/SPECS

rpm -i package-1.0.src.rpm

Исходники окажутся в ~/rpmbuild/SOURCES, spec — в ~/rpmbuild/SPECS.

3.2. Этапы сборки: prep, build, install, files

  • %prep: bash$ rpmbuild -bp package.spec
  • %build: bash$ rpmbuild -bc --short-circuit package.spec
  • %install: bash$ rpmbuild -bi --short-circuit package.spec
  • %files и упаковка: bash$ rpmbuild -ba package.spec

3.3. Сборка пакета из SRPM и из SPECS

3.3.1. Полная сборка из spec

rpmbuild -ba --target x86_64 ~/rpmbuild/SPECS/package.spec

3.3.2. Пересборка из SRPM

rpmbuild --rebuild --target x86_64 package-1.0.src.rpm

3.4. Зависимости сборки: apt-get build-dep и buildreq

  • Установка зависимостей по SRPM: bash# dnf builddep package-1.0.src.rpm
  • Автоматический поиск зависимостей по spec: bash$ buildreq package.spec

4. Сборка в изолированной среде: hasher

4.1. Зачем нужен hasher и когда он обязателен

Hasher создаёт чистое chroot-окружение, подтягивает все BuildRequires и исключает «утечки» зависимостей из хоста.

4.2. Быстрый старт hasher

dnf install hasher
hasher init --distro altlinux

4.3. Практический цикл сборки через hasher

hasher mount ~/project
cd /hasher/project
rpm -ba SPECS/project.spec

Hasher автоматически установит зависимости и выполнит сборку.

4.4. Очистка окружения и воспроизводимость

Перед каждой сборкой переинициализируйте chroot:

hasher clean
hasher init --distro altlinux

Фиксируйте версии исходников и build-deps для стабильности.

5. Автоматизация на основе git: gear/gear-rpm

5.1. Что такое gear

Gear — оболочка над Git и rpmbuild, генерирующая архив исходников из репозитория и запускающая сборку.

5.2. Подготовка репозитория и правил

  1. В корне проекта создайте каталог .gear.
  2. Определите правила архивации в файле .gear/rules.
  3. Разместите spec-файл в .gear/project.spec.

5.3. Интеграция gear с rpmbuild/hasher

Gear может вызывать rpmbuild напрямую или через hasher для изоляции.

gear-hsh --commit -v --save-fakeroot

5.4. Пример сборки Python-проекта

  1. Подготовьте виртуальное окружение и зависимости.
  2. Опишите сборку в spec и правилах Gear.
  3. Запустите: bash$ gear hsh

6. Подпись пакетов и конфигурация GPG

6.1. Настройка ~/.rpmmacros для подписи

%_signature gpg
%_gpg_name ВашKeyID
%_gpg_path /home/user/.gnupg
%_gpgbin /usr/bin/gpg2

Импортируйте публичный ключ:

rpm --import ~/.gnupg/pubkey.gpg

6.2. Добавление подписи в RPM

rpmbuild -ba --sign package.spec
rpm --addsign package.rpm

6.3. Проверка подписи и распространённые проблемы

rpm --checksig package.rpm

Если возникает ошибка “Could not exec gpg”, проверьте пути и имя ключа в макросах.

7. Практические советы по написанию .spec

7.1. Структура spec и ключевые секции

  • Header: Name, Version, Release, Summary, License, Group, URL, Source, BuildRequires, Requires
  • %description — полное описание
  • %prep, %build, %install, %files, %changelog

7.2. Предопределённые макросы ALT Linux

Устанавливайте пакеты rpm-build-*, чтобы получить макросы %license, %groupadd и другие.

7.3. Группы пакетов и стандарты

Список групп — в /usr/lib/rpm/GROUPS. Используйте стандартные категории ALT Linux.

7.4. Обработка патчей, локалей и авто-зависимостей

  • Патчи указываются через PatchN: и накладываются в %prep.
  • Локали собираются с помощью %find_lang.
  • buildreq помогает при разработке новых спеков.

8. Отладка и устранение ошибок

8.1. Ошибка “current site policy disallows root…”

Сборка из-под root запрещена политиками; переключитесь на непривилегированного пользователя или используйте hasher.

8.2. Не найденные макросы (%license, %groupadd и др.)

Установите недостающие пакеты rpm-build-*, содержащие необходимые макросы.

8.3. Неполные build-dep и ловушки зависимостей

Для SRPM используйте dnf builddep, для spec — читайте сообщения сборки и устанавливайте пакеты вручную или через buildreq.

8.4. Диагностика стадий %prep/%build/%install

Запускайте фазы по отдельности (-bp, -bc, -bi) для локализации проблем. Перенаправляйте вывод в лог-файл.

9. Инструменты экосистемы ALT Linux и полезные утилиты

9.1. rpm-utils, buildreq

rpm-utils включает buildreq для автоматического поиска зависимостей по spec.

9.2. eepm/epm и управление репозиториями ALT

eepm (Etersoft EPM) и скрипт epm упрощают добавление и настройку ALT-репозиториев.

9.3. Документация ALT Linux и справочные ресурсы

  • Официальные руководства ALT Linux
  • Вики ALT Linux: стратегия сборки RPM, технология сборки
  • Форумы и сообщества ALT Linux

10. Приложения

10.1. Чек-лист подготовки окружения

  • Создать непривилегированного пользователя для сборки
  • Установить rpm-build, rpm-utils, rpmdevtools
  • Инициализировать дерево сборки (rpmdev-setuptree)
  • Настроить ~/.rpmmacros
  • При необходимости установить hasher и gear-rpm

10.2. Типовые ~/.rpmmacros

%_topdir %(echo $HOME/rpmbuild)
%_tmppath %(echo $HOME/rpmbuild/tmp)
%packager ВашеИмя <email@domain>
%_gpg_name ВашKeyID

10.3. Мини-шаблон spec с подсказками

Name:           project
Version: 1.0
Release: 1%{?dist}
Summary: Краткое описание

License: MIT
Group: Development/Tools
URL: https://example.com
Source0: https://example.com/project-%{version}.tar.gz
BuildRequires: gcc, make
Requires: libssl

%description
Полное описание пакета.

%prep
%setup -q
%patch0 -p1

%build
%autoreconf -fi
%configure
%make_build

%install
%makeinstall DESTDIR=%{buildroot}
%find_lang %{name}

%files
%license LICENSE
%doc README.md
/usr/bin/project

%changelog
* Wed Oct 08 2025 Иван Иванов <ivan@example.com> - 1.0-1
- Initial release

10.4. Полезные команды и сценарии

# Установка SRPM
$ rpm -i package.src.rpm

# Полная сборка
$ rpmbuild -ba --target x86_64 package.spec

# Пересборка из SRPM
$ rpmbuild --rebuild package.src.rpm

# Установка зависимостей сборки
# dnf builddep package.src.rpm

# Автопоиск BuildRequires
$ buildreq package.spec

# Добавление подписи
$ rpm --addsign package.rpm

# Проверка подписи
$ rpm --checksig package.rpm

11. Глоссарий терминов

  • RPM — формат пакетов и система управления пакетами в дистрибутивах семейства RPM.
  • rpmbuild — утилита для сборки RPM-пакетов из spec-файлов и исходников.
  • SRPM (src.rpm) — исходный RPM-пакет, содержащий spec и архивы исходников.
  • spec-файл — сценарий сборки, описывающий метаданные, зависимости и фазы сборки.
  • %prep, %build, %install, %files — основные секции spec-файла.
  • BUILDROOT — временный каталог, куда устанавливаются файлы во время фазы %install.
  • Hasher — инструмент для изолированной и воспроизводимой сборки RPM-пакетов.
  • Gear/Gear-rpm — система автоматизации сборки из Git-репозиториев с использованием rpmbuild.
  • BuildRequires — зависимости, необходимые для сборки пакета.
  • ~/.rpmmacros — пользовательский файл макросов для настройки путей и параметров подписи.

Использованные материалы

https://www.altlinux.org/%D0%9E_%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D0%B8_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_RPM_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2
https://www.altlinux.org/%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2_RPM
https://habr.com/ru/articles/867902/
https://docs.altlinux.org/ru-RU/archive/2.4/html-single/master/alt-docs-faq/pt01.html
https://alt-gnome.wiki/build-packages.html
https://www.linux.org.ru/forum/general/1453631
https://ukrfaq.narod.ru/ru/os/linux/altlinux.htm
https://sysadministrator.ru/rpmbuild-altlinux/
https://forum.altlinux.org/index.php?topic=10055.15
https://unixforum.org/viewtopic.php?t=54816
https://www.altlinux.org/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B5_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_rpm
https://pcnews.ru/top/blogs/day/sborka_rpm_paketov_v_alt_linux_avtomatizacia_s_pomosu_gear-1569772.html
https://alt-gnome.wiki/etersoft-build-utils.html
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/advanced-topics
https://stackoverflow.com/questions/33683440/signing-rpm-on-sles-builds
https://cyberleninka.ru/article/n/osobennosti-sborki-rpm-paketa-dlya-alt-linux-sravnenie-s-redhat
https://stackoverflow.com/questions/61244589/unable-to-addsign-for-rpm
https://www.altlinux.org/Spec/%D0%9F%D1%80%D0%B5%D0%B4%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D1%8B
https://raw.githubusercontent.com/Etersoft/eepm/master/packed/epm.sh
https://edu.rans.ru/wp-content/uploads/2025/01/ALT-UMK-Final.pdf

Добавить комментарий

Разработка и продвижение сайтов webseed.ru
Прокрутить вверх