Como usar o yum para obter todos os RPMs necessários para uso offline?

30

Eu tenho um servidor com conectividade de rede, onde posso usar "yum install $ PACKAGE".
Eu quero um comando yum, como yum cache-rpms $PACKAGE $DIRECTORYtal, para que todos os arquivos RPM necessários sejam baixados para $ DIRECTORY, que também terão um arquivo ( Install.sh) informando a ordem na qual esses RPMs serão instalados, em muitos outros servidores sem conectividade à rede.
Install.shpode até ser um script de shell, que tem o mesmo comportamento de yum install $PACKAGE, exceto que ele não usará a rede, mas usará apenas$DIRECTORY .

Possível?

Estou procurando uma solução geral em que yum e RPM estejam disponíveis, mas por especificidade: Ele está em um conjunto de servidores CENTOS 6.7.

Prem
fonte
Posso pensar em algumas soluções - o que funciona melhor para você? (1) A abordagem de pacote único. Isso baixa menos, mas requer mais trabalho manual. Ou ... (2) Toda a abordagem de recompra. Isso baixa muito , mas pode ser feito com mais automação.
Steve Bonds
@SteveBonds, eu gostaria (1) de "pacote único", porque (2) "repositório inteiro" levará tempo para baixar e consumir muito espaço.
Prem
Você já viu Spacewalk?
fpmurphy

Respostas:

40

Aqui está um exemplo específico usando "httpd" como o pacote para baixar e instalar. Este processo foi testado no CentOS6 e CentOS7.

Instale o material necessário e crie um local para colocar os RPMs baixados:

# yum install yum-plugin-downloadonly yum-utils createrepo
# mkdir /var/tmp/httpd
# mkdir /var/tmp/httpd-installroot

Faça o download dos RPMs. Isso usa o truque installroot sugerido aqui para forçar o download completo de todas as dependências, já que nada está instalado nessa raiz vazia. Yum criará alguns metadados, mas vamos jogar tudo fora. Note que para o CentOS7 releaseverseria "7".

# yum install --downloadonly --installroot=/var/tmp/httpd-installroot --releasever=6 --downloaddir=/var/tmp/httpd httpd

Sim, isso foi a versão pequena. Você deveria ter visto o tamanho dos downloads de repositório completo!

Gere os metadados necessários para transformar nossa nova pilha de RPMs em um repositório YUM e limpe as coisas que não precisamos mais:

# createrepo --database /var/tmp/httpd
# rm -rf /var/tmp/httpd-installroot

Configure o diretório de download como um repositório. Observe que para o CentOS7 a gpgkey seria nomeada "7" em vez de "6":

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Para verificar as dependências ausentes:

# repoclosure --repoid=offline-httpd

Eu não descobri por que no CentOS7 isso relata coisas como libssl.so.10(libssl.so.10)(64bit)falta de httpd-toolsquando openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(o provedor dessa biblioteca) está claramente presente no diretório. Ainda assim, se houver algo obviamente ausente, pode ser uma boa chance de voltar e adicioná-lo usando o mesmo yum install --downloadonlymétodo acima.

Quando estiver offline ou depois de copiar o /var/tmp/httpddiretório de repositório para outro servidor, configure o repositório lá:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum --disablerepo=\* --enablerepo=offline-httpd install httpd

Espero que não haja dependências ausentes!

Steve Bonds
fonte
3
Tentei seguir o seu guia para construir a pasta no CentOS 7 e instalá-lo no Red Hat 7, tudo funcionou sem erros
Piyin
1
Embora a compatibilidade entre os dois sistemas operacionais seja boa o suficiente para que coisas assim funcionem, para garantir o suporte ao RedHat, você deve baixar o software RedHat dos servidores da RedHat usando um processo semelhante.
Steve Bonds
1
Sim, você está certo. Mas, neste caso, era um ambiente próximo com regras de rede que não pude alterar. Como alguns dizem: "o cliente tem sempre razão"
Piyin
1
trabalhando muito bem no Centos 7, obrigado!
Carlos Vega
4

Parece que você está perguntando o yumdownloaderque está contido no pacote yum-utils. Já existem algumas perguntas e respostas sobre isso, consulte, por exemplo, Baixar todas as dependências com o yumdownloader, mesmo se já estiver instalado? ou Como encontro URLs de pacote com o Yum?

yumdownloaderfará o download dos pacotes, embora não gere um arquivo, Install.shpois a ordem pode ser determinada pelo próprio yum; portanto, você pode instalar os pacotes na caixa de destino
yum install ./*rpmna pasta com os pacotes baixados (que precisa incluir todas as dependências em comparação com um instalação básica - veja o primeiro link acima sobre repotrack)

doktor5000
fonte
+1, parece o que eu quero! Vou experimentar e atualizar se corresponder ao que eu quero!
Prem
4

Como precisei várias vezes, automatizei a resposta do @Steve Bonds. Apenas certifique-se de definir PKGcomo o pacote a ser instalado nas duas máquinas (Isenção de responsabilidade: para o CentOS 7. No CentOS 6, altere o local --releasevere CentOS-7.

máquina online

PKG=... # NAME OF THE PACKAGE TO INSTALL ON OFFLINE MACHINE
yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG
createrepo --database /tmp/$PKG
rm -rf /tmp/$PKG-installroot
rsync -arv /tmp/$PKG/ [IP of the machine]:/tmp/$PKG

na máquina offline:

PKG=... # NAME OF THE PACKAGE
echo "[offline-$PKG]
name=CentOS-\$releasever - $PKG
baseurl=file:///tmp/$PKG/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" >  /etc/yum.repos.d/offline-$PKG.repo

# install package offline:
yum --disablerepo=\* --enablerepo=offline-$PKG install --nogpgcheck $PKG
shosaco
fonte
1
Você pode querer adicionar -yo último comando para confirmar a instalação dos pacotes quando executados em segundo plano.
ToniTornado 11/02
É ótimo que você tenha passado de uma descrição para um processo automatizado. Bom trabalho!
Steve Bonds