2012-12-25 16 views
10

Devo specificare attributi comuni per una delle directory principali nel pacchetto e autorizzazioni speciali per alcuni dei sottodirectory. per esempio.cosa avvisa l'avviso di rpmbuild "File elencato due volte"?

%files 
%attr(-, myuser, mygroup) /opt/myapp 
%attr(750, myuser, mygroup) /opt/myapp/bin # no exec permission to other 
/etc # this is the reason I can't use %defattr(-, myuser, mygroup) 

ottengo il "file elencato due volte" warning su ogni file in/opt/myapp/bin, naturalmente. La mia domanda è, cosa significa in realtà? Cosa fa rpmbuild con esso? Non riesco a trovare una risposta da nessuna parte. Posso semplicemente ignorarlo? Che cosa ha la precedenza, il primo o l'ultimo evento?

Preferisco non elencare tutto sotto myapp in modo esplicito per risolvere questo problema. c'è qualche altro modo? Grazie

risposta

4

Significa solo che - è elencato due volte. ;) Non ho mai avuto un problema con esso, ma non so quale vincerà.

Come nota a margine, probabilmente non si dovrebbe elencare /etc da solo, poiché non si desidera possederlo.

+1

buon punto re/ecc., grazie – davka

+1

Questa risposta è errata. Se elenchate/etc, il rpm "possiede" tutti i file che sono in% {buildroot}/etc, non in/etc. Quindi, elencare/etc nella sezione% files è pratica comune e non c'è alcun vero svantaggio – Bruno9779

+0

Se si tenta di installare due pacchetti che provano a possedere '/ etc', RPM rifiuterà di installare il secondo, che è perché deve essere evitato. –

6

Change a questo:

%files 
%dir %attr(-, myuser, mygroup) /opt/myapp 
%attr(750, myuser, mygroup) /opt/myapp/bin 

preavviso la %dir per la directory. Questo dovrebbe sbarazzarsi dei file elencati due volte di avviso.

+3

Si noti che [utilizzando% dir lo renderà una directory vuota] (http://www.rpm.org/max- rpm/s1-rpm-Inside-files-list-directives.html). Quindi questo non è così utile se è necessario includere tutto in/opt/myapp * e * custom-configure le autorizzazioni solo sulla sottodirectory bin. –

8

Sto postando qui solo nel caso qualcuno abbia lo stesso problema e trovi questa vecchia domanda.

Recentemente (come recentemente dipende dalla distribuzione) la macro% exclude è stata aggiunta a rpmbuild.

%files 
%attr(-, myuser, mygroup) /opt/myapp 
%exclude /opt/myapp/bin 
%attr(750, myuser, mygroup) /opt/myapp/bin # no exec permission to other 

Il vantaggio non è così evidente come avere un insieme di file o cartelle da escludere:

%files 
%attr(-, myuser, mygroup) /opt/myapp 
%exclude /opt/myapp/[bin|data|whatever] 
%attr(750, myuser, mygroup) /opt/myapp/bin # no exec permission to other 
%attr(777, myuser, myothergroup) /opt/myapp/data 
%attr(640, myuser, myothergroup) /opt/myapp/whatever 

Stranamente il [A | B] sintassi funziona con% escludere, ma non con le altre direttive in% file (ad esempio, posso usare una regex per escludere ma non includere, doh)

+0

grazie, ha funzionato. Così posso fare /home/oracle/scripts % escludere /home/oracle/scripts/myconfig.config % config (noreplace) /home/oracle/scripts/myconfig.config senza l'avviso relativo file duplicato – Saule

+0

Sfortunatamente sul mio CentOS 5.5 l'aggiunta di '% exclude' non mi permette di ri-includere i file in seguito. –

+0

Centos 5 ha raggiunto EOL. È ora di eliminarlo ... – Bruno9779