Installation de Yam sur une Redhat Enterprise 4

Yam [1], développé par le prolifique Belge Dag Wieers[2], permet la création d'un repository Yum pour centraliser ses mises à jour de distribution Linux basée sur des RPM (fedora, Redhat Enterprise, etc.). Détaillons ici la mise en oeuvre pour Redhat Enterprise [3].

Notes

[1] Le site de Yam

[2] Le site de Dag Wieers’s

[3] D'après un excellent article de Gary Law en anglais situé ICI

Installation de YAM 0.8.0 sur Red Hat Enterprise Linux 4

Bonjour. Cette page contient des informations et un guide d'installation sur un logiciel en pré release. Comme toute information cette page est sans garantie.

Introduction

Yam est un outil de Dag Wieers’s pour répliquer les mises à jour du Red Hat Network (RHN) vers un serveur local. Si vous utilisez Red Hat Enterprise Linux (RHEL) ou équivalent et que vous avez un grand nombre de machines à mettre à jour, ou si vous voulez mettre à jour un ensemble de machines avec le même niveau de mise à jour, cela va vous intéresser. Yam supporte apt, up2date et yum.

Pourquoi YAM

Pour moi, le problème que Yam permet de résoudre est la mise à jour. Avec Solaris, il est aisé de télécharger le dernier ensemble de correctifs de Sun, l'appliquer aux machines de développement, tester et vérifier que tout va bien, et appliquer aux machines de production en étant sur que vous avez fait tout ce qui est en votre pouvoir pour éviter de le casser.

Red Hat a rendu les choses faciles pour les mises à jour, en utilisant up2date pour garder les logiciels dans un état aussi à jour que possible. Il suffit de lancer:

up2date -u

Quelque temps plus tard, vous avez une machine patchée. MAIS... Identifiez vous sur votre machine de test une semaine plus tard et faites la même chose, et vous aurez probablement à récupérer les mêmes correctifs plus quelque autres. Répétez cette manipulation sur l'environnement de production une semaine plus tard et vous aurez le même résultat avec encore d'autres correctifs. Il n'est pas possible (facilement) de revenir en arrière sur certaines mises à jour, et de garder les mêmes versions sur un environnement de production et de test. En utilisant Yam, il est possible de mettre à jour le serveur de mise à jour, puis la plate-forme de développement, tester, puis mettre à jour l'environnement de production et ainsi de suite.

Il y a d'autres bonnes raisons d'utiliser YAM. Par exemple, cela économise de la bande passante, c'est plus simple à gérer dans le cas de l'utilisation d'un firewall, et peut accélérer la mise à jour d'un grand nombre de machine.

Configurer up2date

La machine que vous prévoyez d'utiliser comme serveur Yam doit être enregistrée dans le Red Hat Network. Up2date doit être fonctionnel. Pour le terter, faites:

up2date --nox -l

