RPM: Set Obligatoire: somepackage> = 0.5.0 AND somepackage <0.6.0


14

Est-il possible de définir des exigences de version de dépendance comme ceci:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0

Ainsi, seul un paquet 0.5.x sera installé automatiquement.

Réponses:


18

Oui, très facile à faire.

Ecrivez:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0

dans votre .specfichier.

Ajout d'exigences de version

Lorsqu'un package a des besoins légèrement plus stricts, il est possible d'exiger certaines versions d'un package. Il suffit d'ajouter le numéro de version souhaité, précédé de l'un des opérateurs de comparaison suivants:

  • Nécessite un package avec une version inférieure à la version spécifiée.

  • Requiert un package avec une version inférieure ou égale à la version spécifiée.

  • Nécessite un package avec une version égale à la version spécifiée.

  • Nécessite un package avec une version égale ou supérieure à la version spécifiée.

  • Nécessite un package avec une version supérieure à la version spécifiée.

En continuant avec notre exemple, supposons que la version requise de la barre de packages doit en fait être au moins 2,7 et que le package baz doit être la version 2.1 - aucune autre version ne fera l'affaire. Voici à quoi ressemblerait le slogan require: require: bar> = 2.7, baz = 2.1

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

Méfiez-vous des capacités virtuelles / fournit

Le système décrit ci-dessus fonctionne pour la plupart des packages; cependant, si le package dont vous souhaitez avoir besoin est fourni en tant que [capacité virtuelle] [1] ou est fourni (par exemple, "Fournit:" mot-clé) par des packages de noms différents (qui n'entrent pas en conflit les uns avec les autres), alors vous peut se retrouver avec deux packages différents installés, chacun répondant individuellement à l'une de vos exigences. Par exemple, si votre fichier de spécifications contient:

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

Peut entraîner (si vous disposez de ces packages pour yum) l'installation de:

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

Mais n'installera pas postgresql84-server, qui est probablement le package que vous vous attendiez à avoir installé.

(Dans ce cas, la solution serait simplement d'exiger postgresql84-server; cependant, il existe probablement d'autres exemples qui n'ont pas de solution facile.)


j'avais une dépendance virtuelle sur "quelque chose (nom)> = 1.0.14" mais quand je suis allé à l'installation de yum ... la dépendance virtuelle n'a pas installé la version requise malgré le fait qu'elle soit dans le dépôt RPM. j'ai dû changer la dépendance virtuelle au nom du RPM "something-name-dev> = 1.0.14" et puis cela a fonctionné.
Trevor Boyd Smith

1

Ce n'est pas clair pour moi si vous essayez de construire un package ou d'installer un package et de "limiter" ses dépendances.

Je ne vois pas de moyen de faire le deuxième cas sans reconstruire le paquet.

Vous pouvez récupérer le SRPM et éditer le fichier de spécifications et ajouter / modifier l'entrée Requiert (vous voulez un paquet 0.5.x, n'est-ce pas?) À quelque chose comme ceci:

Requires: somepackage = 0.5.0

puis reconstruire avec

rpmbuild -bb -v yourpackage.spec

Si vous ne l'avez jamais fait, cela semble intimidant, mais cela résout votre problème. Gardez à l'esprit que si vous créez un package public pour une distribution, vous voudrez peut-être lire son caractère pratique car la dépendance définie de cette manière n'est généralement pas recommandée.


2
Je ne peux pas vraiment parler pour l'OP, mais parfois vous voulez la mise à jour la plus récente dans une série de versions spécifique, pas seulement une version spécifique. Par exemple, vous savez peut-être que vous voulez Apache 2.2.x car 2.4.x ne fonctionnera pas correctement avec votre package. Exiger spécifiquement 2.2.23 ne permettrait pas l'installation de futures mises à jour dans 2.2.x.
Alan Krueger
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.