Comment utiliser yum pour obtenir tous les RPM requis, pour une utilisation hors ligne?

30

J'ai un serveur avec une connectivité nette, où je peux utiliser "yum install $ PACKAGE".
Je veux une commande yum, yum cache-rpms $PACKAGE $DIRECTORYtelle que tous les fichiers RPM requis seront téléchargés dans $ DIRECTORY, qui aura également un fichier ( Install.sh) indiquant l'ordre dans lequel installer ces RPM, sur de nombreux autres serveurs sans connectivité nette.
Install.shpeut même être un script shell, qui a le même comportement que yum install $PACKAGE, sauf qu'il n'utilisera pas le réseau, mais seulement $DIRECTORY.

Possible?

Je recherche une solution générale où yum et RPM sont disponibles, mais pour la spécificité: c'est sur un ensemble de serveurs CENTOS 6.7.

Prem
la source
Je peux penser à quelques solutions - qui vous convient le mieux? (1) L'approche du paquet unique. Cela télécharge moins, mais nécessite plus de travail manuel. Ou ... (2) Toute l'approche repo. Cela télécharge beaucoup , mais peut être fait avec plus d'automatisation.
Steve Bonds
@SteveBonds, je voudrais (1) "package unique", car (2) "repo entier" prendra du temps pour télécharger et consommer trop d'espace.
Prem
Avez-vous regardé Spacewalk?
fpmurphy

Réponses:

40

Voici un exemple spécifique utilisant "httpd" comme package pour télécharger et installer. Ce processus a été testé sur CentOS6 et CentOS7.

Installez le matériel dont vous avez besoin et faites un endroit pour mettre les RPM téléchargés:

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

Téléchargez les RPM. Cela utilise l' astuce d'installation suggérée ici pour forcer un téléchargement complet de toutes les dépendances car rien n'est installé dans cette racine vide. Yum va créer des métadonnées là-dedans, mais nous allons tout jeter. Notez que pour CentOS7 releaseverserait "7".

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

Oui, c'était la petite version. Vous devriez avoir vu la taille des téléchargements du repo complet!

Générez les métadonnées nécessaires pour transformer notre nouvelle pile de RPM en un repo YUM et nettoyer ce dont nous n'avons plus besoin:

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

Configurez le répertoire de téléchargement en tant que dépôt. Notez que pour CentOS7, le gpgkey serait nommé "7" au lieu 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

Pour vérifier les dépendances manquantes:

# repoclosure --repoid=offline-httpd

Je n'ai pas compris pourquoi sur CentOS7 cela signale des choses comme libssl.so.10(libssl.so.10)(64bit)manquant httpd-toolsquand openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(le fournisseur de cette bibliothèque) est clairement présent dans le répertoire. Pourtant, si vous voyez quelque chose qui manque manifestement, cela pourrait être une bonne occasion de revenir en arrière et de l'ajouter en utilisant la même yum install --downloadonlyméthode ci-dessus.

Lorsque vous êtes hors ligne ou après avoir copié le /var/tmp/httpdrépertoire du référentiel sur l'autre serveur, configurez-y le référentiel:

# 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

Espérons qu'aucune dépendance ne manque!

Steve Bonds
la source
3
J'ai essayé de suivre votre guide pour créer le dossier sur CentOS 7 et l'installer sur Red Hat 7, tout a fonctionné sans erreurs
Piyin
1
Bien que la compatibilité entre les deux systèmes d'exploitation soit suffisamment bonne pour que des choses comme cela fonctionnent, afin d'assurer la prise en charge de RedHat, vous devez télécharger le logiciel RedHat à partir des serveurs de RedHat en utilisant un processus similaire.
Steve Bonds
1
Oui tu as raison. Mais dans ce cas, c'était un environnement proche avec des règles de réseau que je ne pouvais pas modifier. Comme certains le disent: "le client a toujours raison"
Piyin
1
fonctionne très bien dans Centos 7, merci!
Carlos Vega
4

Il semble que vous demandiez yumdownloaderce qui est contenu dans le paquet yum-utils. Il y a déjà quelques questions et réponses à ce sujet, voir par exemple Télécharger toutes les dépendances avec yumdownloader, même si elles sont déjà installées? ou Comment trouver les URL des packages avec Yum?

yumdownloadertéléchargera les packages, bien qu'il ne génère pas de fichier Install.shcar l'ordre peut être déterminé par yum lui-même, vous pouvez donc installer les packages sur la zone cible via
yum install ./*rpmdans le dossier avec vos packages téléchargés (qui doit inclure toutes les dépendances par rapport à un installation de base - voir le premier lien ci-dessus concernant repotrack)

doktor5000
la source
+1, ça ressemble à ce que je veux! Je vais expérimenter et mettre à jour si cela correspond à ce que je veux!
Prem
4

J'en avais besoin plusieurs fois, j'ai donc automatisé la réponse @Steve Bonds. Assurez-vous simplement de définir PKGle package à installer sur les deux machines (Clause de non-responsabilité: pour CentOS 7. Pour CentOS 6, modifiez l' emplacement --releaseveret CentOS-7.

machine en ligne

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

sur la machine hors ligne:

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
la source
1
Vous souhaiterez peut-être ajouter -yà la dernière commande pour confirmer l'installation des packages lorsqu'ils sont exécutés en arrière-plan.
ToniTornado
C'est formidable que vous l'ayez passée d'une description à un processus automatisé. Bon travail!
Steve Bonds