[devel] rpm-build для сборки пакетов

Vitaly Lipatov lav на altlinux.ru
Вт Сен 7 11:44:29 MSK 2021


Всем добрый день!

Как известно, для сборки rpm-пакетов нужна команда rpmbuild, находящаяся 
в пакете rpm-build. Так в прошлом веке придумали в RedHat. При этом 
пакет rpm-build у них вытягивает всё необходимое для сборки пакета (ну 
если посмотреть, что в зависимостях есть, например, patch и pkgconfig, 
то немного больше).

У нас же пакету rpm-build придана роль создателя базовой сборочной 
среды.
Причём базовая сборочная среда это не только gcc, autotools и make, это 
набор пакетов, который часто присутствует в сборочной среде:
«Плюс присутствия пакета в базовой сборочной среде один, но он большой:
поскольку образ базовой сборочной среды закэширован, установка пакета в 
составе базовой сборочной среды на порядки эффективнее как по времени, 
так и по сетевому трафику.»
https://bugzilla.altlinux.org/show_bug.cgi?id=34308#c13

Но среда для сборки rpm-пакета и сборочная среда это вещи несвязанные.

Сборочная среда нужна для тех команд, которые выполняются согласно спеку 
(обычно там configure && make, собирающий программу на C). У нас она 
формируется так: к базовой сборочной среде добавляются пакеты, указанные 
в BuildRequires.

А среды для сборки rpm-пакета по сути нет: это просто команда rpmbuild, 
которая умеет читать спек, раскрывать макросы, делить спек на части и 
выполнять их в шелле, класть получившиеся файлы в cpio и формировать 
файл в форме rpm.

Поскольку за 4 года мне не удалось пока найти понимания в предложении 
отделить формирование сборочной среды от пакета rpm-build, пока 
предлагаю такое решение в виде сборки дополнительных пакетов 
rpm-build-gcc и rpm-build-slim.

Всё, что требует сборки программ, то есть проектов с компиляцией, 
вписано в зависимости метапакета rpm-build-gcc. Возможно, стоит его 
назвать формирователем базовой сборочной среды, но пока конкурс на 
название никто не выиграл.

rpm-build-slim — это бинарная перепаковка пакета rpm-build, с 
исправлением зависимостей (убрано то, что перешло в rpm-build-gcc). 
Предполагается, что содержимое пакетов rpm-build и rpm-build-slim всегда 
идентично и они не могут расходиться по версиям.

Основная цель всего этого — не вносить в систему gcc и glibc-devel, 
когда нужно только собрать rpm-пакет. Например, для сборки 
rpm-build-slim не нужен компилятор, потому что он ничего не компилирует. 
Так же и для rpmrebuild из пакета rpmrebuild не нужен компилятор — он 
упаковывает файлы из системы. Также и для epm rebuild не нужен 
компилятор — он просто перепаковывает готовые пакеты (архивы).

Другими словами, пакеты собирают не только в сборочнице.

Ключевые моменты:
- и rpm-build и rpm-build-slim предоставляют /usr/bin/rpmbuild
- rpm-build-slim имеет BuildRequires: rpm-build = %version%release

Задание для проверки:
284378 TESTED #2 [test-only] sisyphus rpm-build-gcc.git=10.0-alt1 
rpm-build-slim.git=4.0.4-alt177

Основная бага по теме:
https://bugzilla.altlinux.org/34308

-- 
С уважением,
Виталий Липатов,
ALT Linux Team


Подробная информация о списке рассылки Devel