Créez votre propre dépôt de RPM avec mrepo


sysadmin_mrepo_header

Garder le contrôle sur ce qui peut être installé, assurer la cohérence des environnements logiciels sur l’ensemble d’une infrastructure, exploiter un réseau en circuit fermé : les raisons pour monter son propre dépôt ne manquent pas. Cet article a pour but d’expliquer en détails la procédure de mise en oeuvre de mrepo, anciennement connu sous le nom de Yam.

Les prérequis

J’utilise Centos au bureau depuis peu, c’est donc sur cette distribution que cet article sera basé. Cela nous changera un peu de cette bonne vieille Debian. mrepo ne figurant pas dans le dépôt de paquets par défaut, nous allons avoir recours à RepoForge (anciennement RPMforge). Commençons par nous assurer qu’on dispose de ce dépôt dans notre config :

yum check-update
yum install wget

Oui, wget n'est pas installé par défaut.

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -Uvh ./rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
yum check-update

On récupère le RPM de RepoForge, puis on l'installe.

yum install httpd

Vous êtes libre d'utiliser le serveur HTTP que vous voulez.

L’installation

Dépendances pour mrepo

Faites tourner un petit yum deplist mrepo juste pour le plaisir d’obtenir une jolie liste de dépendances :

  • bash.x86_64 4.2.45-5.el7_0.4
  • python.x86_64 2.7.5-16.el7
  • mrepo.noarch 0.8.7-1.el6.rf
  • createrepo.noarch 0.9.9-23.el7
  • pyOpenSSL.x86_64 0.13.1-3.el7
  • python.x86_64 2.7.5-16.el7

Hardlink++

Cet utilitaire sert à transformer les fichiers dupliqués en hard links vers l’original, permettant ainsi un gain de place substantiel. Je vous en recommande l’installation :

yum install hardlink++

Installation via Yum

yum install mrepo

Paquet Architecture Version Dépôt Taille
mrepo noarch 0.8.7-1.el6.rf rpmforge 305 k
createrepo noarch 0.9.9-23.el7 base 92 k
deltarpm x86_64 3.6-3.el7 base 82 k
libxml2-python x86_64 2.9.1-5.el7_0.1 updates 244 k
pyOpenSSL x86_64 0.13.1-3.el7 base 133 k
python-deltarpm x86_64 3.6-3.el7 base 31 k
libxml2 x86_64 2.9.1-5.el7_0.1 updates 664 k


Installation depuis les sources

cd /usr/local/src/
wget http://dag.wieers.com/home-made/mrepo/mrepo-0.8.7.tar.bz2
tar xzvf ./mrepo-0.8.7.tar.bz2
cd /usr/local/src/mrepo
make install

Configuration

mrepo

Modifiez le fichier /etc/mrepo.conf :

[main]
srcdir = /var/mrepo
wwwdir = /var/www/mrepo
confdir = /etc/mrepo.conf.d
logfile = /var/log/mrepo
arch = x86_64
mailto = root@example.com
smtp-server = localhost
pxelinux = /usr/lib/syslinux/pxelinux.0
tftpdir = /tftpboot
# specific settings
shareiso = yes
hardlink = yes
hardlinkpluscmd = /usr/bin/hardlink++ 2> /dev/null

[centos7]
release = 7
arch = x86_64
metadata = yum
name = Centos-$release $arch
iso = CentOS-$release.0-1406-$arch-DVD.iso

Notez que le fichier de configuration contient une section par distribution. Sachez également que vous avez la possibilité de créer un fichier de conf par distrib dans le dossier /etc/mrepo.conf.d/ (exemple : /etc/mrepo.conf.d/rhel6-i386.conf)

Récupération des fichiers ISO

Pourquoi un ISO ? Et bien c’est dedans que mrepo va aller chercher les paquets du dépôt :

cd /var/mrepo/
wget http://centos.mirror.crucial.com.au/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso

On fait un wget afin de récupérer le DVD de Centos 7 64bits.

Créez le dossier dédié à la distribution :

mkdir /var/mrepo/centos7-x86_64

Utilisation d’un proxy

Vous avez deux possibilités : utiliser des variables d’environnement ou utiliser le fichier de conf de mrepo :

Variables d’environnement :

export https_proxy="http://proxy:8080"
export http_proxy="http://proxy:8080"
export ftp_proxy="http://proxy:8080"
export no_proxy="localhost,mrepo,webserver"

Dans /etc/mrepo.conf :

[main]
no_proxy = localhost,mrepo,webserver
ftp_proxy = http://10.1.2.3:8080
http_proxy = http://10.1.2.3:8080
https_proxy = http://10.1.2.3:8080

