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

- 1. Введение
- 2. Подготовка окружения для локальной сборки rpmbuild
- 2.2. Структура каталогов RPM и макросы
- 2.3. Установка инструментов сборки
- 2.4. Настройка временного каталога и прав
- 3. Базовая сборка пакетов с помощью rpmbuild
- 4. Сборка в изолированной среде: hasher
- 5. Автоматизация на основе git: gear/gear-rpm
- 6. Подпись пакетов и конфигурация GPG
- 7. Практические советы по написанию .spec
- 8. Отладка и устранение ошибок
- 9. Инструменты экосистемы ALT Linux и полезные утилиты
- 10. Приложения
- 11. Глоссарий терминов
- Использованные материалы
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. Создание пользователя и базовая инициализация
- Создайте группу и пользователя для сборки: bash
# adduser rpm -g rpm # su - rpm - Инициализируйте дерево сборки: 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. Установка инструментов сборки
#bashdnf install rpm-build rpm-utils rpmdevtools
При локальной отладке достаточно rpm-build, для автоматизации — дополнительно устанавливайте hasher и gear-rpm.
2.4. Настройка временного каталога и прав
Если требуется отдельный tmp:
#bashmkdir -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. Подготовка репозитория и правил
- В корне проекта создайте каталог
.gear. - Определите правила архивации в файле
.gear/rules. - Разместите spec-файл в
.gear/project.spec.
5.3. Интеграция gear с rpmbuild/hasher
Gear может вызывать rpmbuild напрямую или через hasher для изоляции.
gear-hsh --commit -v --save-fakeroot
5.4. Пример сборки Python-проекта
- Подготовьте виртуальное окружение и зависимости.
- Опишите сборку в spec и правилах Gear.
- Запустите: 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