Bug 8579

Summary: --query-repackage does not work properly
Product: Sisyphus Reporter: Sviatoslav Sviridov <svd>
Component: hasherAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: at, glebfm, imz, ldv, mike, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
testcase specfile none

Description Sviatoslav Sviridov 2005-11-30 18:38:10 MSK
hsh --query-repackage не отрабатывает для специальным образом сформированных
src.rpm.

Под "специальным образом" имеется ввиду наличие спека, в котором:
1. Зависимости на пакеты, предоставляющие некоторые rpm-макросы, описаны условно
(напр., %if_with/%endif)
2. В секции %files имеет место быть использование макросов из условно-зависимых
пакетов (естественно, обернуте в %if_with/%endif)

См. детали тут:
http://lists.altlinux.ru/pipermail/sisyphus/2005-November/074129.html
Спек сейчас приаттачу.
Comment 1 Sviatoslav Sviridov 2005-11-30 18:39:54 MSK
Created attachment 1270 [details]
testcase specfile

Приаттачиваю спек, показывающий описанную проблему.
Comment 2 Dmitry V. Levin 2005-11-30 18:47:18 MSK
Это не проблема hasher'а, это проблема spec-файлов, которые используют макросы,
отсутствующие в базовой сборочной среде.
Средствами hasher'а этого никак не исправить.

Лучшим решением было бы перемещение всех таких макросов в пакеты, присутствующие
в базовой сборочной среде.
Comment 3 Sviatoslav Sviridov 2005-11-30 19:07:37 MSK
(In reply to comment #2)
> Это не проблема hasher'а, это проблема spec-файлов, которые используют макросы,
> отсутствующие в базовой сборочной среде.

Однако сами спеки обеспечивают соответствующие BuildRequires и собираюися даже в
хэшере.

> Средствами hasher'а этого никак не исправить.

Для данного случая, наверно, да... здесь эдакий race возникает... для работы
макросов надо установить зависимые пакеты, а для вычисления зависимостей надо
перепаковать пакет...
Здесь даже не имеет значение - обернута ли зависимость на пакет или нет, верно?

А сменить error на warning (для данного этапа) здесь не прокатит?

> Лучшим решением было бы перемещение всех таких макросов в пакеты, присутствующие
> в базовой сборочной среде.

В настоящее время это уже становится проблематично. Коль скоро у нас есть
/etc/rpm/macros.d/, слишком много пакетов хотят туда макросы складывать... Как
можно обеспечить нахождение всех необходимых пакетов в сборочной среде (даже
если макросы будут паковаться в отдельный(-ые) пакерт(-ы))?
Comment 4 Dmitry V. Levin 2005-11-30 19:14:42 MSK
Сменить error на warning можно, что я и сделаю.

Но проблему надо решать в более общем виде.
Comment 5 Sviatoslav Sviridov 2006-01-24 11:18:42 MSK
Кстати, было бы удобно также иметь warning вместо error при упаковке src.rpm.
Суть в том, чтобы запаковать src.rpm c --nodeps и отправить на сборку в хэшер.
Сейчас же нужно иметь установленными зависимые devel пакеты только для того,
чтобы собрать src.rpm
Comment 6 Dmitry V. Levin 2006-01-24 15:25:00 MSK
С последним комментарием не согласен.
Возиожность обнаружения ошибок уже на стадии -bs очень полезна.
Кому надо, может использовать -bs --define '_allow_undefined_macros 1'.
Comment 7 Sviatoslav Sviridov 2006-01-24 16:07:59 MSK
Ок, возьмем на вооружение (в запас) такую конструкцию :)
Comment 8 Dmitry V. Levin 2006-05-25 01:35:20 MSD
Всё, что можно было сделать в рамках hasher, я сделал в 1.0.26-alt1.
Comment 9 Michael Shigorin 2016-02-08 21:53:45 MSK
Похоже, на это же напоролся с бутстрапом pam_mktemp-1.1.1-alt3.src.rpm:

--- ~/.hasher/config
# ...
rpmargs='--disable selinux'
repackage_source=1
---

http://git.altlinux.org/gears/p/pam_mktemp.git?p=pam_mktemp.git;a=blob;f=pam_mktemp.spec содержит такой фрагмент:

---
%def_enable selinux

# due to PAM policy.
BuildRequires(pre): libpam-devel
# ...
%{?_enable_selinux:BuildRequires: libselinux-devel}

%set_pam_name %name
---

libpam0-devel зависит от rpm-macros-pam0, где и определяется %set_pam_name.

Вывод при попытке сборки получается такой:

warning: Macro %set_pam_name not found
error: line 24: Unknown tag: %set_pam_name pam_mktemp
hsh-rebuild: pam_mktemp-1.1.1-alt3.src.rpm: failed to fetch build dependencies.

(В ответ на комментарий №6)
> Кому надо, может использовать -bs --define '_allow_undefined_macros 1'.

Напоминалка: по предварительному осмотру ты высказался в том смысле, что код разбора зависимостей, написанный позже для gear, можно попробовать адаптировать для hsh-rebuild.
Comment 10 Michael Shigorin 2016-02-22 20:41:25 MSK
Спасибо, почти совсем добито в hasher-1.3.28-alt1:
http://git.altlinux.org/gears/h/hasher.git?p=hasher.git;a=commit;h=a9596508244ad42c686c989e7e02b6dcd78cd896
http://git.altlinux.org/gears/h/hasher.git?p=hasher.git;a=commit;h=6daed6ed98ba5df653e5b4f4aa3ca8958abf2764

Пакеты, не собиравшиеся из srpm из-за неустановленных BuildRequires(pre), наконец-то засобирались.

Но вылезла другая проблема: перестали собираться пакеты с отключением ручек, включенных по умолчанию -- например, libcap-ng-0.7.4-alt1.2, где вкорячил %def_with python3 и соответствующую отключалку, при наличии в ~/.hasher/config записи rpmargs='--without python3' всё равно пытается запросить для сборки rpm-build-python3 и обламывается, потому как на e2k его пока нет -- см. тж.:
http://git.altlinux.org/gears/l/libcap-ng.git?p=libcap-ng.git;a=blob;f=libcap-ng.spec;h=fc23c3b9e287fd89dd46802a576ad748809ebe33;hb=a744ec8fe8fa9cbcb33ad6dada6bf8450df70b71

Возможно ли починить ещё и это? :)
Comment 11 Michael Shigorin 2016-02-23 01:55:43 MSK
PS: для gear-hsh там же теперь наблюдается такое же поведение.
Comment 12 Michael Shigorin 2016-02-24 16:36:21 MSK
Не, всё правильно: в libcap-ng.spec и libxml2.spec неоправданно используется

BuildRequires(pre): rpm-build-python3

вместо достаточного для обеспечения раскрытия макросов в %setup, %build, %install и %files

BuildRequires: rpm-build-python3

либо

BuildPreReq: rpm-build-python3

Это избыточная строгость зависимостей, которую надо чинить в таких пакетах.
Тест: "если собирается gear-rpm -bs --nodeps, то достаточно" (именно из git).

ldv@: "BuildRequires(pre) применимо к пакетам, собирающимся из gear-репозитория, либо при помощи hsh --query-repackage".