"Mais est référencé par un autre paquet." - Trouver ce paquet

24

Il n'est pas rare qu'un utilisateur d'Ubuntu (ou d'une autre distribution avec la gestion des packages apt) rencontre l'erreur:

user@box ~ $ sudo apt-get install x
[sudo] password for user: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package x is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'x' has no installation candidate

Plusieurs questions ont été posées à ce sujet sur divers sites StackExchange, par exemple openvpn sur AskUbuntu, mais celles-ci concernent généralement la façon d'obtenir le package spécifique malgré l'erreur.

Je n'ai trouvé aucun paquet qui ne soit pas trouvé simplement (mais pas toujours facilement) en déterminant s'il est toujours distribué, et sous quel référentiel le cas échéant, et en veillant à ce que le référentiel se trouve dans apt.sources, ou le pire arrive au pire en téléchargeant un .deb ou source à compiler.

Donc ma question est plus générale, et même si je suppose qu'elle a une réponse assez simple et donc non excitante, je ne peux pas penser comment la trouver par les méthodes conventionnelles des moteurs de recherche, alors je me tourne vers AskUbuntu: y a-t-il une commande ou une option que je peux utiliser pour déterminer quel package / quels packages référencent le package manquant?

Arlo James Barnes
la source

Réponses:

13

Vous pouvez rechercher le package avec apt-cache:

apt-cache search x

Cela affichera tous les packages qui, d'une manière ou d'une autre, font référence à x.

Henrique Ferreira
la source
2
Eh bien, cela semble raisonnable ... sauf que cela ne fonctionne pas pour moi. apt-get install libtinfo6rapports non disponibles mais référencés par un autre package, mais apt-cache search libtinfo6ne produisant aucun résultat. Y a-t-il une autre façon de faire une chose similaire?
Erhannis
@Erhannis Est-ce que «terminfo» apporte quelque chose? Je pense que parfois cette erreur se produit lorsqu'un package est renommé de manière bâclée.
Arlo James Barnes
Je ne suis pas sûr. J'ai mis à niveau vers la prochaine version de Debian, et ce paquet ne donne apparemment plus cette erreur. J'essaierai terminfola prochaine fois que cela se produira, cependant; c'est déjà arrivé et cela se reproduira probablement.
Erhannis
23

Parfois, cela se produit car APT ne sait tout simplement pas de quoi vous parlez, mais cela peut être résolu en exécutant:

sudo apt-get update

Après avoir exécuté cela, généralement l'erreur disparaît car aptet apt-getje sais comment faire ce que je demande maintenant.

Wayne Workman
la source
4
Vous vouliez probablement dire apt-get updatesuivi par apt-get upgrade -ycar -ycontourne la confirmation de l'utilisateur. Cela n'a aucun sens de l'utiliser avec apt-get update. Même ainsi, cela ne répond pas du tout à la question.
4
@CelticWarrior: Je suis d'accord avec cette réponse en principe car la mise à jour des informations du référentiel de packages peut résoudre ce problème si l'on essaie d'installer un package à partir d'un PPA récemment ajouté et que l'on oublie de s'exécuter apt-get update.
David Foerster
7
@ user589808 Je ne pense pas que ce soit un très bon conseil. Une mise à niveau apt-get n'est pas nécessaire, et frapper aveuglément -y à tout peut casser plus de choses qu'il n'en résout. donc wayne était correcte dans sa syntaxe.
fou cool
1
apt-get updateAB répond à la question (le paquet existe dans le repo , mais apt-get installet apt-cachene sais pas.)
dcorking
1
Pour les arrivées ultérieures, les commentaires ci-dessus traitent d'une ancienne version de cette réponse. La réponse actuelle sudo apt-get updateest sans controverse et était la bonne solution pour moi.
Daryn