Vous devriez obtenir la liste des packages à mettre à jour. Bien qu'il soit possible de faire fonctionner Yam avec d'autres terminaisons, comme le repository gratuit de CentOS, cet article est écrit pour permettre la mise jour d'un RedHat Entreprise Linux sur RHN. L'enregistrement dans le réseau de mise à jour RHN n'est pas gratuit et coûte plusieurs centaines d'euros par serveur et par an. Lors de l'enregistrement de votre système, assurez vous de n'envoyer aucune information à Red Hat (c'est une option lors du lancement d'up2date pour la première fois) car ceci pourra perturber Yam et le RHN. Si vous vous êtes déjà enregistré, vous allez avoir à :

  • Supprimer le fichier /etc/sysconfig/rhn/systemid
  • Supprimer le système du RHN (en utilisant l'interface web du RHN) et réenregistrer le système sans envoyer la liste des packages.

Pour plus d'information sur le fonctionnement de Yam avec le RHN , lisez README.rhn qui est livré avec les sources de Yam.

Configurez votre proxy

Quelques joyeux administrateurs système ont un palanquée de firewall entre leur innocents serveurs et l'internet. C'est l'une des raisons pour lesquelles vous pourriez avoir envie d'utiliser Yam. Toutefois, si votre futur serveur Yam ne peut également 'voir' l'Internet, vous devriez avoir à positionner les variables d'environnement du proxy. En supposant que vous utilisiez bash:

 cd ~
 export PROXY=proxy.example.com
 export PROXYPORT=3128
 export http_proxy=http://${PROXY}:${PROXYPORT}/
 export HTTP_PROXY=$http_proxy
 mkdir -p .subversion
 echo "[global]
 http-proxy-host = ${PROXY}
 http-proxy-port = ${PROXYPORT}" >> .subversion/servers

Egalement, positionnez une variable d'environnement sur le repository de Dag. Il vous faut faire :

 export DAG=http://dag.wieers.com/packages/

Dépendances de Yam

Yam a quelques dépendances qui ne sont pas livrées avec RHEL (ou qui ne sont pas dans l'installation par défaut). Certaines sont optionnelles, mais utiles. Je les ai toutes installées. Pour le faire:

 mkdir yamwork
 cd yamwork
 wget ${DAG}/apt/apt-0.5.15cnc6-4.2.el4.rf.i386.rpm
 rpm -i apt-0.5.15cnc6-4.2.el4.rf.i386.rpm
 wget ${DAG}/yum/yum-2.0.7-2.1.el3.test.noarch.rpm
 rpm -i yum-2.0.7-2.1.el3.test.noarch.rpm
 wget $DAG/createrepo/createrepo-0.4.3-1.2.el4.rf.noarch.rpm
 rpm -i createrepo-0.4.3-1.2.el4.rf.noarch.rpm
 wget $DAG/hardlink++/hardlink++-0.02-2.2.el4.rf.i386.rpm
 rpm -i hardlink++-0.02-2.2.el4.rf.i386.rpm
 up2date -i rpm-build
 up2date -i subversion
 up2date -i httpd

Notez que la version de yum version ci-dessus est en test et peut être considérée comme buggée.

Récupération de Yam

 cd ~/yamwork
 mkdir yam
 svn co http://svn.rpmforge.net/svn/trunk/tools/yam/

Comme Yum, cette version est en test et peut être considérée comme buggée.

Compiler et installer Yam

Vous désirez probablement ne pas être root pour faire ceci. Si vous n'avez pas encore compilé de rpm et paramétré votre fichier .rpmmacros file et créé les répertoires, vous devriez d'abord faire ceci :

 cd ~
 echo %_topdir $(pwd)/redhat > .rpmmacros
 mkdir -p ~/redhat/{SOURCES,BUILD,RPMS,SRPMS,SPECS,tmp}
 cd ~/redhat
 mkdir -p RPMS/i386 RPMS/athlon RPMS/i486 RPMS/i586 RPMS/i686 RPMS/noarch
 cd ~

Dès que votre environnement de compilation est prêt, vous pouvez compiler le rpm:

 cd yamwork
 mv yam yam-0.8.0
 tar cjf ../redhat/SOURCES/yam-0.8.0.tar.bz2 yam-0.8.0
 rpmbuild --define "_tmppath ~/redhat/tmp" -ba yam-0.8.0/yam.spec
 cp ~/redhat/RPMS/noarch/yam-0.8.0-1.noarch.rpm /tmp

Et maintenant, en root, l'installation:

 rpm -i /tmp/yam-0.8.0-1.noarch.rpm 
 service httpd start
 # ignore errors about yam as an unresolvable hostname for now
 service yam start

Notez qu'à ce stade, il n'y a pas de rpm officiel pour la version 0.8.0. Vous devrez donc désinstaller yam si vous voulez l'installer ultérieurement à partir d'un rpm prélevé sur le site de Dag. Cette version, téléchargée avec subversion peut fort bien ne pas être la version finale 0.8.0.

Configurer Yam

Vous trouverez une série de README et d'autres fichiers dans le dossier de yam qui contient des informations sur le package.

Cet exemple prend en charge le paramétrage d'une paire de miroirs pour les versions 3 et 4 sur une souscription au Redhat Network, et suppose que votre machine fonctionne sur RHEL 4. Il y a beaucoup d'autres possibilités, comme la réplication de repository tierces, comme celui de Dag, ou d'autres distributions comme Suse ou Centos.

Votre système doit être enregistré avec le RHN pour que tout ceci fonctionne.

Paramétrez les répertoires ou les repositories seront stockés, et copiez y votre rhn-systemid.

 mkdir -p /var/yam/rhel3es-i386/
 mkdir -p /var/yam/rhel4es-i386/
 cp /etc/sysconfig/rhn/systemid /var/yam/rhel3es-i386/
 cp /etc/sysconfig/rhn/systemid /var/yam/rhel4es-i386/

Copier votre fichier systemid comme dans cet exemple n'est pas impératif, mais cela le sera si vous désirez supporter des paramétrages plus complexes avec des fichiers systemid prélevés d'hôtes différents.

Vous devrez expliquer à Yam ou prendre ses données en configurant le fichier Yam.conf. Ceci ressemble à mon fichier /etc/yam.conf. Il est important que vous chosissiez les version ‘as’, ‘es’ or ‘ws’ correpondantes à vos abonnements RHN, sinon cela ne fonctionnera pas. Changez username:password avec ceux qui vous permettent de vous logger sur le RHN.

 [main]
 srcdir = /var/yam
 wwwdir = /var/www/yam
 arch = i386
 rhnlogin = username:password
 
 [$rhel4es]
 name = Red Hat Enterprise Server $release U1 ($arch)
 release = 4
 rhnrelease = 4ES
 arch = i386
 metadata = apt yum
 iso = RHEL$release-U1-$arch-ES-disc?.iso
 updates = rhn:///rhel-$arch-es-$release
 extras = rhn:///rhel-$arch-es-$release-extras
 #dag = rsync://apt.sw.be/pub/freshrpms/pub/dag/redhat/el$release/en/$arch/RPMS.$repo/
 
 [rhel3es]
 name = Red Hat Enterprise Server $release U6 ($arch)
 release = 3
 rhnrelease = 3ES
 arch = i386
 metadata = apt yum
 iso = RHEL$release-U6-$arch-ES-disc?.iso
 updates = rhn:///rhel-$arch-es-$release
 extras = rhn:///rhel-$arch-es-$release-extras
 #dag = rsync://apt.sw.be/pub/freshrpms/pub/dag/redhat/el$release/en/$arch/RPMS.$repo/

Il est désormais nécessaire d'ajouter quelques permissions, et de relancer Yam pour s'assurez que le fichier lui sont lisibles:

 chmod og= /etc/yam.conf
 chown root.root /etc/yam.conf
 service yam restart

Copiez ensuite toutes vos images ISO à partir des CD d'installation de la RHE (qui sont téléchargeable du RHN) dans /var/yam/iso/

Copier et monter les images ISO

A ce stade, vous pouvez (en option) copier vos images ISO dans le répertoire /var/yam/iso. Elle pourront ensuite être montées en utilisant le système de fichiers ‘loopback’et partagées par Yam. Si vous avez un grand nombre d'ISO, il est possible que vous soyez en manque de périphériques de loopback sur votre système. Dans ce cas, vous devriez voir une erreur comme ceci:

 mount: could not find any free loop device

Pour augmenter le nombre de loopback, essayez:

 rmmod loop
 insmod /lib/modules/`uname -r`/kernel/drivers/block/loop.ko max_loop=32

Premier lancement de Yam

Vérifiez que Yam est content avec votre configuration:

 yam -vv

Si tout est OK, alors lancez le pour demander les mises à jour. Vous devez faire ceci une distribution à la fois, sinon, vous risquez de casser vos identifiants RHN. C'est un problème connu qui sera corrigé lors de la prochaine version de Yam.

 for dist in rhel4es rhel3es
 do
 yam -gv -d $dist
 done

Vous devriez voie un grand nombre de lignes comme celle-ci:

 kdeaddons-3.1.3-1.i386.rpm: ########################## Done.

Dès que les mises à jour sont téléchargée, les mises à jour suivantes pourront être obtenues par:

 for dist in rhel4es rhel3es
 do
 yam -uxv -d $dist
 done