2009-09-09 2 views
1

У меня есть проект, который требует установки после установки крюков для развертывания. Мой метод состоит в том, чтобы использовать setuptools для генерации файла спецификации rpm скелета и tar исходных файлов.Fix permissions для rpm/setuptools упаковка

Проблема в том, что я не знаю, как управлять разрешениями с помощью этого метода. Файл спецификации выглядит следующим образом:

%install 
python setup.py install --single-version-externally-managed --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES 

%files -f INSTALLED_FILES 
%defattr(755,%{user},%{user}) 

Это работает достаточно хорошо: в том, что все файлы приготовьтесь установлен соответствующим пользователем и правами доступа. Но в каталогах нет атрибутов, установленных на них. Я не могу сказать, является ли это проблемой, но это кажется странным: все каталоги принадлежат root с полномочиями 755. Кто-нибудь знает хороший (разумно стандартный) способ сделать каталоги, принадлежащие user? Я спрашиваю, потому что моя компания предпочитает упаковывать приложения, которые будут развертываться под учетной записью ролей приложения. Когда я использую setuptools для размещения результатов в сайтах-пакетах, файлы .pyc копируются. Но если я хочу создать директорию с конфигурационным файлом с пути, кажется, что это хорошая работа.

+1

Уведомление о стороне:% файлов -f INSTALLED_FILES обычно считается плохой практикой. Таким образом вы получите ненадежные и непредсказуемые каталоги rpm. Действительно, нетрудно вручную перечислить установленные dirs/файлы для пакета python (так как вам не нужно перечислять каждый файл отдельно), но это упрощает обслуживание и обновления и обеспечивает более предсказуемые результаты. – abbot

ответ

3

% defattr (755,% {пользователь}, {%} пользователь)

Эта строка устанавливает разрешения по умолчанию, пользователь и группа собственности на все файлы. Вы можете изменить настройки по умолчанию что-то вроде:

%attr(644, <username>, <username>) </path/to/file> 

Если вы хотите по умолчанию будет принадлежать пользователю, кроме корня, то вам, вероятно, нужно определить «пользователя» вверх макрос в верхней части спецификации:

%define user myusername