[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