Como obtenho o nome e a versão do pacote real para um pacote pseudo?

4

Como faço para obter o verdadeiro nome completo do pacote (incluindo a versão) que seria instalado se eu executasse apt-get install pseudo-package-name ?

Isto está relacionado a esta pergunta anterior: Pegue a versão do kernel do pacote lts

Exemplo:

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

seria instalado (a partir de agora no meu servidor Trusty de 32 bits):

linux-image-3.13.0-35-generic

Eu tentei o seguinte, mas nenhum me deu a resposta. Estou tentando fazer o script para que eu possa pegar os cabeçalhos do 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

Após alguma exploração de / var / lib / {apt, dpkg}, eu realcei que não há uma resposta genérica e programável para este problema. Então, parecido com as respostas abaixo de @mchid e @muru, eu fiz assim:

#!/bin/bash

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

apt-get download linux-headers-${linux_package_version}-generic linux-headers-${linux_package_version})
    
por Harvey 17.09.2014 / 17:22

3 respostas

4

Primeiro, você deve mostrar exatamente qual pacote o metapacote fornece:

exemplo:

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

saída:

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

Agora, se você digitar o pacote específico do metapacote, você obterá o resultado exato:

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

saída:

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

A versão mais recente é sempre instalada, a menos que especificado de outra forma, como no exemplo a seguir:

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

Como alternativa, se você quiser apenas a versão, digite o seguinte comando ou uma variação dele:

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

saída:

Version: 3.13.0.35.42
Version: 3.13.0.24.28
    
por mchid 17.09.2014 / 18:56
3

O problema é a dependência:

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

Por causa disso, você não pode obter informações diretamente sobre qual pacote será instalado. Você precisará usar algo como apt-rdepends .

    
por muru 17.09.2014 / 18:46
1

Em geral, você não pode. Existem pacotes como "email-client" que não fornecem uma cadeia de dependência que pode ser seguida e resolvida.

    
por Joshua 17.09.2014 / 20:47