¿Cómo usar yum para obtener todos los RPM requeridos, para uso fuera de línea?

30

Tengo un servidor con conectividad de red, donde puedo usar "yum install $ PACKAGE".
Quiero un comando yum, como yum cache-rpms $PACKAGE $DIRECTORYtal, para que todos los archivos RPM requeridos se descarguen a $ DIRECTORY, que también tendrá un archivo ( Install.sh) que indica el orden en el que instalar estos RPM, en muchos otros servidores sin conectividad de red.
Install.shincluso puede ser un script de shell, que tiene el mismo comportamiento que yum install $PACKAGE, excepto que no usará la red, sino que solo lo hará $DIRECTORY.

¿Posible?

Estoy buscando una solución general donde yum y RPM estén disponibles, pero por especificidad: está en un conjunto de servidores CENTOS 6.7.

Prem
fuente
Puedo pensar en un par de soluciones, ¿cuál funciona mejor para ti? (1) El enfoque de paquete único. Esto descarga menos, pero requiere más trabajo manual. O ... (2) Todo el enfoque de repositorio. Esto descarga mucho , pero se puede hacer con más automatización.
Steve Bonds
@SteveBonds, me gustaría (1) "paquete único", porque (2) "repositorio completo" llevará tiempo para descargar y consumir demasiado espacio.
Prem
¿Has mirado en Spacewalk?
fpmurphy

Respuestas:

40

Aquí hay un ejemplo específico usando "httpd" como paquete para descargar e instalar. Este proceso se probó tanto en CentOS6 como en CentOS7.

Instale las cosas que necesita y haga un lugar para colocar los RPM descargados:

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

Descargue los RPM. Esto utiliza el truco de raíz de instalación sugerido aquí para forzar una descarga completa de todas las dependencias ya que no hay nada instalado en esa raíz vacía. Yum creará algunos metadatos allí, pero los vamos a tirar a la basura. Tenga en cuenta que para CentOS7 releaseversería "7".

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

Sí, esa era la versión pequeña. ¡Deberías haber visto el tamaño de las descargas de repositorio completo!

Genere los metadatos necesarios para convertir nuestra nueva pila de RPM en un repositorio YUM y limpiar lo que ya no necesitamos:

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

Configure el directorio de descarga como un repositorio. Tenga en cuenta que para CentOS7 la gpgkey se llamaría "7" en lugar 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 las dependencias que faltan:

# repoclosure --repoid=offline-httpd

No he descubierto por qué en CentOS7 esto informa cosas como libssl.so.10(libssl.so.10)(64bit)faltar httpd-toolscuando openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(el proveedor de esa biblioteca) está claramente presente en el directorio. Aún así, si ve algo que obviamente falta, esta podría ser una buena oportunidad para volver y agregarlo usando el mismo yum install --downloadonlymétodo anterior.

Cuando esté desconectado o después de copiar el /var/tmp/httpddirectorio del repositorio al otro servidor, configure el repositorio allí:

# 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

¡Ojalá no falten dependencias!

Steve Bonds
fuente
3
Intenté seguir su guía para construir la carpeta en CentOS 7 e instalarla en Red Hat 7, todo funcionó sin errores
Piyin
1
Si bien la compatibilidad entre los dos sistemas operativos es lo suficientemente buena como para que cosas como esas funcionen, para garantizar el soporte de RedHat, debe descargar el software RedHat de los servidores de RedHat utilizando un proceso similar.
Steve Bonds
1
Sí tienes razón. Pero en este caso era un entorno cercano con reglas de red que no podía alterar. Como algunos dicen: "el cliente siempre tiene la razón"
Piyin
1
trabajando muy bien en Centos 7, gracias!
Carlos Vega
4

Parece que está preguntando yumdownloadercuál está contenido en el paquete yum-utils. Ya hay algunas preguntas y respuestas sobre esto, consulte, por ejemplo, ¿ Descargue todas las dependencias con yumdownloader, incluso si ya está instalado? o ¿Cómo encuentro URL de paquetes con Yum?

yumdownloaderdescargará los paquetes, aunque no generará un archivo Install.shya que el orden puede determinarse por yum mismo, por lo que puede instalar los paquetes en el cuadro de destino a través
yum install ./*rpmde la carpeta con sus paquetes descargados (que debe incluir todas las dependencias en comparación con un instalación base: consulte el primer enlace anterior con respecto a repotrack)

doktor5000
fuente
+1, ¡Suena como lo que quiero! ¡Experimentaré y actualizaré si coincide con lo que quiero!
Prem
4

Lo necesitaba varias veces, así que automaticé la respuesta de @Steve Bonds. Solo asegúrese de definirlo PKGcomo el paquete para instalar en ambas máquinas (Descargo de responsabilidad: para CentOS 7. Para CentOS 6, cambie el --releaseveryCentOS-7 punto.

máquina en línea

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

en máquina fuera de línea:

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
fuente
1
Es posible que desee agregar -yal último comando para confirmar la instalación de paquetes cuando se ejecuta en segundo plano.
ToniTornado
Es genial que lo hayas pasado de una descripción a un proceso automatizado. ¡Buen trabajo!
Steve Bonds