Installation de mrepo sur CentOS 5.5
Introduction
mrepo est un programme écrit en python par Dag Wieers qui permet de créer un serveur de dépôts de paquets (testé et validé pour les RPMs).
La description complète ainsi que le site officiel de ce serveur est disponible a l’adresse suivante: http://dag.wieers.com/home-made/mrepo
Préparation
Pour bien débuter l’installation il faut récupérer les RPMs suivants. Ils sont disponible sur les site de Dag Wieers à l’adresse suivante http://dag.wieers.com/rpm/packages/, ou pour rhnlib, rechercher dans le support de la distribution.
- fuseiso0.0.200707081.el5.rf.i386.rpm
- fuseunionfs0.171.el5.rf.i386.rpm
- hardlink++0.023.el5.rf.i386.rpm
- rhnlib2.2.72.el5.noarch.rpm
Dans notre cas, les sources sont installées dans le répertoire /usr/local/src
# cd /usr/local/srcTéléchargement des RPMs nécessaires (pour une plateforme i386):
# wget wget http://dag.wieers.com/rpm/packages/fuse-iso/fuse-iso-0.0.20070708-1.el5.rf.i386.rpm # wget http://dag.wieers.com/rpm/packages/fuse-unionfs/fuse-unionfs-0.18-1.el5.rf.i386.rpm # wget http://dag.wieers.com/rpm/packages/hardlink++/hardlink++-0.02-3.el5.rf.i386.rpm
D’autre part, il faut récupérer les sources depuis subversion (il faut bien évidemment installer le client subversion svn):
# svn co http://svn.rpmforge.net/svn/trunk/tools/mrepo/Finalement, il faut installer si ça n’est pas déjà le cas python et apache.
# yum install python # yum install httpd
Installation des RPMs
Installation depuis les dépôts CentOS de createrepo et fuse:
# yum install createrepo fuse fuse-devel Installation des RPMs en dépendances: # rpm -i hardlink++0.023.el5.rf.i386.rpm # rpm -i fuseiso0.0.200707081.el5.rf.i386.rpm # rpm -i fuseunionfs0.171.el5.rf.i386.rpm
Le serveur est maintenant prêt à installer mrepo.
Installation de mrepo
L’installation de mrepo, pour des raisons de norme, sera faite dans le répertoire /opt/mrepo. Pour ce faire, il faut ajouter une variable DESTDIR (voir Makefile).
Ce placer dans le répertoire des sources de mrepo téléchargé depuis subversion.
# cd /usr/local/src/mrepo # export DESTDIR=/opt/mrepo # make install install -Dp -m0755 gensystemid /opt/mrepo/usr/bin/gensystemid install -Dp -m0755 mrepo /opt/mrepo/usr/bin/mrepo install -Dp -m0755 rhnget /opt/mrepo/usr/bin/rhnget install -Dp -m0755 youget /opt/mrepo/usr/bin/youget [ ! -f /opt/mrepo/etc/mrepo.conf ] && install -D -m0600 config/mrepo.conf /opt/mrepo/etc/mrepo.conf || : install -d -m0755 /opt/mrepo/etc/mrepo.conf.d/ install -Dp -m0644 config/httpd/mrepo.conf /opt/mrepo/etc/httpd/conf.d/mrepo.conf install -Dp -m0755 config/mrepo /opt/mrepo/etc/rc.d/init.d/mrepo install -d -m0755 /opt/mrepo/usr/share/mrepo/html install -p -m0644 html/* /opt/mrepo/usr/share/mrepo/html install -d -m0755 /opt/mrepo/var/mrepo/all/ install -d -m0755 /opt/mrepo/var/www/mrepo install -d -m0755 /opt/mrepo/var/cache/mrepo install -d -m0755 /opt/mrepo/usr/share/mrepo/rhn/ install -d -m0755 /opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/ cp -av rhn/README rhn/*.py /opt/mrepo/usr/share/mrepo/rhn/ `rhn/README' -> `/opt/mrepo/usr/share/mrepo/rhn/README' `rhn/connections.py' -> `/opt/mrepo/usr/share/mrepo/rhn/connections.py' `rhn/_httplib.py' -> `/opt/mrepo/usr/share/mrepo/rhn/_httplib.py' `rhn/__init__.py' -> `/opt/mrepo/usr/share/mrepo/rhn/__init__.py' `rhn/_internal_xmlrpclib.py' -> `/opt/mrepo/usr/share/mrepo/rhn/_internal_xmlrpclib.py' `rhn/nonblocking.py' -> `/opt/mrepo/usr/share/mrepo/rhn/nonblocking.py' `rhn/rpclib.py' -> `/opt/mrepo/usr/share/mrepo/rhn/rpclib.py' `rhn/SmartIO.py' -> `/opt/mrepo/usr/share/mrepo/rhn/SmartIO.py' `rhn/SSL.py' -> `/opt/mrepo/usr/share/mrepo/rhn/SSL.py' `rhn/transports.py' -> `/opt/mrepo/usr/share/mrepo/rhn/transports.py' `rhn/UserDictCase.py' -> `/opt/mrepo/usr/share/mrepo/rhn/UserDictCase.py' cp -av up2date_client/README up2date_client/*.py /opt/mrepo/usr/share/mrepo/up2date_client/ `up2date_client/README' -> `/opt/mrepo/usr/share/mrepo/up2date_client/README' `up2date_client/capabilities.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/capabilities.py' `up2date_client/clientCaps.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/clientCaps.py' `up2date_client/config.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/config.py' `up2date_client/distrotype.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/distrotype.py' `up2date_client/gpgUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/gpgUtils.py' `up2date_client/__init__.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/__init__.py' `up2date_client/repoDirector.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoDirector.py' `up2date_client/rhnChannel.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rhnChannel.py' `up2date_client/rhnErrata.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rhnErrata.py' `up2date_client/rpcServer.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rpcServer.py' `up2date_client/rpmSource.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rpmSource.py' `up2date_client/rpmSourceUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rpmSourceUtils.py' `up2date_client/rpmUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/rpmUtils.py' `up2date_client/sourcesConfig.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/sourcesConfig.py' `up2date_client/transaction.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/transaction.py' `up2date_client/up2dateAuth.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/up2dateAuth.py' `up2date_client/up2dateErrors.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/up2dateErrors.py' `up2date_client/up2dateLog.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/up2dateLog.py' `up2date_client/up2dateMessages.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/up2dateMessages.py' `up2date_client/up2dateUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/up2dateUtils.py' `up2date_client/urlMirrors.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/urlMirrors.py' `up2date_client/wrapperUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/wrapperUtils.py' cp -av up2date_client/repoBackends/*.py /opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/ `up2date_client/repoBackends/aptRepo.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/aptRepo.py' `up2date_client/repoBackends/dirRepo.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/dirRepo.py' `up2date_client/repoBackends/genericRepo.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/genericRepo.py' `up2date_client/repoBackends/genericSolveDep.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/genericSolveDep.py' `up2date_client/repoBackends/__init__.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/__init__.py' `up2date_client/repoBackends/up2dateRepo.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/up2dateRepo.py' `up2date_client/repoBackends/urlUtils.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/urlUtils.py' `up2date_client/repoBackends/yumRepo.py' -> `/opt/mrepo/usr/share/mrepo/up2date_client/repoBackends/yumRepo.py' [ "/opt/mrepo" -o ! -f "/opt/mrepo/etc/cron.d/mrepo" ] && install -Dp -m0644 config/mrepo.cron /opt/mrepo/etc/cron.d/mrepo || : install -Dp -m0644 config/mrepo.logrotate /opt/mrepo/etc/logrotate.d/mrepo
Vue que le répertoire par défaut a été modifié, il faut créer des liens entre /opt/mrepo et les différents répertoires de configuration système:
# ln -s /opt/mrepo/etc/httpd/conf.d/mrepo.conf /etc/httpd/conf.d/ # ln -s /opt/mrepo/etc/rc.d/init.d/mrepo /etc/init.d/
Configuration du serveur et des dépôts
Ajout du site dans apache (modification du fichier /opt/mrepo/etc/httpd/conf.d/mrepo.conf):
Création du dépôt CentOS 5 et copie de l’ISO:
# mkdir /opt/mrepo/var/mrepo # mkdir /opt/mrepo/var/mrepo/centos5-i386 # mv CentOS-5.5-i386-bin-DVD.iso /opt/mrepo/var/mrepo/centos5-i386
Configuration du serveur (fichier /opt/mrepo/etc/mrepo.conf):
### Configuration file for mrepo # 2010 02 26 rde default location changed from / to /opt/mrepo ### The [main] section allows to override mrepo's default settings ### The mrepo-example.conf gives an overview of all the possible settings [main] srcdir = /opt/mrepo/var/mrepo wwwdir = /opt/mrepo/var/www/mrepo confdir = /opt/mrepo/etc/mrepo.conf.d arch = i386 # specific settings shareiso = yes hardlink = yes hardlinkpluscmd = /usr/bin/hardlink++ 2 > /dev/null # chroot htmldir = /opt/mrepo/usr/share/mrepo/html cachedir = /opt/mrepo/var/cache lockdir = /opt/mrepo/var/lock/subsys logfile = /opt/mrepo/var/log/mrepo rhngetcmd = /opt/mrepo/usr/bin/rhnget yougetcmd = /opt/mrepo/usr/bin/youget #mailto = root@localhost #smtp-server = localhost #rhnlogin = username:password ### Any other section is considered a definition for a distribution ### You can put distribution sections in /etc/mrepo.conf.d ### Examples can be found in the documentation.
Configuration du dépôt CentOS 5 (fichier /opt/mrepo/etc/mrepo.conf.d/centos5.conf):
### Name: The Community Enterprise Operating System v5 ### URL: http://www.centos.org/ [centos5] name = CentOS $release ($arch) release = 5.5 #arch = i386 x86_64 ia64 ppc s390 s390x alpha arch = i386 metadata = repomd repoview ### ISO images #iso = http://mirror.centos.org/pub/centos/$release/isos/$arch/CentOS-$release-$arch-bin?of4.iso #os = http://mirror.centos.org/centos/$release/os/$arch/CentOS/RPMS/a iso = file:///opt/depot/CentOS-$release-$arch-bin-DVD.iso ### Additional repositories updates = http://mirror.centos.org/centos/$release/updates/$arch/RPMS/
Montage des isos et génération du dépôt:
# /opt/mrepo/usr/bin/mrepo -ug -vv -c /opt/mrepo/etc/mrepo.confMontage des dépôts au démarrage
# chkconfig --add mrepoMise à jour automatique des dépôts, tous les lundi à 1h30 (fichier /opt/mrepo/etc/cron.d)
# 2010 02 26 rde mrepo update 30 1 * * 1 root /opt/mrepo/usr/bin/mrepo -ug -v -c /opt/mrepo/etc/mrepo.conf > /opt/mrepo/var/log/mrepo.log
Ajout dans les jobs cron
# ln -s /opt/mrepo/etc/cron.d/mrepo /etc/cron.d/Vérification du fonctionnement
Dans un navigateur votre navigateur favoris aller à l’adresse http://<adresse du serveur>/mrepo (remplacer <adresse du serveur> par l’ip ou l’url de votre serveur). Dans notre cas, un dépôt a été crée également pour RedHat 5.5.
La page suivante doit s’afficher:
Configuration des clients
La configuration des clients s’effectue dans le répertoire /etc/yum/yum.repos.d/.
Faites une sauvegarde des fichiers de configuration CentOS-Base.repo et CentOS-Media.repo.
# mv CentOS-Base.repo CentOS-Base.repo.old # mv CentOS-Media.repo CentOS-Media.repo.old
et créez les fichiers suivants my-Centos-os.repo et my-Centos-updates.repo
# my-Centos-os.repo file <hr/> [my-Centos-os] name=CentOS Linux $releasever - $basearch - OS baseurl=http://<adresse du serveur>/mrepo/centos5-$basearch/RPMS.os enabled=1 gpgcheck=0
# my-Centos-updates.repo [my-Centos-updates] name=CentOS Linux $releasever - $basearch - Updates baseurl=http://<adresse du serveur>/mrepo/centos5-$basearch/RPMS.udpates enabled=1 gpgcheck=0