Обычно только один пакет принадлежит данный каталог. В типичной системе будет такой пакет, как «файловая система», который может иметь такие вещи, как /bin
. В случае пакета filesystem
на Red Hat и OpenSUSE этот пакет владеет /usr/bin
, но ни один из файлов в этом каталоге.
Вы можете сделать это, создав пакет-упаковку, который владеет вещами, которые используются в ваших приложениях, и делает его зависимым (Requires
) приложений, которые устанавливаются в эти каталоги.
Чтобы увидеть, что на самом деле имеет кое-что с оборотов в минуту, вы можете использовать -qf
варианты, например,
rpm -qf /usr/lib/mysystem/myprog
Команда работает для каталогов, а также файлы.
Документация для %dir
и %files
- это место для начала, когда вы решаете, как сделать собственный каталог. В Maximum RPM: Taking the Red Hat Package Manager to the Limit, глава 13 Directives For the %files list, он говорит:
Как мы уже упоминали в the section called The %files List, если каталог указан в % файлах списка, содержимые этот каталог, и содержимое каждой директории под он будет автоматически включен в комплект поставки
Способ устранения этого вопроса состоит в том, чтобы использовать директиву % dir. Добавив эту директиву в строку, содержащую каталог, RPM будет упаковывать только сам каталог, независимо от того, какие файлы находятся в каталоге во время создания пакета. Вот пример % dir в действии.
%dir /usr/blather
Так последний из предложенных случаев следует документации. Тем не менее, как проверка правильности синтаксиса (даже если rpm происходит для сборки), хорошей практикой является проверка списка путей.
Исследование Fedora 21 для поиска пакетов, для которых rpm -qf
показывает тот же каталог, что и несколько. Например, initscripts и chkconfig использовать %dir
директиву, чтобы сделать это:
%dir /etc/rc.d
%dir /etc/rc.d/rc[0-9].d
%dir /etc/rc.d/init.d
в initscripts
спец-файл, и
/etc/rc.d
/etc/rc.d/init.d
/etc/rc[0-6].d
/etc/rc.d/rc[0-6].d
в chkconfig
спец-файл.Однако для пакета initscripts
требуется /sbin/chkconfig
, который предоставляется пакетом chkconfig
. Из-за этой зависимости chkconfig
является фактическим владельцем каталога.
Это не тот случай, когда только один пакет может владеть ею. Например, из https://en.opensuse.org/openSUSE:Specfile_guidelines#Ownership: «В этом случае каждый пакет должен иметь каталог/usr/share/Foo/Animal.» Я вижу аналогичный пример в руководстве по упаковке Fedora. –
Документация может вводить в заблуждение. Программа rpm может рассказать вам, что делает rpm *. Если вы обнаружите два одновременно установленных rpms, для которых 'rpm -ql' перечисляет один и тот же путь, то это то, что можно обсудить. –
Итак, вы говорите, что два набора документов для двух из самых больших дистрибутивов ошибочны? Они даже дают отдельные примеры. Я дал сообщение от OpenSUSE; вот Fedora: «Решение. Оба пакета git и bzr должны иметь каталог /etc/bash_completion.d». Это означает, что в разделе% files файла .spec файла отображается общий каталог с директивой% dir (а затем без% dir подкаталоги в нем, которыми он владеет исключительно). –