Bug 14885

Summary: %_tmppath requires canonical path
Product: Sisyphus Reporter: ildar <ildar>
Component: rpm-buildAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: minor    
Priority: P2 CC: arseny, glebfm, imz, ldv, placeholder, vt
Version: unstable   
Hardware: all   
OS: Linux   

Description ildar 2008-03-13 09:54:21 MSK
начиная с версии * Вск Фев 24 2008 Alexey Tourbin <at@> 4.0.4-alt87,
- functions (ValidateBuildRoot): require RPM_BUILD_ROOT path be canonical

Комментарии:
> Ну, в двух словах, появляется две
> сущности - RPM_BUILD_ROOT и канонический путь к RPM_BUILD_ROOT.
> В скриптах поиска зависимостей приходится всё время учитывать эти
> варианты.  Например, представьте, что хочется узнать realpath какого-то
> файла под RPM_BUILD_ROOT.

Хорошо, я согласен с обоснованием. Но я не согласен с решением. Можно сделать
так (не углубляясь в подробности реализации):
1. В самом начале работы rpmbuild сделать преобразование в канонический путь.
2. Использовать дальше везде преобразованный.

Steps to Reproduce:
1. rpmbuild -bb X.spec

Actual Results:  
find-lang: ERROR: non-canonical  
RPM_BUILD_ROOT=/home/ildar/tmp/RPM/gq-buildroot  
real_buildroot=/var/tmp/RPM/gq-buildroot
ошибка: Неверный код возврата из /home/ildar/tmp/RPM/rpm-tmp.92244  
(%install)
Ошибки сборки пакетов:
    Неверный код возврата из /home/ildar/tmp/RPM/rpm-tmp.92244  
(%install)
Comment 1 Ivan Zakharyaschev 2012-02-24 15:13:25 MSK
Да, некоторое время назад сделал

$ ln -s "$TMPDIR" ~/tmp -v
«/home/imz/tmp» -> «/tmp/.private/imz»
$ 

(до этого ~/tmp/ вообще не было, а какая-то программа его захотела)
и натолкнулся на эту проблему со сборкой.

Я тогда просто удлалил ~/tmp/ в надежде, что rpm-build-4.0.4-alt100.46 будет использовать $TMPDIR (см. совет ниже; я предполагал, что м.б. он зашит в rpm-build теперь), а он на самом деле просто сам создал директорию ~/tmp/ ...

Был ещё такой совет -- http://lists.altlinux.org/pipermail/devel/2008-March/152507.html :

Выставить канонический шаблон для %buildroot в ~/.rpmmacros.
Точнее, сам шаблон для %buildroot лучше не трогать, а просто
выставить канонический %_tmppath.

У меня написано:
%_tmppath       /tmp/.private/at

Если нет желания привязываться к логину, то можно написать
%_tmppath	%(echo ${TMPDIR:-/tmp})