apt-get download com restrição de versão

17

Eu preciso usar apt-get download para buscar uma versão específica de um arquivo .deb , mas não necessariamente a versão exata. .deb dependencies tem permissão para usar expressões como >=0.3.0 e eu gostaria que apt-get download buscasse a mesma versão que seria baixada usando tal dependência.

Resumindo, o que eu quero trabalhar é isto:

$ apt-get download package='>=0.3.0'

Alguma ideia de como consegui essa funcionalidade?

    
por mikosz 03.04.2013 / 12:33

4 respostas

2

Você pode fazer isso primeiro descobrindo qual versão é a versão mais recente que também é maior ou igual à versão mínima desejada. Em seguida, você faz o download exatamente dessa versão usando apt-get download . Aqui está um script que faz isso (é um pouco feio, mas você tem a idéia):

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 <packagename> <minimum version>"
    exit 1
fi

pkgname="$1"
minversion="$2"

V="0"

for version in 'apt-cache madison $pkgname | awk -F'|' '{print $2}''; do
    echo "Considering $version"
    if dpkg --compare-versions $version ge $minversion; then
        echo "- Version is at least $minversion"
        if dpkg --compare-versions $version gt $V; then
            echo "- This is the newest version so far"
            V=$version
        else
            echo "- We already have a newer version"
        fi
    else
        echo "- This is older than $minversion"
    fi
done

if [ "$V" = "0" ]; then
    echo "There is no version greater than or equal to $minversion"
    exit 1
fi

echo "Selected version: $V"

echo "Downloading"
apt-get download $pkgname=$V
echo "Done"

Você teria que adicionar a verificação de erros caso o pacote não existisse, etc., mas isso contém a solução principal. Além disso, eu assumi aqui que você quer o mais novo pacote disponível que é pelo menos uma certa versão. Se preferir o pacote disponível mais antigo que é pelo menos uma determinada versão, você precisa ajustar o script para interromper a pesquisa quando encontrar algo que seja pelo menos a versão desejada.

    
por 11.11.2013 / 08:45
0

Como você quer exatamente o que o apt-get install lhe daria, pode valer a pena executar apt-get install no 'modo somente para download' usando um diretório de arquivos personalizado:

-d, --download-only
  Download only; package files are only retrieved, not unpacked or installed.
  Configuration Item: APT::Get::Download-Only.

Como alterar o diretório de arquivos? Esta é uma opção de configuração:

FILES
  [...]

  /var/cache/apt/archives/
  Storage area for retrieved package files. Configuration Item: Dir::Cache::Archives.

Esses podem ser alterados temporariamente com o parâmetro --option :

-o, --option
  Set a Configuration Option; This will set an arbitrary configuration option. 
  The syntax is -o Foo::Bar=bar.  -o and --option can be used multiple times 
  to set different options.

Para resumir:

apt-get install -d -o dir::cache::archives="/some/cache/dir" <package>

Este comando baixará (e somente baixará, não instalará) os arquivos .deb relevantes de <package> a /some/cache/dir . O diretório conterá os arquivos .deb para o pacote, suas dependências, um arquivo de bloqueio e o diretório 'parcial' (que deve estar vazio). Filtrar o arquivo .deb exato que você precisa deve ser trivial.

    
por 05.04.2013 / 17:02
0

apt-get download também permite que você defina o release de destino. Não ajudaria?

apt-get download package/testing

Comente a # 1 (não pode usar comentários) - adicionar o parâmetro --print-uris a apt-get install não requer direitos de root (mas você precisa fazer o download em si - melhor com wget -i FILE_LIST).

    
por 22.05.2013 / 22:15
0

Sem SU privs você ainda pode rodar apt-cache e combinar com filtragem para obter essa informação. Use algo como:

No Debian 5:

apt-cache show <pkg> | head | grep -i version 

Em 6 você pode usar:

apt-cache show <pkg> | tail | grep -i version

Apt-cache parece ter mudado o comportamento na ordenação da lista entre 5 e 6, de modo que, no dia 6, o mais novo vem por último.

Uma palavra de cautela é que se você estiver usando esta saída como você diz "para buscar a mesma versão que seria baixada usando tal dependência", a versão do pacote disponível pode mudar se você executar o apt-get atualizar (com su privs, claro), ou se isso foi configurado para ser executado automaticamente e acontece entre quando você reuniu a versão, e quando você executa o script que instala coisas esperando que seja a versão.

    
por 16.07.2013 / 05:59

Tags