2009-09-09 13 views
1

J'ai un projet qui nécessite des hooks post-installation pour le déploiement. Ma méthode consiste à utiliser setuptools pour générer le fichier de spécification rpm du squelette et tarer les fichiers source.Corrigez les autorisations pour l'empaquetage rpm/setuptools

Le problème est que je ne sais pas comment contrôler les autorisations avec cette méthode. Le fichier spec ressemble à:

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

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

Cela fonctionne raisonnablement bien: en ce que tous les fichiers sont mis à l'set utilisateur et les autorisations. Mais les répertoires n'ont pas les attributs définis sur eux. Je ne peux pas dire si c'est un problème, mais cela semble étrange: tous les répertoires appartiennent à root avec 755 permissions. Est-ce que quelqu'un sait un bon moyen (raisonnablement standard) de faire les répertoires appartenant à user? Je demande parce que mon entreprise a tendance à préférer les applications de conditionnement qui vont se déployer sous un compte de rôle spécifique à l'application. Lorsque j'utilise setuptools pour placer les résultats dans des packages de site, les fichiers .pyc sont copiés. Mais si je veux créer un répertoire de fichier de configuration hors du chemin, il semble que ce soit une bonne solution.

+1

Note de l'utilisateur:% files -f INSTALLED_FILES est généralement considéré comme une mauvaise pratique. Vous obtiendrez des propriétaires de répertoires rpm non fiables et imprévisibles de cette façon. Vraiment, il n'est pas difficile de lister manuellement les répertoires/fichiers installés pour un paquet python (puisque vous n'avez pas besoin de lister chaque fichier individuellement), mais cela simplifie la maintenance et les mises à niveau et fournit des résultats plus prévisibles. – abbot

Répondre

3

% defattr (755,% {user},% {user})

Cette ligne définit les autorisations par défaut, l'utilisateur et la propriété du groupe sur tous les fichiers. Vous pouvez remplacer la valeur par défaut avec quelque chose comme:

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

Si vous voulez la valeur par défaut à appartenir à un utilisateur autre que root, alors vous avez probablement besoin de définir la place de macro « utilisateur » en haut de la spécification:

%define user myusername 
Questions connexes