Baixe todas as dependências com o yumdownloader, mesmo que já esteja instalado?

32

Existe uma maneira de baixar todas as dependências com o yumdownloader, mesmo que elas já estejam instaladas?

Estou tentando criar um repositório local e só quero incluir os pacotes que precisamos.

    
por Luke 12.10.2012 / 00:35

6 respostas

26

Você pode usar repotrack da seguinte forma:

repotrack -a x86_64 -p /repos/Packages [packages]

Infelizmente, há um erro com o -a flag (arco). Ele fará o download de i686 e x86_64.

Veja como corrigi-lo:

if opts.arch:
    #archlist = []
    #archlist.extend(rpmUtils.arch.getArchList(opts.arch))
    archlist = opts.arch.split(',') # Change to this
else:
    archlist = rpmUtils.arch.getArchList()

Você pode usar repoquery para obter uma lista de pacotes de grupos:

repoquery --qf=%{name} -g --list --grouppkgs=all [groups]

Que você pode alimentar no repotrack:

repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
    
por 12.10.2012 / 10:13
16

Para informações de todos, yumdownloader não faz o trabalho. Para qualquer pessoa com alguma experiência em gerenciamento de pacotes com 'yum, é natural esperar que a seguinte linha de comando faça o download recursivo de um pacote RPM e todas as suas dependências:

yumdownloader --resolve <package>

Mas isso não acontece. Pode ser que imprima dependências de primeiro nível ou aquelas que ainda não estão instaladas. Não tenho certeza.

Aqui está um método que funciona no CentOS 6.5. Siga as etapas para instalar o plug-in downloadonly para yum , conforme Red Hat . Basicamente, no CentOS 6.x, faça:

$ sudo yum install yum-plugin-downloadonly.noarch

Em seguida, use o plug-in em combinação com a opção --installroot de yum . Isso impede que yum resolva e, em seguida, ignore as dependências que já estão instaladas no sistema.

sudo yum install \
  --installroot=</path/to/tmp_dir> \
  --downloadonly --downloaddir <rpm_dir> <package>

Você fez o download dos RPMs do pacote, <package> e todas as suas dependências no diretório <rpm_dir> . Exemplo, com o Git:

$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
  --downloadonly --downloaddir rpms/ git
    
por 16.12.2014 / 11:59
2

Se você é do futuro (Fedora 23+), onde o yum está sendo substituído pelo dnf, você pode encontrar este script bash útil.

    
por 24.06.2016 / 23:41
2

Eu percebo que o segmento é antigo, mas no caso de alguém se deparar com isso, você pode usar o yum para realizar o comportamento desejado.

Primeiro instale o plugin do downloadonly (instruções para o RHEL): (RHEL5)

$ yum install yum-downloadonly

(RHEL6)

$ yum install yum-plugin-downloadonly

Em seguida, execute o comando da seguinte forma:

$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]

Se você ignorar, o --downloaddir yum fará download automaticamente para /var/cache/yum

Então, a menos que você precise usar o yumdownloader especificamente, acho que essa seria a maneira mais simples de atingir a meta.

    
por 17.05.2017 / 17:13
1

Eu descobri que, na prática, a criação de um repositório como esse é difícil de manter. Nós construímos este repo porque:

  • Queríamos extrair pacotes de uma fonte local para vários servidores.
  • Apenas permite que pacotes confiáveis sejam instalados.

Os problemas que podemos atravessar foram:

  • Mantendo os pacotes atualizados. Dependências mudam. Alguns são adicionados, outros são removidos.
  • Adicionando novos pacotes que queríamos instalar.
  • Os desafios acima aumentaram o processo de envio de atualizações críticas.

No final, a melhor solução para o nosso problema era fazer proxy dos repositórios oficiais e armazenar em cache os pacotes que usamos. Isso funciona bem porque:

  • Apenas os pacotes que realmente usamos são armazenados localmente.
  • Os pacotes antigos expiram automaticamente.
  • Quando um pacote é usado pela primeira vez, ele é retirado do repositório oficial, mas as solicitações subsequentes vêm do cache.
  • Confiar no (s) repo (s) oficial (ais) foi suficiente para confiança. Nosso espelho de proxy apenas extrai pacotes de fontes confiáveis.

Usamos o Nginx e o suporte a proxy integrado.

    
por 13.09.2016 / 20:19
0

Aproveitando a resposta de Lucas e os comentários ...

A partir desta publicação, repotrack corresponderá a todas as arquiteturas a seguir quando x86_64 for especificado: x86_64 , athlon , i686 , i586 , i486 , i386 e noarch .

Para os meus propósitos, estou interessado apenas em x86_64 e noarch packages e sei que minha distribuição não tem nenhum athlon packages.

O comando a seguir obtém uma lista de URLs de pacotes, filtra i?86 architectures e imprime os nomes dos pacotes à medida que são baixados:

repotrack --arch=x86_64 --urls gs1000-server \
    | sed '/\.i[3-6]86\.rpm$/d' \
    | xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'

Observe que repotrack não avisa se não conseguir encontrar um pacote que satisfaça uma dependência em seus repositórios ativados. Silencia silenciosamente.

    
por 20.03.2018 / 15:26