web-dev-qa-db-fra.com

Comment puis-je obtenir le nom et la version du package réel pour un pseudo-package?

Comment puis-je obtenir le nom complet du package complet (y compris la version) qui serait installé si je exécutais apt-get install pseudo-package-name?

Ceci est lié à la question précédente: Obtenir la version du noyau depuis le paquetage lts?

Exemple:

apt-get install linux-image-generic-lts-trusty

installerais (à partir de maintenant sur mon serveur Trusty 32 bits):

linux-image-3.13.0-35-generic

J'ai essayé ce qui suit, mais aucun ne m'a donné la réponse. J'essaie de faire un script pour pouvoir récupérer les en-têtes linux.

$ Sudo apt-get install -qqs linux-image-generic-lts-trusty
Inst linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
Conf linux-image-generic-lts-trusty (3.13.0.35.42 Ubuntu:14.04/trusty-updates [i386])
$ apt-cache depends linux-image-generic-lts-trusty
linux-image-generic-lts-trusty
  Depends: linux-image-generic
$ apt-cache depends linux-image-generic
linux-image-generic
  Depends: linux-image-3.13.0-35-generic
  Depends: linux-image-extra-3.13.0-35-generic
  Depends: linux-firmware
$ apt-cache policy linux-image-generic-lts-trusty
linux-image-generic-lts-trusty:
  Installed: (none)
  Candidate: 3.13.0.35.42
  Version table:
     3.13.0.35.42 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main i386 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages
     3.13.0.24.28 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages

Après une exploration de/var/lib/{apt, dpkg}, je me suis aperçu qu'il n'y avait pas de réponse scriptable générique à ce problème. Donc, semblable aux réponses ci-dessous de @mchid et @muru, je l'ai fait comme suit:

#!/bin/bash

metapackage=linux-image-generic-lts-trusty
linux_package_version=$(apt-cache policy $metapackage |\
    sed -nE '/Candidate:/ s,[^[:digit:]]*([[:digit:]\.]+)\.([[:digit:]]+)\.[[:digit:]]+,\1-\2,p')

apt-get download linux-headers-${linux_package_version}-generic linux-headers-${linux_package_version})
4
Harvey

Tout d’abord, vous devez montrer exactement quel paquet le métapaquet fournit:

exemple:

apt-cache show linux-image-generic-lts-trusty | grep Depends:

sortie:

Depends: linux-image-generic
Depends: linux-image-generic

Maintenant, si vous tapez le package spécifique du métapaquet, vous obtiendrez votre résultat exact:

apt-cache show linux-image-generic | grep Depends:

sortie:

Depends: linux-image-3.13.0-35-generic, linux-image-extra-3.13.0-35-generic, linux-firmware
Depends: linux-image-3.13.0-24-generic, linux-image-extra-3.13.0-24-generic, linux-firmware

La version la plus récente est toujours installée, sauf indication contraire, comme dans l'exemple suivant:

Sudo apt-get install linux-image-3.13.0-24-generic

Alternativement, si vous voulez seulement la version, vous pouvez taper la commande suivante ou une variante:

apt-cache show linux-image-generic-lts-trusty | grep Version:

sortie:

Version: 3.13.0.35.42
Version: 3.13.0.24.28
4
mchid

Le problème est la dépendance:

_linux-image-generic-lts-trusty
└── linux-image-generic
    └── linux-image-3.13.0-35-generic
_

Pour cette raison, vous ne pouvez pas obtenir directement des informations sur le paquet qui sera installé. Vous devrez utiliser quelque chose comme apt-rdepends .

3
muru

En général, vous ne pouvez pas. Il existe des packages tels que "email-client" qui ne fournissent pas de chaîne de dépendance pouvant être suivie et résolue.

1
Joshua