RPM: Đặt bắt buộc: somepackage> = 0.5.0 VÀ somepackage <0.6.0


14

Có thể đặt các yêu cầu phiên bản phụ thuộc như thế này không:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0

Vì vậy, chỉ có somepackage 0.5.x sẽ được cài đặt tự động.

Câu trả lời:


18

Vâng, rất dễ dàng để làm như vậy.

Chỉ viết:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0

vào .spectập tin của bạn .

Thêm yêu cầu phiên bản

Khi một gói có nhu cầu nghiêm ngặt hơn một chút, có thể yêu cầu một số phiên bản nhất định của gói. Tất cả những gì cần thiết là thêm số phiên bản mong muốn, trước một trong các toán tử so sánh sau:

  • Yêu cầu gói có phiên bản nhỏ hơn phiên bản đã chỉ định.

  • Yêu cầu gói có phiên bản nhỏ hơn hoặc bằng phiên bản đã chỉ định.

  • Yêu cầu gói có phiên bản bằng với phiên bản đã chỉ định.

  • Yêu cầu gói có phiên bản bằng hoặc lớn hơn phiên bản đã chỉ định.

  • Yêu cầu gói có phiên bản lớn hơn phiên bản đã chỉ định.

Tiếp tục với ví dụ của chúng tôi, giả sử rằng phiên bản thanh gói yêu cầu thực sự cần ít nhất là 2,7 và gói baz phải là phiên bản 2.1 - không có phiên bản nào khác làm được. Đây là dòng thẻ yêu cầu sẽ trông như thế nào: yêu cầu: bar> = 2.7, baz = 2.1

Nguồn: http://rpm.org/user_doc/more_dependencies.html

Cảnh giác với khả năng / Cung cấp ảo

Hệ thống được mô tả ở trên hoạt động cho hầu hết các gói; tuy nhiên, nếu gói bạn muốn yêu cầu được cung cấp dưới dạng [khả năng ảo] [1] hoặc được cung cấp theo cách khác (nghĩa là từ khóa "Cung cấp:") bởi các gói có tên khác nhau (không xung đột với nhau), thì bạn có thể kết thúc với hai gói khác nhau được cài đặt, mỗi gói đáp ứng một trong các yêu cầu của bạn. Ví dụ: nếu tệp spec của bạn chứa:

Requires: postgresql-server >= 8.4, postgresql-server < 9.0

Có thể dẫn đến (nếu bạn có sẵn các gói này cho yum) việc cài đặt:

  • postgresql-server 8.1.23-6.el5_8 (postgresql-server <9.0)
  • postgresql92-server 9.2.5-1PGDG.rhel5 (postgresql-server> = 8.4)

Nhưng sẽ không cài đặt postgresql84-server, đây có thể là gói mà bạn dự kiến ​​sẽ cài đặt.

(Trong trường hợp này, giải pháp đơn giản là yêu cầu máy chủ postgresql84; tuy nhiên, có thể có các ví dụ khác không có giải pháp dễ dàng.)


tôi đã có một sự phụ thuộc ảo vào "Somethingdev (tên)> = 1.0,14" nhưng khi tôi đi cài đặt yum ... thì sự phụ thuộc ảo đã không cài đặt phiên bản bắt buộc mặc dù đang ở trong repo RPM. tôi đã phải thay đổi sự phụ thuộc ảo thành tên của RPM "Something-name-dev> = 1.0.14" và sau đó nó hoạt động.
Trevor Boyd Smith

1

Tôi không rõ ràng nếu bạn đang cố gắng xây dựng một gói hoặc cài đặt một gói và "giới hạn" các phụ thuộc của nó.

Tôi không thấy cách tạo trường hợp thứ hai mà không xây dựng lại gói.

Bạn có thể truy xuất SRPM và chỉnh sửa tệp spec và để thêm / sửa đổi mục Yêu cầu (bạn muốn có bản sao 0,5.x, phải không?) Cho một cái gì đó như thế này:

Requires: somepackage = 0.5.0

và sau đó xây dựng lại với

rpmbuild -bb -v yourpackage.spec

Nếu bạn không bao giờ làm điều đó, nó có vẻ đáng sợ nhưng nó giải quyết vấn đề của bạn. Hãy nhớ rằng nếu đang tạo một gói công khai cho một bản phân phối, bạn có thể muốn đọc tính trung thực của nó bởi vì việc đặt phụ thuộc theo cách này thường không được khuyến nghị.


2
Tôi thực sự không thể nói cho OP, nhưng đôi khi bạn muốn cập nhật gần đây nhất trong một loạt phiên bản cụ thể, không chỉ là một phiên bản cụ thể. Chẳng hạn, bạn có thể biết bạn muốn Apache 2.2.x vì 2.4.x sẽ không hoạt động đúng với gói của bạn. Cụ thể yêu cầu 2.2.23 sẽ không cho phép các bản cập nhật trong tương lai trong 2.2.x được cài đặt.
Alan Krueger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.