Installer des versions particulières lorsque le dépôt a des versions plus récentes?

13

Ayons un métapaquet qui dépend des packages suivants

Depends: A (=2),
 B (=2),
 C (=2)

Notez le '=' - je veux installer ces versions particulières, pas les plus récentes.

Aditionellement:

B dépend de A (> = 1)

C dépend de B (> = 1) et A (> = 1)

Si les versions les plus récentes de A, B, C dans le référentiel sont 2, cela fonctionne.

Depuis que j'ai mis la version 3 de A et la version 3 de B dans le repo sudo apt-get install my-meta-package refuse de terminer avec les informations suivantes:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Si j'installe manuellement les versions 2 de A et B, le métapaquet s'installe correctement, ce qui suggère fortement qu'il n'y a pas de dépendance cachée sur A3 ou B3. Ce n'est pas une solution au problème car le métapaquet est installé automatiquement sur de nombreuses machines.

QUESTION: Que faire pour que sudo apt-get installe my-meta-package install versions 2.2,2?

De plus, existe-t-il un moyen d'obtenir des informations détaillées qui crée réellement le besoin de la version 3 de A et de la version 3 de B?

tymtam
la source
Oh, je n'ai pas lu toute la question avant de répondre. Pouvez-vous simplement reconditionner le métapaquet?
int_ua
2
@int_ua Je ne comprends pas ce que ferait le reconditionnement du métapaquet.
tymtam
@belacqua - je suis avec vous, mais nous avons besoin d'une réponse solide qui couvre ce qui se passe quand il y a des inversions et des dépendances cassées, etc.
RobotHumans
Le fichier de contrôle de votre métapaquet inclut-il une version non explicite des packages dépendants, par exemple (a=2), (b=2)?
Anwar

Réponses:

11

Vous devez sélectionner les versions particulières à installer et les installer toutes en même temps que vous installez le méta-package.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Comme le dit la réponse de int_ua , vous pouvez découvrir les dépendances inverses avec ceci:

apt-cache rdepends package

Si vous souhaitez en savoir plus sur l'un de ces packages ( versions disponibles, dépendances, etc. ), utilisez ceci:

apt-cache show package

Une fois que vous avez terminé de les installer et que vous souhaitez les conserver dans ces versions lors des mises à niveau du système, vous devrez utiliser l' épinglage apt comme suggéré par belacqua .

Épinglage APT

La fonction d'épinglage APT permet aux administrateurs de forcer APT à choisir des versions particulières de packages qui peuvent être disponibles dans différentes versions à partir de différents référentiels. Cela permet aux administrateurs de s'assurer que les packages ne sont pas mis à niveau vers des versions qui peuvent entrer en conflit avec d'autres packages sur le système, ou qui n'ont pas été suffisamment testées pour des modifications indésirables. Pour ce faire, les broches du fichier de préférences d'APT (/ etc / apt / preferences) doivent être modifiées.

Sepero
la source
Je crois que c'est la bonne réponse, en mettant le = puis le nom du package avec la version
LnxSlck
1
Je suis le collègue de Tymek et cela résout en fait le problème. Dommage que nous devions inverser le métapaquet pour y arriver. Un peu de Python créatif est de mise. Merci beaucoup pour la réponse.
Igor Zevaka
1
Je me demande si une meilleure solution est apparue depuis que le temps a passé?
ygrek
1

Vous pouvez d'abord essayer d'installer des dépendances avec

sudo apt-get install package=2 où 2 est la version

Vous pouvez savoir quels packages dépendent du package avec

apt-cache rdepends package

int_ua
la source
1
rdepends ne fournit pas d'informations détaillées sur les versions, non?
tymtam
2
L'installation des dépendances en premier serait difficile d'avoir le métapaquet. C'est une solution, mais pas celle que je recherche.
tymtam
1
Notez que pour que cela fonctionne, les référentiels doivent avoir une version disponible de cette version que vous avez spécifiée, sinon, cela entraînera une erreur.
Thomas Ward