SpecTips/FileDirs

Материал из ALT Linux Wiki
< SpecTips
Версия от 03:06, 15 января 2009; IvanZakharyaschev (обсуждение | вклад) (более точная категория)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Нюансы секции files

В секции %files должны быть указаны только те файлы и каталоги, которые принадлежат собираемому пакету. Tо есть, если написать

%files
   %_bindir
   %_menudir
   %_datadir

то каталоги /usr/bin, /usr/lib/menu и /usr/share будут показаны как принадлежащие вашему пакету, что очевидно неверно. в то же время если указывать только файлы, родительский каталог будет создан автоматически, но не будет принадлежать ни одному пакету, что тоже неправильно.

Нужно прописывать

каталоги

, по смыслу принадлежащие вашей программе, и

только

их. Все остальные файлы описывать как файлы (а не содержащие их каталоги):

не %_bindir, а %_bindir/* не %_iconsdir, а %_iconsdir/*/*/*/* не %_datadir/applnk, а %_datadir/applnk/Utilities/*

но не

%_datadir/%name/file1
  %_datadir/%name/file2
  %_datadir/%name/dir1/file1
  %_datadir/%name/dir2/file1

а весь

каталог
%_datadir/%name

Если надо исключить файл или каталог из пакета (например, чтобы разместить его в другом подпакете или просто за ненадобностью), это можно сделать либо файловыми масками, либо -- что обычно более надёжно, удобно и понятно -- при помощи %exclude:

%files
%_bindir/*
%exclude %_bindir/*-debug

%files debug
#...
%_bindir/*-debug

Если необходимо включить каталог в файл, но не включать все содержащиеся в нем файлы (это может понадобиться если из одного spec-файла получается несколько rpm-пакетом, соотвественно, в spec-файле существует несколько секций %files), то для этого существует макрос %dir:

%files
%dir %_datadir/%name
%_datadir/%name/file1

%files subpackage
%_datadir/%name/file2