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?
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:
rpm
. Utilisez AutoReqProv: no
pour désactiver complètement tout ça.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.
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.