Gestion des packages avec YUM sans connexion Internet et avec le dvd Redhat

Mise à jour le 19/08/2010

Pour ceux qui ne connaissent pas YUM, ce dernier est un utilitaire bien pratique dans les distributions Linux utilisant les packages RPM, tel que RedHat ou CentOS.

YUM permet en effet de faire la gestion des packages sur ces types de distributions, en gérant les dépendances entre les packages, c’est-à-dire que si vous voulez installer par exemple PHP sur votre serveur Linux RedHat, il suffit de faire « yum install php » et hop, tous les packages nécessaires à PHP vont être installés (entre autres le serveur Apache HTTP :-)).

Mais pour cela, YUM a besoin d’une connexion à Internet pour 1/ localiser le package désiré, 2/ télécharger son entête pour voir ses dépendances, 3/ télécharger les entêtes de ses dépendances et générer également les dépendances de ses dépendances, 4/ puis quand il n’y a plus de dépendances à gérer, procéder au téléchargement et à l’installation.

Le problème est que parfois, la connexion à Internet n’est pas disponible pour faire des installations ou des mises à jour sur des serveurs dans des salles blanches sécurisées. Pas de problème, YUM avec un peu de configuration sait aussi travailler en « local », à partir du média d’origine ou d’une version de mise à jour.

Donc, pour pouvoir faire des installations ou des mises à jour depuis le DVD (ou les Cdroms) de Redhat, il faut bien entendu le media, ou mieux l’image ISO du media.

Ici c’est l’image ISO de la Redhat Linux Entreprise (RHEL) version 5.5 pour processeurs Intel avec les extensions 64 bits : rhel-5.5-server-x86_64-dvd.iso

Comme pré-requis, j’ai déposé l’image ISO dans le répertoire /root/dvd_redhat/

Etape 1 : Montage de l’image ISO sur le système de fichiers afin de récupérer les packages RPM qui serviront à l’installation ou à la mise à jour.

mkdir -p /root/dvd_redhat/disk/
mount -o loop /root/dvd_redhat/rhel-5.5-server-x86_64-dvd.iso /root/dvd_redhat/disk/

La commande « mount -o loop » qui commence à être de plus en plus connue, permet « d’ouvrir » une image ISO, et de la monter sur l’arborescence de fichiers. Ici, dans le répertoire /root/dvd_redhat/disk/

Etape 2 : Récupération des packages RPM dans un nouveau répertoire.

L’image ISO montée étant en mode lecture seule, il faut copier les fichiers RPM vers un répertoire en lecture/écriture (pour faire l’étape 4).

mkdir /root/dvd_redhat/RPM
cd /root/dvd_redhat/disk/Server/
cp *.rpm /root/dvd_redhat/RPM/

Etape 3 : Installation de l’utilitaire createrepo

On profite d’être dans le répertoire qui contient tous les packages RPM, pour installer manuellement l’utilitaire createrepo, ce dernier permettant de faire l’étape suivante.

rpm -i createrepo-0.4.11-3.el5.noarch.rpm

dans le cas d’une installation RedHat vide (sans aucun paquetage coché lors de l’installation), prendre cette ligne de commande :

rpm -i createrepo-0.4.11-3.el5.noarch.rpm libxml2-python-2.6.26-2.1.2.8.i386.rpm rpm-python-4.4.2.3-18.el5.i386.rpm
yum-metadata-parser-1.1.2-3.el5.i386.rpm yum-3.2.22-26.el5.noarch.rpm python-elementtree-1.2.6-5.i386.rpm
python-iniparse-0.2.3-4.el5.noarch.rpm python-sqlite-1.1.7-1.2.1.i386.rpm
python-urlgrabber-3.1.0-5.el5.noarch.rpm m2crypto-0.16-6.el5.6.i386.rpm

Etape 4 : Création du nouveau référentiel (repository) de fichier

On se place sur le nouveau répertoire contenant les RPM copiés de l’image ISO, et on va créer un nouveau référentiel (index) des fichiers RPM avec la commande createrepo.

cd /root/dvd_redhat/RPM/
createrepo ./

La commande createrepo prend comme argument le répertoire courant, ici /root/dvd_redhat/RPM/ .

Elle va créer un ensemble de fichiers dans un sous-repertoire ./repodata/

Tiens, on a plus besoin du montage de l’image ISO, on en profite pour démonter…

umount /root/dvd_redhat/disk/

Etape 5 : Création du fichier de référence du nouveau référentiel

Pour que YUM puisse utiliser notre nouveau référentiel, il faut lui ajouter sa référence dans sa configuration. Sous RHEL, il faut simplement créer le fichier suivant :

vi /etc/yum.repos.d/RedHat-Media.repo
======================CONTENU=====================================
[redhat-media]
name=RedHat-$releasever - Media
baseurl=file:///root/dvd_redhat/RPM/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
==================================================================

Etape 6 : utilisation de YUM

On va commencer par faire un nettoyage de YUM avec le commande suivante :

yum --disablerepo=\* --enablerepo=redhat-media --noplugins clean all

On notera le « –disablerepo=\* » qui permet de désactiver toutes les références vers d’autres référentiels, le « –enablerepo=redhat-media » qui indique que l’on souhaite travaillait avec notre nouveau référentiel, et pour finir l’option « –noplugins » qui va désactiver tous les plugins, notamment celui du RHN qui nécessite une connexion Internet que nous n’avons pas.

Le « clean all » commandant le nettoyage du cache de YUM.

Voilà.

Ensuite, on peut utiliser YUM pour gérer les installations, les désinstallations, les mises à jour de ses packages en gérant les dépendances.

Pour une installation :

yum --disablerepo=\* --enablerepo=redhat-media --noplugins install <nom_package(s)>

Pour une suppression :

yum --disablerepo=\* --enablerepo=redhat-media --noplugins remove <nom_package(s)>

Pour une mise à jour de version sur l’ensemble des packages (par exemple un passage de RHEL 5.1 à RHEL 5.2)

yum --disablerepo=\* --enablerepo=redhat-media --noplugins update

Bon courage.

./

rpm -i createrepo-0.4.11-3.el5.noarch.rpm libxml2-python-2.6.26-2.1.2.8.i386.rpm rpm-python-4.4.2.3-18.el5.i386.rpm yum-metadata-parser-1.1.2-3.el5.i386.rpm yum-3.2.22-26.el5.noarch.rpm python-elementtree-1.2.6-5.i386.rpm python-iniparse-0.2.3-4.el5.noarch.rpm python-iniparse-0.2.3-4.el5.noarch.rpm python-sqlite-1.1.7-1.2.1.i386.rpm python-urlgrabber-3.1.0-5.el5.noarch.rpm m2crypto-0.16-6.el5.6.i386.rpm