CoreSystem/SpecCriticism: различия между версиями
(Новая страница: «{{Stub}} == Что не так с rpm и спеками == === Затруднена рефлексия === Теги и секции в спеке начинают анализироваться после раскрытия макросов. Это означает, что о спеке ничего нельзя сказать, не раскрыв рекурсивно все макросы. Более того, конструкция `%()` раскрыва...») |
|||
Строка 13: | Строка 13: | ||
=== Зависимость от архитектуры === | === Зависимость от архитектуры === | ||
В силу того, что язык спеков — макроязык без костей (см. предыдущий параграф), очень легко сделать SRPM (не "бинарный" пакет, а ''исходный''), зависящий от архитектуры. Если, например, собрать такой пакет в репозиторий, то опубликован будет ''один'' из этих srpm, но продуктовые ("бинарные") пакеты будут собраны из srpm, раскрытых в окружении с определённым {{term|%arch}}. | В силу того, что язык спеков — макроязык без костей (см. предыдущий параграф), очень легко сделать SRPM (не "бинарный" пакет, а ''исходный''), зависящий от архитектуры: например, [https://lore.altlinux.org/devel/334b9a3d-2242-6ef7-a377-68817f639fb4@altlinux.org/t с разным списком патчей и сурсов] на разных архитектурах. Если, например, собрать такой пакет в репозиторий, то опубликован будет ''один'' из этих srpm, но продуктовые ("бинарные") пакеты будут собраны из srpm, раскрытых в окружении с определённым {{term|%arch}}. | ||
Это стреляет в разных местах: например, на пересборочницу на всех архитектурах попадает общий srpm. |
Текущая версия от 10:47, 26 ноября 2023
Что не так с rpm и спеками
Затруднена рефлексия
Теги и секции в спеке начинают анализироваться после раскрытия макросов. Это означает, что о спеке ничего нельзя сказать, не раскрыв рекурсивно все макросы. Более того, конструкция `%()` раскрывается в результат исполнения произвольного кода на шелле. Соответственно, из спека в общем случае невозможно что-либо достать, не раскрыв все макросы и не исполнив все встроенные шелльные вставки — включая информацию о версии, релизе и лицензии. Это затрудняет анализ спеков без необходимости сборки спека, в том числе массовый.
Стандартные инструменты авторов пакетов ALT Linux Team прибегают к эвристикам для получения этой информации в надежде, что в 95% случаев этого достаточно.
Зависимость от архитектуры
В силу того, что язык спеков — макроязык без костей (см. предыдущий параграф), очень легко сделать SRPM (не "бинарный" пакет, а исходный), зависящий от архитектуры: например, с разным списком патчей и сурсов на разных архитектурах. Если, например, собрать такой пакет в репозиторий, то опубликован будет один из этих srpm, но продуктовые ("бинарные") пакеты будут собраны из srpm, раскрытых в окружении с определённым %arch. Это стреляет в разных местах: например, на пересборочницу на всех архитектурах попадает общий srpm.