2012-12-25 105 views
10

我需要爲包中的主要目錄之一指定通用屬性,併爲其中一些子目錄賦予特殊權限。例如rpmbuild警告「File listed twice」是什麼意思?

%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) 

自然,我在每個文件/ opt/myapp/bin下都得到了「文件列出兩次」警告。我的問題是,它究竟意味着什麼? rpmbuild與它做什麼?我無法在任何地方找到答案。我可以忽略它嗎?優先次序,第一次還是最後一次出現?

我更願意不要在myapp下明確列出所有要解決的問題。有沒有其他方法?謝謝

回答

4

這意味着只是 - 它列出了兩次。 ;)我從來沒有遇到過問題,但我不知道哪個會取勝。

作爲一個方面說明,你可能不應該自己列出/etc,因爲你不想擁有它。

+1

好點重新/ etc,謝謝 – davka

+1

這個答案是錯誤的。如果您列出/ etc,rpm將「擁有」%{buildroot}/etc中的所有文件,而不是在/ etc中。 因此,在%files部分列出/ etc是通常的做法,並且沒有任何實際的缺陷 – Bruno9779

+0

如果您嘗試安裝兩個試圖擁有'/ etc'的包,RPM將拒絕安裝第二個包,即爲什麼要避免。 –

6

它改成這樣:

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

通知%dir的目錄。這應該擺脫列出兩次警告的文件。

+3

請注意,[使用%dir將使它成爲一個空目錄](http://www.rpm.org/max-轉/ S1-RPM-內部-文件一覽directives.html)。因此,如果您需要將所有內容都包含在/ opt/myapp *和* custom配置bin子目錄的權限,那麼這不是很有用。 –

8

我在這裏發帖,以防萬一有人遇到同樣的問題,並發現這個老問題。

最近(最近取決於發行版)宏%exclude已被添加到rpmbuild。

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

這裏的優勢是不是有一組文件或文件夾的排除爲明顯:

%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 

奇怪的[A | B]語法可與%排除,但不與其他指令在%文件(例如,我可以使用正則表達式排除但不包括,doh)

+0

謝謝,它的工作。所以我可以做 /家庭/ ORACLE /腳本 %排除/home/oracle/scripts/myconfig.config %配置(了noreplace)/home/oracle/scripts/myconfig.config 沒有關於重複文件 – Saule

+0

警告不幸的是,在我的CentOS 5.5中添加'%exclude'不允許我稍後重新包含文件。 –

+0

Centos 5已經達到EOL。現在是放棄它的時候了...... – Bruno9779

相關問題