TR / min construire Aucun fichier ou répertoire
Je veux créer simple fichier RPM avec de nombreux petits fichiers.
[root@laptop rpm]# tree
.
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│ └── some_agent-1.0.tar.gz
├── SPECS
│ ├── kernel.spec
│ └── kernel.spec~
└── SRPMS
6 directories, 3 files
[root@laptop rpm]#
J'ai ce fichier spec:
Summary: some_agent
Name: some_agent
Version: 1.0
Release: 1
License: Apache
Group: application
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
%description
Test
%prep
%setup -q
%build
%install
rm -rf $RPM_BUILD_ROOT
make root=$RPM_BUILD_ROOT install
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc
agent/*
Mais quand j'essaie de compiler le package RPM, j'obtiens cette erreur:
[root@laptop ~]$ rpmbuild -bb -v ~/rpm/SPECS/kernel.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.RUwFW5
+ umask 022
+ cd /home/rcbandit/rpm/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/rcbandit/rpm/BUILD
+ rm -rf some_agent-1.0
+ /usr/bin/gzip -dc /home/rcbandit/rpm/SOURCES/some_agent-1.0.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd some_agent-1.0
/var/tmp/rpm-tmp.RUwFW5: line 38: cd: some_agent-1.0: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.RUwFW5 (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.RUwFW5 (%prep)
[root@laptop ~]$ ^C
Avez-vous une idée où est mon erreur?
J'ai copié le fichier source, mais pour quelque raison il ne l'est pas.
- Il ressemble à rpmbuild a quelques problèmes avec le changement de répertoire décompressé some_agent répertoire, vérifier les chemins d'accès. Peut-être que vos sources n'étaient pas compressés correctement - sans 'some_agent-1.0' répertoire, juste des fichiers? Essayez de le décompresser manuellement et voir ce qui en est le résultat.
- Non, manuellement décompression des fichiers n'est pas résoudre le problème.
- Lorsque vous déballez le
some_agent-1.0.tar.gz
tarball, ne vous vous retrouvez avec un répertoire appelésome_agent-1.0
? Ou quelque chose d'autre? - oui, dans quel répertoire je dois le décompresser? SOURCES?
- Maintenant généré le RPM est vide. Ressemble encore, je suis en manque de quelque chose.
- J'ai repris l'original puisqu'il y avait une réponse (au moins partiellement) de répondre à cette question déjà par le temps que vous avez modifié la question, et invalidé leur réponse.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous spécifiez %dir, il contient juste ce répertoire et rien d'autre. Sans %dir pragma, il comprendra ce répertoire et TOUT ce qu'il contient.
Donc, vous avez juste à copier ces fichiers dans le répertoire en %section installer.
Edit:
Disons qu'some-agent-1.0.tar.gz contient:
puis vos articles devraient être:
Au lieu de la dernière ligne, vous pouvez soit utiliser:
mais évidemment
est plus courte et ont le même sens.
Dans cette %section installation vous pouvez utiliser n'importe quelle commande bash. Donc y faire ce serait vous le feriez normalement sur la ligne de commande. Shell travaux d'extension afin de l'utiliser pour votre avance.
J'ai utilisé un certain nombre de macros - vous devez les utiliser, plutôt que de chemin codé en dur. Vous pouvez obtenir la liste complète des macros disponibles par
Et de les évaluer par
qui sur les récentes RHEL et Fedoras evaluato à
J'ai aussi présenté le petit truc avec le fichier de LICENCE. Lorsqu'il est présent dans le répertoire de niveau supérieur de tarfile, il vous suffit de passer le nom d' %doc macro et rpm place pour corriger %docdir automatiquement.
your_milion_files/*
? Peut-être que chaque fichier ou un répertoire spécifique?Regardez le journal du processus de compilation. Tout d'abord,
rpmbuild
changements dans laBUILD
répertoire:Puis il décompresse votre archive source:
Alors qu'il tente de
cd
dans lesome_agent-1.0
répertoire, qui est sans doute créé par décompacter l'archive source:C'est un échec. Ceci suggère que la décompression de l'archive n'est pas de créer le répertoire RPM est à la recherche pour. Vous pouvez généralement résoudre ce à l'aide d'un argument de la
%setup
macro. Par exemple, si j'ai une archive nomméesome_agent-1.0.tar.gz
, et il contient:J'aurais besoin d'indiquer que le
-n
argument de la%setup
macro:%dir
dans votre%install
section.cp -ap agent/* $RPM_BUILD_ROOT/opt/agent/
Ou au lieu de faireinstall -m 0755 -d $RPM_BUILD_ROOT/opt/agent
, il suffit de copier tout le répertoire de l'arborescence:install -m 0755 -d $RPM_BUILD_ROOT/opt/
etcp -R agent $RPM_BUILD_ROOT/opt/
pwd
dans votre fichier spec, vous apprendrez ce que le répertoire de travail actuel est dans l' %section installer et de découvrir que j'ai fait une erreur, et il faut juste êtrecp -ap * $RPM_BUILD_ROOT/opt/agent/
.%setup -q -n an-unexpected-name
était ce que je cherchais.