[sisyphus] Re: rpm --bb ./specfile не пашет
Vladimir Lettiev
=?iso-8859-1?q?crux_=CE=C1_syktsu=2Eru?=
Пн Май 17 08:00:18 MSD 2004
Dmitry V. Levin пишет:
>>>>>>$rpm -bb ./samba.spec
>>>>>>./samba.spec: No such file or directory
>>>>>
>>>>>rpm-build не установлен
>>>>
>>>>В конце концов надо что-нибудь тяжёлое повесить на rpm, чтобы
>>>>он это не писал. А писал что-нибудь вразумительное.
>>>
>>>Да висит уже давно,
>>>http://bugzilla.altlinux.ru/show_bug.cgi?id=1928
>>>Вот бы исправил тот, кому это действительно мешает.
>>>А то так и будет висеть.
>>
>>А тебя так и будут долбать. И вешать дубли. И тратить на все
>>это кучу времени...
>
> Ничего страшного.
>
>>Кто может исправить -- тот в курсе и ему непосредственно не
>>мешает. А мешает тем, кто не в курсе и, как правило, не будет
>>копать, но в лучшем случае спросит.
>
> Это не исправляется за 5 минут, а больше у меня на это нет.
>
Да, действительно, дело не 5 минут... Но может коллективными усилиями
что-то можно сделать? Я вот пробовал копаться, но понял, что мне это не
под силам (в условиях ограниченного времени и знаний С). Но у меня есть
кое-что, что могу рассказать по проблеме. Может кого-нибудь это наведёт
на правильное решение?
1. Сообщение "No such file or directory", судя по strace, относится к
/usr/lib/rpm/rpmb, который rpm пытается запустить, обнаружив параметр
'-bb', но т.к. этот бинарник лежит в пакете rpm-build, то...
В исходниках rpm я не нашёл место, где происходит этот самый execve, но
если найти, то это может прояснить ситуацию...
2. Участок кода, который выдаёт такое странное сообщение, находится в
rpmqv.c, строки 602-607 (rpm-4.0.4-alt37):
if (arg < -1) {
fprintf(stderr, "%s: %s\n",
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
poptStrerror(arg));
exit(EXIT_FAILURE);
}
Переменная arg получает своё значение из цикла (строка 451) :
while ((arg = poptGetNextOpt(optCon)) > 0) {
..
}
Функции popt* идут из пакета libpopt и возможно ошибка даже не в rpm, а
этом самом libpopt... Это надо ракапывать.
Если вставить такой код (я не проверял, пишу на вскидку):
if (arg < -1) {
if (!strcmp(poptStrerror(arg), "No such file or directory")) {
fprintf(stderr, "error: rpm-build not installed\n");
} else {
fprintf(stderr, "%s: %s\n",
poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
poptStrerror(arg));
}
exit(EXIT_FAILURE);
}
То по идее будет писать "error: rpm-build not installed", т.к. сообщение
"No such file directory" уникально и в базе libpopt такого не
предусмотрено (т.е. срабатывать будет только при отсутствии rpmb). Но
это workaround в стиле "костыль" :)
3. Вот собственно всё, что могу пока сказать. Может кто-нибудь возьмётся
раскопать где проблема и исправит багу?
--
С уважением, Владимир Леттиев aka crux <crux на syktsu.ru>
Подробная информация о списке рассылки Sisyphus