Instalação de script de um provedor de pacote virtual no Debian / Ubuntu

3

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
    
por Trevor Robinson 28.06.2011 / 21:24

2 respostas

1

Se você instalar o pacote grep-dctrl, poderá usar o grep-available:

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

Eu não tenho pacotes hadoop disponíveis no meu debian sources.list então eu vou usar mail-transport-agent como um exemplo:

$ 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...]

se você quiser números de versão também:

$ 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
[...]

Observe o modo de parágrafo conveniente e facilmente analisado para cada pacote neste segundo exemplo.

Existem inúmeras outras opções, incluindo a omissão dos nomes dos campos ("Pacote:", "Versão:", etc). Veja a man page ou --help para mais detalhes.

    
por 14.09.2011 / 13:02
0

Seu pacote "mais preferido" é tratado por alternatives . O comando update-alternatives pode fornecer informações sobre os pacotes alternativos e sua prioridade.

update-alternatives --query editor exibirá todas as entradas do editor e sua prioridade, em um formato que pode ser analisado na máquina.

Existe também um utilitário chamado whiff que aceita entrada e retorna a primeira entrada utilizável.

    
por 29.06.2011 / 05:05