RPM: Zestaw wymagany: somepackage> = 0,5.0 AND somepackage <0.6.0

14

Czy można ustawić wymagania dotyczące wersji zależnych w ten sposób:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0

Więc tylko pakiet 0.5.x zostanie zainstalowany automatycznie.

coxx
źródło

Odpowiedzi:

18

Tak, bardzo łatwo to zrobić.

Tylko napisz:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0

do twojego .specpliku.

Dodawanie wymagań wersji

Gdy pakiet ma nieco bardziej rygorystyczne potrzeby, można wymagać pewnych wersji pakietu. Wystarczy dodać żądany numer wersji, poprzedzony jednym z następujących operatorów porównania:

  • Wymaga pakietu z wersją mniejszą niż określona wersja.

  • Wymaga pakietu o wersji mniejszej lub równej podanej wersji.

  • Wymaga pakietu o wersji równej określonej wersji.

  • Wymaga pakietu o wersji równej lub większej niż określona wersja.

  • Wymaga pakietu o wersji większej niż podana.

Kontynuując nasz przykład, załóżmy, że wymagana wersja paska pakietu musi w rzeczywistości wynosić co najmniej 2.7, a pakiet baz musi mieć wersję 2.1 - żadna inna wersja tego nie zrobi. Oto jak powinna wyglądać wymagana linia znaczników: wymaga: bar> = 2.7, baz = 2.1

Źródło: http://rpm.org/user_doc/more_dependencies.html

Uważaj na możliwości wirtualne / zapewnia

System opisany powyżej działa dla większości pakietów; jeśli jednak pakiet, którego chcesz wymagać, jest dostarczany jako [funkcja wirtualna] [1] lub w inny sposób (tzn. słowo kluczowe „Zapewnia:”) w pakietach o różnych nazwach (które nie powodują konfliktów), wówczas może skończyć się zainstalowaniem dwóch różnych pakietów, z których każdy indywidualnie spełnia jedno z twoich wymagań. Na przykład jeśli plik specyfikacji zawiera:

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

Może spowodować (jeśli masz te pakiety do dyspozycji) instalację:

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

Ale nie zainstaluje postgresql84-server, który prawdopodobnie jest pakietem, którego można się spodziewać.

(W tym przypadku rozwiązaniem byłoby po prostu wymaganie serwera postgresql84; istnieją jednak inne przykłady, które nie mają łatwego rozwiązania).

MikeyB
źródło
miałem wirtualną zależność od „cośdev (nazwa)> = 1.0.14”, ale kiedy poszedłem do instalacji yum ... wirtualna zależność nie zainstalowała wymaganej wersji, mimo że jest w repozytorium RPM. musiałem zmienić wirtualną zależność na nazwę RPM „coś-nazwa-dev> = 1.0.14” i wtedy zadziałało.
Trevor Boyd Smith
1

Nie jest dla mnie jasne, czy próbujesz zbudować pakiet lub zainstalować pakiet i „ograniczyć” jego zależności.

Nie widzę sposobu na zrobienie drugiego przypadku bez przebudowania pakietu.

Możesz pobrać plik SRPM i edytować plik specyfikacji oraz dodać / zmodyfikować wpis Wymaga (chcesz pakietu 0.5.x, prawda?) Do czegoś takiego:

Requires: somepackage = 0.5.0

a następnie odbuduj za pomocą

rpmbuild -bb -v yourpackage.spec

Jeśli nigdy tego nie zrobiłeś, wydaje się on zastraszający, ale rozwiązuje twój problem. Pamiętaj, że jeśli tworzysz pakiet publiczny dla dystrybucji, możesz przeczytać jego wytyczne, ponieważ ustawianie zależności w ten sposób zasadniczo nie jest zalecane.

sebelk
źródło
2
Naprawdę nie mogę mówić za OP, ale czasami chcesz najnowszej aktualizacji z określonej serii wersji, a nie tylko konkretnej wersji. Na przykład możesz wiedzieć, że chcesz Apache 2.2.x, ponieważ 2.4.x nie będzie działać poprawnie z twoim pakietem. W szczególności wymaganie 2.2.23 nie pozwoli na zainstalowanie przyszłych aktualizacji 2.2.x.
Alan Krueger