2012-12-25 18 views
10

Tôi cần chỉ định các thuộc tính chung cho một trong các thư mục chính trong gói và quyền đặc biệt cho một số thư mục con đó. ví dụ.cảnh báo rpmbuild "Tệp được liệt kê hai lần" THỰC TẾ LÀ GÌ?

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

Tôi nhận được cảnh báo "tệp được liệt kê hai lần" trên mỗi tệp trong/opt/myapp/bin, một cách tự nhiên. Câu hỏi của tôi là, nó thực sự có ý nghĩa gì? Rpmbuild làm gì với nó? Tôi không thể tìm thấy câu trả lời ở đâu cả. Tôi có thể bỏ qua nó không? Điều gì được ưu tiên, lần đầu tiên hoặc lần xuất hiện cuối cùng?

Tôi không muốn liệt kê mọi thứ dưới myapp một cách rõ ràng để giải quyết vấn đề này. Còn cách nào khác không? Cảm ơn

Trả lời

4

Điều đó có nghĩa là chỉ - nó được liệt kê hai lần. ;) Tôi chưa bao giờ gặp vấn đề với nó, nhưng tôi không biết cái nào sẽ thắng.

Là một lưu ý phụ, bạn có thể không nên tự liệt kê /etc vì bạn không muốn sở hữu điều đó.

+1

điểm tốt lại, v.v., cảm ơn – davka

+1

Câu trả lời này là sai. Nếu bạn liệt kê/etc, rpm sẽ "sở hữu" tất cả các tệp có trong% {buildroot}/etc, không phải trong/etc. Vì vậy, việc liệt kê/etc trong phần% files là thực tế phổ biến và không có bất kỳ hạn chế thực sự nào – Bruno9779

+0

Nếu bạn cố cài đặt hai gói cố gắng sở hữu '/ etc', RPM sẽ từ chối cài đặt gói thứ hai, tại sao nó là để tránh. –

6

Thay đổi nó như thế này:

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

thông báo các %dir cho thư mục. Điều đó sẽ loại bỏ các tập tin được liệt kê hai lần cảnh báo.

+3

Lưu ý rằng [sử dụng% dir sẽ làm cho nó một thư mục trống] (http://www.rpm.org/max- rpm/s1-rpm-bên trong-tệp-danh sách-directives.html). Vì vậy, điều này không hữu ích nếu bạn cần bao gồm mọi thứ trong/opt/myapp * và * tùy chỉnh cấu hình các điều khoản chỉ trên subdir bin. –

8

Tôi đăng ở đây chỉ trong trường hợp ai đó có cùng vấn đề và tìm thấy câu hỏi cũ này.

Gần đây (cách gần đây phụ thuộc vào bản phân phối) macro loại trừ% đã được thêm vào rpmbuild.

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

Lợi thế ở đây không phải là điều hiển nhiên là có một bộ các tập tin hoặc thư mục để loại trừ:

%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 

Kỳ lạ thay các [a | b] Cú pháp làm việc với% loại trừ nhưng không phải với các chỉ thị khác trong% tệp (ví dụ: tôi có thể sử dụng regex để loại trừ nhưng không bao gồm, doh)

+0

cảm ơn, nó đã hoạt động. Vì vậy, tôi có thể làm /home/oracle/script % loại trừ /home/oracle/scripts/myconfig.config % config (noreplace) /home/oracle/scripts/myconfig.config mà không có cảnh báo về trùng lặp tập tin – Saule

+0

Thật không may trên CentOS 5.5 của tôi thêm '% exclude' không cho phép tôi bao gồm các tệp sau này. –

+0

CentOS 5 đã đạt đến EOL. Đã đến lúc phải xóa nó ... – Bruno9779

Các vấn đề liên quan