Si d’aventure vous avez à négocier avec un proxy un peu dur de la feuille, ajoutez ceci au fichier /etc/mrepo.conf :

lftp-commands = set hftp:use-head 0

Premier démarrage de mrepo

L’important ici est de déterminer si mrepo monte le fichier ISO dans lequel les paquets sont stockés :

mrepo -vv
Verbosity set to level 2
Using configfile /etc/mrepo.conf
Setting option confdir in section [main] to: /etc/mrepo.conf.d
Setting option pxelinux in section [main] to: /usr/lib/syslinux/pxelinux.0
Setting option srcdir in section [main] to: /var/mrepo
Setting option tftpdir in section [main] to: /tftpboot
Setting option wwwdir in section [main] to: /var/www/mrepo
Setting option logfile in section [main] to: /var/log/mrepo
Setting option mailto in section [main] to: root@example.com
Setting option smtp-server in section [main] to: localhost
Setting option arch in section [main] to: x86_64
Setting option shareiso in section [main] to: yes
Setting option hardlink in section [main] to: yes
Setting option arch in section [centos7] to: x86_64
centos7-x86_64: Mount ISO CentOS-7.0-1406-x86_64-DVD.iso to /var/www/mrepo/centos7-x86_64/disc1

Si tout va bien, alors relancez mrepo afin qu’il mette le dépôt à jour :

mrepo -uvv
Verbosity set to level 2
Using configfile /etc/mrepo.conf
Setting option confdir in section [main] to: /etc/mrepo.conf.d
Setting option pxelinux in section [main] to: /usr/lib/syslinux/pxelinux.0
Setting option srcdir in section [main] to: /var/mrepo
Setting option tftpdir in section [main] to: /tftpboot
Setting option wwwdir in section [main] to: /var/www/mrepo
Setting option logfile in section [main] to: /var/log/mrepo
Setting option mailto in section [main] to: root@example.com
Setting option smtp-server in section [main] to: localhost
Setting option arch in section [main] to: x86_64
Setting option shareiso in section [main] to: yes
Setting option hardlink in section [main] to: yes
Setting option arch in section [centos7] to: x86_64
centos7-x86_64: Updating Centos-7 x86_64

Enfin, relancez mrepo une dernière fois afin qu’il génère l’index du dépôt :

mrepo -gvv
Verbosity set to level 2
Using configfile /etc/mrepo.conf
Setting option confdir in section [main] to: /etc/mrepo.conf.d
Setting option pxelinux in section [main] to: /usr/lib/syslinux/pxelinux.0
Setting option srcdir in section [main] to: /var/mrepo
Setting option tftpdir in section [main] to: /tftpboot
Setting option wwwdir in section [main] to: /var/www/mrepo
Setting option logfile in section [main] to: /var/log/mrepo
Setting option mailto in section [main] to: root@example.com
Setting option smtp-server in section [main] to: localhost
Setting option arch in section [main] to: x86_64
Setting option shareiso in section [main] to: yes
Setting option hardlink in section [main] to: yes
Setting option arch in section [centos7] to: x86_64
centos7-x86_64: Generating Centos-7 x86_64 meta-data
Hardlinking duplicate packages in /var/mrepo.
File: /var/mrepo/CentOS-7.0-1406-x86_64-DVD.iso


Hard linking Statistics:
Directories           : 4
Regular files         : 1
Comparisons           : 0
Hardlinked this run   : 0
Total hardlinks       : 0
Bytes saved this run  : 0 (0 bytes)
Total bytes saved     : 0 (0 bytes)
Total run time        : 0.00056004524231 seconds

Remarque : Si vous êtes vraiment à l’aise avec mrepo vous pouvez effectuer toutes ces étapes en une seule fois :

mrepo -ugv

Assurez-vous que ça marche

elinks http://localhost/mrepo


sysadmin_mrepo_webtest

Ajout / suppression de distributions

Ajout

Vous avez juste à relancer mrepo afin qu’il monte les ISOs qui ne le seraient pas. En cas de besoin, vous pouvez explicitement demander un remontage global :

mrepo -vv --remount

Suppression

Supprimer toute référence à la distrib du fichier /etc/mrepo.conf, puis démonter l’ISO :

mrepo -vv --umount

Redémarrez ensuite mrepo :

mrepo -vv

Sources documentaires

Pense-bête, cheat sheet


davechild_linux-command-line.600
Fourre-tout Linux (bash, nano, grep, screen, ls, permissions, …)