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

21

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

Possível?

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

    
por Prem 03.02.2016 / 18:12

2 respostas

29

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

Instale o material que você precisa 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 um download completo de todas as dependências, já que nada está instalado nessa raiz vazia. O Yum irá criar alguns metadados lá, mas vamos jogar tudo fora. Note que para o CentOS7 releasever seria "7".

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

Sim, essa foi a versão pequena. Você deveria ter visto o tamanho dos downloads full-repo!

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

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

Configure o diretório de download como um repositório. Note que para o CentOS7 o gpgkey seria nomeado "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 entendi porque no CentOS7 isso relata coisas como libssl.so.10(libssl.so.10)(64bit) ausente de httpd-tools quando 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 você ver algo obviamente ausente, essa pode ser uma boa chance de voltar e adicioná-lo usando o mesmo método yum install --downloadonly acima.

Quando estiver off-line ou depois de copiar o diretório /var/tmp/httpd repo para o outro servidor, configure o repo 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!

    
por 06.02.2016 / 01:46
4

Parece que você está pedindo yumdownloader , que está contido no pacote yum-utils . Já existem algumas perguntas e respostas sobre isso, veja por exemplo Faça o download de todas as dependências com o yumdownloader, mesmo que já esteja instalado? ou Como faço para encontrar URLs de pacotes com o Yum?

yumdownloader fará o download dos pacotes, embora não gere um arquivo Install.sh , pois o pedido pode ser determinado pelo próprio yum, para que você possa instalar os pacotes na caixa de destino por meio de yum install ./*rpm no pasta com seus pacotes baixados (que precisa incluir todas as dependências em comparação com uma instalação base - veja o primeiro link acima referente a repotrack )

    
por 04.02.2016 / 09:00

Tags