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

Материал из ALT Linux Wiki
м (Викифицировал)
 
Строка 1: Строка 1:
[[Category:Devel]]
[[Category:Devel]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/TypicalPackagingErrors/TrailingSlash}}


== Каталог/ ==
== Каталог/ ==


Если Makefile проекта рассчитывает на то, что /usr/bin всенепременно ''уже'' существует -- в случае установки в пустой, хоть и r/w, buildroot он может глубоко разочароваться в этом.  В итоге в пакете окажется, скажем, софтинка, установленная с именем <tt>/usr/bin</tt> (это файл такой, типа) вместо <tt>/usr/bin/softinka</tt>.
Если {{term|Makefile}} проекта рассчитывает на то, что {{path|/usr/bin}} всенепременно ''уже'' существует -- в случае установки в пустой, хоть и r/w, {{path|buildroot}} он может глубоко разочароваться в этом.  В итоге в пакете окажется, скажем, софтинка, установленная с именем {{term|/usr/bin}} (это файл такой, типа) вместо {{term|/usr/bin/softinka}}.


С чужими мэйкфайлами такое правится патчами, объезжается -- предварительным <tt>mkdir -p</tt> или <tt>install -D</tt> по вкусу, но ведь и мы можем так же ошибаться (например, закладываться на то, что <tt>make install</tt> создал каталоги).
С чужими мэйкфайлами такое правится патчами, объезжается -- предварительным {{cmd|mkdir -p}} или {{cmd|install -D}} по вкусу, но ведь и мы можем так же ошибаться (например, закладываться на то, что {{cmd|make install}} создал каталоги).


Чтобы такие ошибки по возможности обнаружить до выявления при попытке установки результирующего пакета, имеет смысл завести привычку практически всегда использовать, имея в виду каталог, trailing slash -- "/" в конце имени:
Чтобы такие ошибки по возможности обнаружить до выявления при попытке установки результирующего пакета, имеет смысл завести привычку практически всегда использовать, имея в виду каталог, {{term|trailing slash}} -- "/" в конце имени:


<pre>%install
%install
# ...
# ...
cp -a doc/doxygen/html %buildroot%pkgdocdir/
cp -a doc/doxygen/html %buildroot%pkgdocdir/
install -m644 `find -name '*.1'` %buildroot%_man1dir/
install -m644 `find -name '*.1'` %buildroot%_man1dir/
 
%files
%files
# ...
# ...
%_datadir/alsa/firmware/
%_datadir/alsa/firmware/
%dir %_libdir/alsa-lib/</pre>
%dir %_libdir/alsa-lib/


Вообще говоря, привычка хороша и для своих скриптов, и для консоли ровно по той же причине, особенно при копировании множественных файлов по маске (когда последнее имя может быть воспринято как каталог с не совсем очевидной диагностикой).  ''что-то не вспомню, при каких условиях <tt>cp</tt> на такое обижалось... но там stderr внятный ;)''
Вообще говоря, привычка хороша и для своих скриптов, и для консоли ровно по той же причине, особенно при копировании множественных файлов по маске (когда последнее имя может быть воспринято как каталог с не совсем очевидной диагностикой).  ''что-то не вспомню, при каких условиях <tt>cp</tt> на такое обижалось... но там stderr внятный ;)''


[[Категория:TypicalPackagingErrors|{{SUBPAGENAME}}]]
[[Категория:TypicalPackagingErrors|{{SUBPAGENAME}}]]

Текущая версия от 09:43, 23 ноября 2009


Каталог/

Если Makefile проекта рассчитывает на то, что /usr/bin всенепременно уже существует -- в случае установки в пустой, хоть и r/w, buildroot он может глубоко разочароваться в этом. В итоге в пакете окажется, скажем, софтинка, установленная с именем /usr/bin (это файл такой, типа) вместо /usr/bin/softinka.

С чужими мэйкфайлами такое правится патчами, объезжается -- предварительным mkdir -p или install -D по вкусу, но ведь и мы можем так же ошибаться (например, закладываться на то, что make install создал каталоги).

Чтобы такие ошибки по возможности обнаружить до выявления при попытке установки результирующего пакета, имеет смысл завести привычку практически всегда использовать, имея в виду каталог, trailing slash -- "/" в конце имени:

%install
# ...
cp -a doc/doxygen/html %buildroot%pkgdocdir/
install -m644 `find -name '*.1'` %buildroot%_man1dir/

%files
# ...
%_datadir/alsa/firmware/
%dir %_libdir/alsa-lib/

Вообще говоря, привычка хороша и для своих скриптов, и для консоли ровно по той же причине, особенно при копировании множественных файлов по маске (когда последнее имя может быть воспринято как каталог с не совсем очевидной диагностикой). что-то не вспомню, при каких условиях cp на такое обижалось... но там stderr внятный ;)