web-dev-qa-db-fra.com

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

J'ai un serveur avec une connectivité nette, où je peux utiliser "yum install $ PACKAGE".
Je veux une commande yum, comme yum cache-rpms $PACKAGE $DIRECTORY de sorte 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é réseau.
Install.sh peut 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 n'utilisera que $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.

32
Prem

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 le 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 créera des métadonnées là-dedans, mais nous allons tout jeter. Notez que pour CentOS7 releasever serait "7".

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

Oui, é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 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) manquantes dans httpd-tools Lorsque 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. Néanmoins, 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 méthode yum install --downloadonly Ci-dessus.

Lorsque vous êtes hors ligne ou après avoir copié le répertoire de dépôt /var/tmp/httpd Sur l'autre serveur, installez-le:

# 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!

41
Steve Bonds

J'en avais besoin plusieurs fois, j'ai donc automatisé la réponse @Steve Bonds. Assurez-vous simplement de définir PKG comme package à installer sur les deux machines (Avertissement: pour CentOS 7. Pour CentOS 6, modifiez le --releasever et CentOS-7 place.

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 une 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
5
shosaco

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

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

4
doktor5000