RPM: Erforderlich einstellen: Paket> = 0.5.0 UND Paket <0.6.0

14

Ist es möglich, bestimmte Versionsanforderungen wie folgt festzulegen:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0

Es wird also nur ein Paket 0.5.x automatisch installiert.

Coxx
quelle

Antworten:

18

Ja, sehr einfach.

Einfach schreiben:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0

in deine .specDatei.

Versionsanforderungen hinzufügen

Wenn ein Paket etwas strengere Anforderungen hat, können bestimmte Versionen eines Pakets erforderlich sein. Dazu muss lediglich die gewünschte Versionsnummer hinzugefügt werden, vor der einer der folgenden Vergleichsoperatoren steht:

  • Benötigt ein Paket mit einer Version, die kleiner als die angegebene Version ist.

  • Erfordert ein Paket mit einer Version, die kleiner oder gleich der angegebenen Version ist.

  • Erfordert ein Paket mit einer Version, die der angegebenen Version entspricht.

  • Erfordert ein Paket mit einer Version, die der angegebenen Version entspricht oder höher ist.

  • Erfordert ein Paket mit einer Version, die größer als die angegebene Version ist.

Nehmen wir an, dass die erforderliche Version von package bar mindestens 2.7 und das baz-Paket Version 2.1 sein muss - keine andere Version wird dies tun. So würde die erfordert-Tag-Zeile aussehen: erfordert: bar> = 2.7, baz = 2.1

Quelle: http://rpm.org/user_doc/more_dependencies.html

Achten Sie auf virtuelle Funktionen / Angebote

Das oben beschriebene System funktioniert für die meisten Pakete. Wenn das Paket, das Sie benötigen möchten, jedoch als [virtuelle Funktion] [1] bereitgestellt wird oder auf andere Weise bereitgestellt wird (dh das Schlüsselwort "Provides:"), durch Pakete mit unterschiedlichen Namen (die nicht miteinander in Konflikt stehen), dann Sie Möglicherweise werden zwei verschiedene Pakete installiert, von denen jedes einzeln eine Ihrer Anforderungen erfüllt. Zum Beispiel, wenn Ihre Spezifikationsdatei enthält:

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

Kann dazu führen (wenn Sie diese Pakete zur Verfügung haben), dass Folgendes installiert wird:

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

Es wird jedoch kein postgresql84-Server installiert, bei dem es sich wahrscheinlich um das Paket handelt, von dem Sie erwartet hätten, dass es installiert ist.

(In diesem Fall würde die Lösung einfach darin bestehen, einen postgresql84-Server zu benötigen. Es gibt jedoch wahrscheinlich auch andere Beispiele, für die es keine einfache Lösung gibt.)

MikeyB
quelle
Ich hatte eine virtuelle Abhängigkeit von "somethingdev (name)> = 1.0.14", aber als ich zu yum install ging ... installierte die virtuelle Abhängigkeit nicht die erforderliche Version, obwohl sie sich im RPM-Repo befand. Ich musste die virtuelle Abhängigkeit auf den Namen des RPM "something-name-dev> = 1.0.14" ändern und dann funktionierte es.
Trevor Boyd Smith
1

Es ist mir nicht klar, ob Sie versuchen, ein Paket zu erstellen oder ein Paket zu installieren und dessen Abhängigkeiten zu "begrenzen".

Ich sehe keinen Weg, den zweiten Fall zu schaffen, ohne das Paket neu zu erstellen.

Sie können das SRPM abrufen und die Spezifikationsdatei bearbeiten sowie den Eintrag Requires (Sie möchten ein Paket 0.5.x, oder?) Wie folgt hinzufügen / ändern:

Requires: somepackage = 0.5.0

und dann mit neu aufbauen

rpmbuild -bb -v yourpackage.spec

Wenn Sie es nie getan haben, wirkt es einschüchternd, löst aber Ihr Problem. Bedenken Sie, dass Sie beim Erstellen eines öffentlichen Pakets für eine Distribution möglicherweise dessen Richtlinien lesen möchten, da diese Methode für das Festlegen von Abhängigkeiten im Allgemeinen nicht empfohlen wird.

sebelk
quelle
2
Ich kann nicht wirklich für das OP sprechen, aber manchmal möchten Sie das neueste Update in einer bestimmten Versionsreihe, nicht nur in einer bestimmten Version. Möglicherweise möchten Sie Apache 2.2.x, da 2.4.x mit Ihrem Paket nicht ordnungsgemäß funktioniert. Insbesondere wenn 2.2.23 erforderlich ist, können zukünftige Updates in 2.2.x nicht installiert werden.
Alan Krueger