Theo quan điểm của tôi, nó phụ thuộc một chút vào những gì bạn đang nhắm mục tiêu chính xác:
Các bản phân phối Linux như Fedora thực sự mong đợi đối với các bản dựng phân phối của họ rằng phần mềm được xây dựng từ nguồn bằng cách sử dụng tệp thông số kỹ thuật (bên trong một hệ thống bản dựng kín cũng ghi lại các gói/thành phần được sử dụng để xây dựng) và coi đây là một phương pháp hay, cũng như để đạt được nhiều khả năng tái tạo càng tốt.
Tuy nhiên, bạn thực sự chỉ có thể kéo các tệp nhị phân dựng sẵn và sử dụng chúng bên trong tệp thông số kỹ thuật để tạo gói RPM, ví dụ rút gọn cho kịch bản của bạn:
# [â¦]
Nguồn0: <tệp nhị phân>
Nguồn1: <tệp cấu hình>
# [â¦]
chuẩn bị %
%thiết lập -q -c -T
%xây dựng
%Tải về
cài đặt -D -p -m 0755 %{SOURCE0} $RPM_BUILD_ROOT%{_bindir}/%{name}
cài đặt -D -p -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}.conf
# [â¦]
Mặc dù điều này có thể hiệu quả, nhưng bạn nên kiểm tra rõ ràng xem các thành phần phụ thuộc của gói RPM kết quả có phù hợp không (rpm -qp --requires <â¦>.rpm
) hoặc nếu thiếu phụ thuộc thời gian chạy. Thường có các tùy chọn hoặc tham số thời gian biên dịch (ví dụ: CỜ
hoặc LDFLAGS
phần mềm được viết bằng C) cũng như các tập lệnh xử lý hậu kỳ (ví dụ: /usr/lib/rpm/(redhat/)brp-*
) trong khi xây dựng gói RPM bổ sung nội dung phân phối cụ thể và/hoặc trích xuất các thành phần phụ thuộc trong thời gian chạy cho bạn. Điều này có thể phù hợp hoặc không phù hợp với bạn (và một số tập lệnh xử lý hậu kỳ cũng có thể hoạt động đối với các tệp nhị phân dựng sẵn nhưng các tập lệnh khác thì không do thiếu tùy chọn trình biên dịch). Mặc dù tôi đang đóng gói rất nhiều phần mềm, nhưng tôi không có kinh nghiệm với Haskell, nhưng khi tìm kiếm một số gói Fedora, có những gói RPM có phụ thuộc thời gian chạy (và nếu có phụ thuộc thời gian chạy thì những gói này phải được thỏa mãn bởi gói RPM, vì đó là cách RPM hoạt động; và việc có thư viện phù hợp ở đâu đó trên hệ thống tệp của bạn là chưa đủ, vì RPM sẽ không biết về nó trừ khi nó được cung cấp bởi gói RPM). Do đó, việc xây dựng gói RPM từ các tệp nhị phân dựng sẵn có thể dẫn đến gói RPM không có phần phụ thuộc phù hợp, điều này có thể tiết lộ dưới dạng lỗi thời gian chạy sau này.
Liên quan đến ví dụ trên: Trong khi NguồnX:
có thể được cung cấp một URL, rpmbuild
vẫn mong đợi các tệp này trên đĩa trong NGUỒN
thư mục khi xây dựng gói RPM (vì vậy cách họ truy cập vào NGUỒN
thư mục tùy thuộc vào bạn).
Vì bạn đã không đề cập đến bản phân phối Linux nào mà bạn đang nhắm mục tiêu, tôi đang liên kết Fedora's Nguyên tắc đóng gói Haskell
ở đây, có thể hoặc không thể cung cấp thêm cảm hứng.Và vâng, các gói RPM có thể được phân phối chéo, điều này thực tế thường dẫn đến các tệp nhị phân tĩnh bên trong các gói RPM, do các phiên bản thư viện/gói thường khác nhau trên các bản phân phối Linux khác nhau.