web-dev-qa-db-fra.com

Construire RPM pour juste installer des fichiers

J'ai besoin de construire un RPM, dans le seul but d'installer quelques polices. J'ai lu plusieurs tutoriels à ce sujet, mais tout le monde semble suggérer quelque chose de différent et je n'ai pas été en mesure de trouver quelque chose comme une configuration très basique pour le faire.

Est-il possible de simplement référencer les fichiers dans la section% files de la spécification? J'ai essayé cependant, rpm essaye toujours de trouver les fichiers dans le répertoire tmp. Dois-je ajouter une étape de construction spécifique qui copie tout ce dont j'ai besoin dans le répertoire tmp?

Ces fichiers doivent-ils aller dans le répertoire SOURCE ou BUILD lors de la construction du rpm? J'ai trouvé beaucoup d'informations différentes à ce sujet. Certains suggèrent de construire une archive contenant les fichiers et de la placer sous le répertoire SOURCE, mais cela semble un peu faux, car les fichiers de police ne sont pas pour moi des fichiers source.

Idéalement, j'aimerais simplement placer tous les fichiers de polices du dossier BUILD dans une structure de répertoires telle que './usr/share/fonts/', puis faire référence à cela dans la section% file de la SPEC et laisser RPM faire son travail. Probablement je manque ou mal comprendre quelque chose ici.

La section% files s'attend-elle toujours à trouver les fichiers source dans le répertoire tmp ou y a-t-il un problème avec ma configuration? J'ai créé ~/.rpmmacros qui contient

%_topdir             /Users/user/rpm

qui est le répertoire de construction racine et contient les répertoires BUILD, RPMS, SOURCES, SPECS et tmp.

Je serais heureux si quelqu'un pouvait fournir quels sont les éléments les moins requis dans le fichier de spécifications pour que cela fonctionne correctement.

Modifier

Suite aux suggestions de user3159253, j'utilise le fichier de spécification suivant:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/usr/share/fonts
cp ./usr/share/fonts/* %buildroot/usr/share/fonts/

%clean

%files
/usr/share/fonts/*

J'ai copié les polices dans le répertoire BUILD/usr/share/fonts /. Si je demande au rpm une liste de fichiers, toutes les polices sont là. Cependant, quand j’installe le rpm, il se plaint de

/usr/share/fonts is needed by test-1.0.0-1.noarch

Cependant, peu importe si ce répertoire existe ou non, je suppose donc que rpm se plaint du fait que cette ressource n'est pas répertoriée dans sa base de données.

J'ai pu résoudre ce problème en modifiant la section% file en:

/usr/
/usr/share/
/usr/share/fonts/
/usr/share/fonts/*

Cependant, je doute que ce soit une si bonne idée. Y at-il un meilleur moyen de résoudre ce problème?

11
Steve Hummingbird

lorsque vous répertoriez des fichiers dans la section %files, ces fichiers doivent résider dans le répertoire% {buildroot}. Comme le dit la documentation de Fedora depuis Fedora 10 buildroot ne peut pas être redéfini dans la spécification, vous devez donc créer une hiérarchie de système de fichiers requise dans% buildroot, y copier vos fichiers de police, puis les mentionner dans %files:

...
%install

mkdir -p %{buildroot}/usr/share/fonts
cp /path/to/existing/MyFont.ttf %buildroot/usr/share/fonts/
...

%files
%defattr(0644, root,root)
/usr/share/fonts/*

votre distribution a probablement des macros pratiques pour les emplacements de fichiers de polices standard, leur enregistrement correct dans le système lors de l'installation du fichier rpm, etc., mais la plupart de ces macros sont spécifiques à un fournisseur. En outre, vous devez copier vos fichiers de polices dans le sous-répertoire SOURCES/et les mentionner dans la balise Source: (Source<N>:) dans la spécification rpm (juste un exemple, un nombre peut être n'importe lequel):

Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...

Ensuite, vous pouvez utiliser quelque chose comme ceci dans la section %install:

cp %{SOURCE5} %buildroot/usr/share/fonts/

au lieu d’un chemin complet vers MyFont.ttf.

Update : Vous avez raison sur les dépendances manquantes: ce ne sont pas des artefacts (fichiers, répertoires, etc.) sur le système de fichiers, mais des enregistrements dans la base de données RPM (dans/var/lib/rpm). Donc, pour résoudre le problème, vous devez travailler avec cette base de données.

Ainsi, si vous avez des dépendances non satisfaites dans le package RPM généré, vous avez deux options:

  1. si vous souhaitez simplement disposer d'un moyen pratique de distribuer quelques fichiers sans intégration étroite avec les fonctionnalités système standard (voir ci-dessous), vous pouvez simplement désactiver tous les calculs de dépendances rpm. Utilisez AutoReqProv: no pour désactiver complètement tout ça.
  2. Cependant, vous devrez peut-être créer un paquet avec une meilleure intégration avec le reste du système d'exploitation. Par exemple, les polices peuvent nécessiter un enregistrement dans les installations système appropriées, par exemple. fontconfig. Malheureusement, les différentes distributions rpm de Linux ont des coutumes légèrement différentes, hein-hm. En fait, vous devez vérifier la manière dont ce processus est organisé dans votre distribution dans des packages de polices existants. Vous pouvez utiliser un paquetage rpm source approprié (vérifier http://rpmfind.net ou http://rpm.pbone.net moteurs de recherche RPM), extraire son fichier .spec et étudier comment %prein , %postin, %preun et %postun de la spécification sont organisés. De toute évidence, les paquets de polices portent généralement -fonts- en leur nom :)

Après tout, vous pouvez afficher des dépendances et fournir un paquetage rpm désinstallé avec rpm --query --requires --package </path/to/file.rpm> et rpm --query --provides --package </path/to/file.rpm>. Les dépôts des paquets installés sont affichés avec rpm --query --requires <rpm_name> et ainsi de suite.

6
user3159253

En guise de réponse à votre question modifiée, voici peut-être la réponse que vous recherchez:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/
cp -r ./* %buildroot/

%clean

%files
/*

Ici, nous considérons que chaque fichier du répertoire BUILD fait partie du paquet. Ceci est fait en plaçant /* sous %files.

J'espère que cela répond à votre question correctement.

0
fury.slay