Installation de scripts d'un fournisseur de packages virtuel sur Debian / Ubuntu

Tout d'abord, quel est le moyen le plus simple d'get une list de packages (réels) qui fournissent un package virtuel particulier? 'aptitude show' semble l'inclure dans la sortie d'un package virtuel, mais 'apt-cache show' ne le fait pas. Cependant, l'aptitude n'est pas toujours installée, et grep'ing for "Provided by:" dans un script serait fragile en raison de la localization.

# aptitude show java-sdk No current or candidate version found for java-sdk Package: java-sdk State: not a real package Provided by: default-jdk, gcj-4.4-jdk, gcj-4.5-jdk, gcj-jdk, openjdk-6-jdk, sun-java6-jdk # apt-cache show java-sdk N: Can't select versions from package 'java-sdk' as it is purely virtual N: No packages found 

Deuxièmement, existe-t-il un moyen raisonnable de classr les fournisseurs de sorte que je suis susceptible de choisir le dernier ou le «plus préféré»? Dans le cas «java-sdk», un script devrait évidemment utiliser «default-jdk» pour commencer; Cependant, si quelqu'un n'avait pas pensé à le créer, je pourrais imaginer le sorting par une combinaison de Priorité, Composante / Section et Version. (De toute évidence, cela serait principalement utile pour les packages virtuels fournissant une API standard; choisir automatiquement un fournisseur pour «lecteur de courrier» serait bête.)

Pour être concret, j'essaie d'automatiser l'installation de Cloudera Hadoop à l'aide de Chef. 'hadoop' est un package virtuel, où le package réel correspondant est actuellement 'hadoop-0.20':

 # aptitude show hadoop No current or candidate version found for hadoop Package: hadoop State: not a real package Provided by: hadoop-0.20 

Lorsqu'il y a plus d'un fournisseur (p. Ex. Hadoop-0.22), je souhaite automatiquement choisir la dernière version si 'hadoop-X.YY' est présent. (Ou mieux encore, obtenez la version pour chacune d'une certaine manière, plutôt que d'essayer d'parsingr les noms.) Je sais que je pourrais le faire avec des scripts, mais cela ne me surprendrait pas si un mode plus élégant existait déjà.

Mise à jour : 'apt-cache showpkg' comprend "Reverse Provides", qui semble encore inclure des informations de version complète. Cela aide, mais une idée de comment get cette section?

 # apt-cache showpkg hadoop Package: hadoop Versions: Reverse Depends: sqoop,hadoop hadoop-pig,hadoop hadoop-hive,hadoop Dependencies: Provides: Reverse Provides: hadoop-0.20 0.20.2+923.21-1~maverick-cdh3 

Si vous installez le package grep-dctrl, vous pouvez utiliser grep-disponible:

 grep-available -F Provides -s Package <virtual-package-name> 

Je n'ai pas de packageages hadoop disponibles dans mon debian sources.list, donc j'utiliserai mail-transport-agent comme exemple:

 $ grep-available -F Provides -s Package mail-transport-agent Package: xmail Package: exim4-daemon-light Package: exim4-daemon-heavy Package: esmtp-run Package: postfix [...most deleted...] 

si vous voulez des numéros de version aussi:

 $ grep-available -F Provides -s Package,Version mail-transport-agent Package: xmail Version: 1.27-1.1+b1 Package: exim4-daemon-light Version: 4.76-2 Package: exim4-daemon-heavy Version: 4.76-2 Package: esmtp-run Version: 1.2-6 [...] 

Notez le mode de paragraphe pratique et facilement analysé pour chaque package dans ce deuxième exemple.

Il existe de nombreuses autres options, y compris l'omission des noms de champs ("Package:", "Version:", etc.). Consultez la page man ou – aidez-moi pour plus de détails.

Votre forfait «le plus préféré» est géré par des alternatives de alternatives . La command update-alternatives peut vous donner des informations sur les packages alternatifs et leur priorité.

update-alternatives --query editor affichera toutes les inputs de l'éditeur et leur priorité, dans un format à parsing automatique de la machine.

Il existe également un utilitaire appelé whiff qui accepte les inputs et renvoie la première input utilisable.