Primeiro, qual é a maneira mais simples de obter uma lista de pacotes (reais) que fornecem um pacote virtual específico? 'aptitude show' parece incluí-lo na saída de um pacote virtual, mas 'apt-cache show' não. No entanto, o aptitude nem sempre é instalado, e grep'ing para "Fornecido por:" em um script seria frágil devido à localização.
# 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
Em segundo lugar, existe alguma maneira razoável de classificar os fornecedores de tal forma que eu provavelmente escolheria o mais recente ou o mais "preferido"? No caso 'java-sdk', um script deve obviamente usar 'default-jdk' para começar; no entanto, se alguém não tivesse pensado em criar isso, eu poderia imaginar a classificação por uma combinação de Prioridade, Componente / Seção e Versão. (Obviamente, isso seria útil principalmente para pacotes virtuais que fornecem uma API padrão; escolher automaticamente um provedor para 'leitor de email' seria bobo).
Para ser concreto, estou tentando automatizar a instalação do Cloudera Hadoop usando o Chef. 'hadoop' é um pacote virtual, onde o pacote real correspondente é atualmente '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
Quando há mais de um provedor (por exemplo, hadoop-0.22), basicamente, desejo escolher automaticamente a versão mais recente se 'hadoop-X.YY' estiver presente. (Ou melhor ainda, obtenha a versão de cada um de algum modo, em vez de tentar analisar os nomes.) Eu sei que poderia conseguir isso com alguns scripts, mas não me surpreenderia se uma maneira mais elegante já existisse.
Atualização : 'apt-cache showpkg' inclui "Reverse Provides", que parece incluir informações completas sobre a versão. Isso ajuda, mas alguma ideia de como obter apenas esta seção?
# 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