Система следующей конфигурации: ядро x86_64, все окружение i586 (работает в chroot, хотя это не принципиально). При компиляции 32-х битной версии все время определяет архитектуру, как x86_64, после чего вылетает при разборе конфига. Добавление параметра --target для hasher не помогает. Решение: в секцию %build, перед началом собственно компиляции, добавить строку устанавливающую переменную окружения ARCH. Например: export ARCH=`echo $RPM_TARGET_ARCH | sed -e 's/i[4-9]86/i386/'`
Вообще для более полной эмуляции 32-битного окружения предназначена команда setarch i386: $ uname -m x86_64 $ setarch i386 uname -m i686 Но в принципе можно и явно выставлять переменную ARCH (только не так - в пакете kernel-build-tools уже есть макрос %base_arch, возвращающий нужное значение, который правильно обрабатывает ещё и варианты pentium4, athlon, k6).
> Но в принципе можно и явно выставлять переменную ARCH (только не так - в пакете > kernel-build-tools уже есть макрос %base_arch, возвращающий нужное значение, > который правильно обрабатывает ещё и варианты pentium4, athlon, k6). спасибо, не знал. лично мое мнение - ARCH _нужно_ выставлять для пакетов связанных с ядром. использование setarch удобно использовать только в сборочных средах имхо. Или модифицировать rpmbuild, что б при указании --target работоло с использованием setarch. А при использовании переменной окружения - не нарушается нормальное поведение rpmbuild и идеологии кросскомпиляции ;-)
Some words for comment #2. Setarch utility forks new shell process with pseudo new arch environment such as i386 on x86_64 by changing all libc syscalls. That's why setarch more preferable than other ways to do something like build under chroot. Look to Fedora Extras buildsys for example.
Установка ARCH добавлена в std26-2.6.16-alt11.