SpecTips/doc: различия между версиями

Материал из ALT Linux Wiki
м (init :[)
 
Нет описания правки
Строка 1: Строка 1:
{{викифицировать}}
{{викифицировать}}
<pre>
On Thu, Oct 16, 2008 at 04:02:00PM +0400, Vitaly Ostanin wrote:
> Обнаружил, что при наличии в спеке в %files
> такой строки
> %doc %_defaultdocdir/%name-%version
>
> пакет не собирается со странными
> сообщениями:
>
> Wrote: /usr/src/RPM/SRPMS/heartbeat-2.1.3-alt1.src.rpm
> error: create archive failed on file
> /usr/src/tmp/heartbeat-buildroot/usr/share/doc/heartbeat-2.1.3/AUTHORS:
> cpio: open failed - Bad file descriptor
>
> RPM build errors:
>    File listed twice: /etc/ha.d/resource.d/ldirectord
>    File listed twice: /usr/lib/ocf/resource.d/heartbeat/ldirectord
>    File listed twice: /usr/share/doc/heartbeat-2.1.3
>
> Если эту строку удалить, то пакет
> собирается нормально.


Нельзя одновременно использовать
В спек-файле нельзя использовать конструкции
%doc <абсолютный-путь-в-дефолтном-каталоге>
%doc <абсолютный-путь-в-%_docdir>
%doc <относительный-путь>
и
%doc <относительный-путь>
одновременно.


Это связано с тем, что, когда выполняется %doc второго вида,
Это является особенностью (или ошибкой) реализации RPM: когда выполняется <tt>%doc</tt> второго вида, то каталог <tt>%_docdir</tt> сначала удаляется, потом заново создаётся, и в него копируются файлы, указанные в виде относительных путей.
то дефолтный каталог сначала удаляется, потом заново создаётся,
и в него копируются <относительные-пути>.


Таким образом, при обработке
<pre>
%build
%build
touch Changes
touch Changes
Строка 37: Строка 18:
%doc %_docdir/%name-%version
%doc %_docdir/%name-%version
%doc Changes
%doc Changes
</pre>


Когда "%doc Changes" будет исполнен, то он "затрёт" README.
Когда <tt>%doc Changes</tt> будет исполнен, то он ''затрёт'' README.
 
Executing(%doc): /bin/sh -e /tmp/.private/at/rpm-tmp.96021
+ umask 022
+ /bin/mkdir -p /tmp/.private/at/BUILD
+ cd /tmp/.private/at/BUILD
+ DOCDIR=/tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ export DOCDIR
+ rm -rf /tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ /bin/mkdir -p /tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ cp -prL Changes /tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ chmod -R go-w /tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ chmod -R a+rX /tmp/.private/at/test-buildroot/usr/share/doc/test-0
+ exit 0
</pre>

Версия от 11:21, 19 октября 2008

42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.


В спек-файле нельзя использовать конструкции

%doc <абсолютный-путь-в-%_docdir>

и

%doc <относительный-путь>

одновременно.

Это является особенностью (или ошибкой) реализации RPM: когда выполняется %doc второго вида, то каталог %_docdir сначала удаляется, потом заново создаётся, и в него копируются файлы, указанные в виде относительных путей.

Таким образом, при обработке

%build
touch Changes
%install
install -pD -m644 /dev/null %buildroot%_docdir/%name-%version/README
%files
%doc %_docdir/%name-%version
%doc Changes

Когда %doc Changes будет исполнен, то он затрёт README.