repostry de rpm local, que contém todos os pacotes instalados no sistema

3

O que estou tentando fazer é criar um disco USB com repositório / diretório local para instalação offline (ou atualização) de servidores Linux. Por quê !? Simples, estou trabalhando na manutenção de um enorme cluster de PBX-es asterisco IP, asterisco (e dahdi, e ...) é construído contra fontes do kernel, e se a versão do kernel é alterada (diferente de um que eu estou acostumado construir), então é um desastre esperando para acontecer. Agora, minha idéia é colocar todos os rpm's / srpm que estão instalados em um servidor (desenvolvimento) e instalar / atualizar todos os outros servidores para a mesma versão do rpm. Uma maneira fácil de fazer isso é forçar o YUM a baixar todos os rpm instalados em algum diretório, depois copiá-los para usb-flash_disk e fazer em todos os outros servidores "yum install ./*.rpm" !? Então, estou tendo todos os sistemas na mesma revisão!

A pergunta é: como dizer ao YUM para (somente) baixar todos os rpm que estão instalados ???

    
por VuLe 21.11.2012 / 13:17

3 respostas

4

Existem 2 opções

Use o rpm (Gerenciador de Pacotes do Red Hat) ou o yum (Atualizador / Modificador do Yellowdog)

1) RPM

rpm -qa > to_be_installed; while read -r package; do yum -y install "$package"; done < to_be_installed

2) YUM

yum list installed | awk 'NR>1{print $1}' > to_be_installed; while read -r line; do yum -y install "$line"; done < to_be_installed

Espero que isso lhe dê algumas ideias sobre como fazê-lo.

    
por 21.11.2012 / 13:33
2

Você pode obter uma lista de pacotes instalados com yum list installed , você pode querer limpá-lo um pouco com

yum list installed | awk 'NR >2 {print $1}' >installed.pkg

Depois de ter a lista, você pode usar o utilitário yumdownloader para baixar os pacotes

for file in $(cat installed.pkg)
do
    yumdownloader "$file"
done

isto fará o download de todos os rpms para o diretório atual.

    
por 21.11.2012 / 13:36
0

Acredito que as duas respostas acima produzirão resultados diferentes:

Caso A) [como mostrado acima]

rpm -qa > to_be_installed; while read -r package; do yum -y install "$package"; done < to_be_installed

Caso B) [como mostrado acima]

yum list installed | awk '{print $1}' > to_be_installed; while read -r line; do yum -y install "$line"; done < to_be_installed

No caso A) rpm -qa retornará o nome "completo" do rpm, incluindo as informações da versão.
No caso B) o nome do pacote (com o sufixo da arquitetura) está na primeira coluna, versão na segunda coluna.

Assim, no caso A, você obtém todos os rpms atualmente instalados baixados.
No caso B, você obterá todas as versões MAIS RECENTES dos pacotes (para o seu lançamento) baixadas.

O outro grande problema para tentar obter atualizações offline é que o switch --resolve no yumdownloader não funciona corretamente (não resolve todas as dependências).

O procedimento que estou usando é:

  1. obtenha a máquina com meus pacotes instalados reais conectados ao internet
  2. se eu pretendo atualizar, então eu atualizo esta máquina da internet
  3. o ato de realmente atualizar usando o yum faz duas coisas

    i) obtém todas as versões do meu rpms atualizadas AND

    ii) resolve todas as dependências de pacotes

  4. Então

    yumdownloader rpm -qa --destdir = / caminho / rpm_updates

Não consigo criar um repositório baseado em arquivo local fora do diretório /path/rpm_updates , colocar isso em um USB e atualizar uma máquina (offline) dessa lista de rpms.

    
por 11.12.2016 / 00:08