2012-12-25 11 views
10

Ich muss allgemeine Attribute für eines der Hauptverzeichnisse im Paket angeben und spezielle Berechtigungen für einige der Unterverzeichnisse. z.B.Was bedeutet die rpmbuild Warnung "Datei zweimal aufgeführt" TATSÄCHLICH?

Ich bekomme die Datei "Datei zweimal aufgelistet" auf jeder Datei unter/opt/myapp/bin, natürlich. Meine Frage ist, was bedeutet das eigentlich? Was macht rpmbuild damit? Ich kann nirgends eine Antwort finden. Kann ich es einfach ignorieren? Was hat Vorrang, das erste oder das letzte Vorkommnis?

Ich möchte nicht alles unter myapp explizit aufzulisten, um dies zu lösen. Gibt es einen anderen Weg? Danke

Antwort

4

Es bedeutet genau das - es ist zweimal aufgeführt. ;) Ich hatte nie ein Problem damit, aber ich weiß nicht, welches gewinnen wird.

Als Randnotiz sollten Sie wahrscheinlich /etc nicht selbst auflisten, da Sie das nicht besitzen möchten.

+1

guter Punkt re/etc, danke – davka

+1

Diese Antwort ist falsch. Wenn Sie/etc auflisten, besitzt die RPM alle Dateien, die sich in% {buildroot}/etc befinden, nicht in/etc. Das Auflisten von/etc im Abschnitt% files ist also gängige Praxis, und es gibt keinen wirklichen Nachteil – Bruno9779

+0

Wenn Sie versuchen, zwei Pakete zu installieren, die versuchen, '/ etc' zu besitzen, wird RPM die Installation des zweiten verweigern warum ist es zu vermeiden. –

6

ändern es dazu:

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

Mitteilung der %dir für das Verzeichnis. Das sollte die doppelt gelisteten Dateien zweimal warnen.

+3

Beachten Sie, dass [% dir verwendet, um es zu einem leeren Verzeichnis zu machen] (http://www.rpm.org/max- rpm/s1-rpm-inside-files-list-direktiven.html). Das ist also nicht so nützlich, wenn Sie alles in/opt/myapp * und * benutzerdefinieren müssen, um die Berechtigungen nur für das bin-Unterverzeichnis zu konfigurieren. –

8

Ich poste hier nur für den Fall, dass jemand das gleiche Problem hat und diese alte Frage findet.

Kürzlich (wie vor kurzem hängt von der Distro) das Makro% exclude wurde zu rpmbuild hinzugefügt.

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

Der hier Vorteil ist nicht so offensichtlich, ausschließen eine Reihe von Dateien oder Ordnern haben:

%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 

Seltsamer die [a | b] Syntax arbeitet mit% ausschließen, aber nicht mit den anderen Richtlinien in% Dateien (zB kann ich eine Regex zum Ausschließen verwenden, aber nicht einschließen, doh)

+0

danke, es hat funktioniert. So kann ich /home/oracle/Skripte % tun ausschließen /home/oracle/scripts/myconfig.config % config (noreplace) /home/oracle/scripts/myconfig.config ohne die Warnung über doppelte Datei – Saule

+0

Leider erlaubt es mir auf meinem CentOS 5.5 das Hinzufügen von '% exclude' nicht, Dateien später wieder einzuschließen. –

+0

Centos 5 hat EOL erreicht. Es ist Zeit, es zu verschrotten ... – Bruno9779