Cómo crear un repositorio local de yum

YumHay circunstancias en las que puede ser recomendable disponer de repositorios de yum locales para la actualización e instalación de paquetes en sistemas CentOS, RHEL, Fedora, etc, sobre todo si manejamos una gran cantidad de servidores y queremos disponer de mayor velocidad, seguridad y centralización. Vamos a ver los pasos necesarios para crear un repositorio local.

Lo primero que tenemos que hacer es elegir la ruta del repositorio y crear la estructura de carpetas, vamos a crear la misma estructura que en los repositorios oficiales, en este caso para la versión 5.6 de CentOS i386:

mkdir -p /repo_local/centos/5.6/os/i386/CentOS/

Antes de crear el repositorio debemos instalar una utilidad de yum llamada createrepo:

# yum install createrepo

Una vez instalado podemos crear el repositorio con el siguiente comando:

# createrepo repo_local

Saving Primary metadata
Saving file lists metadata
Saving other metadata

Nota: Este comando hay que ejecutarlo cada vez que añadimos, eliminamos o hacemos algún cambio en los rpm del repositorio.

Una vez creado podemos sincronizar nuestro repositorio con uno de los mirror oficiales de CentOS por rsync o añadir nuestros propios RPM. De momento vamos a hacer la prueba añadiendo un único rpm al repositorio:

# cd /repo_local/centos/5.6/os/i386/CentOS
# wget ftp://ftp.udl.es/pub/centos/5.6/os/i386/CentOS/perl-5.8.8-32.el5_5.2.i386.rpm

Antes de empezar a trabajar con él tenemos que activar el repositorio, para ello creamos un nuevo fichero con la configuración del mismo en /etc/yum.repos.d/repo_local.repo (el fichero debe tener la extensión .repo):

[repo_local]
name=Repositorio_local_CentOS
baseurl=file:///repo_local/
enabled=1
gpgcheck=0

La estructura es sencilla, indicamos el nombre del repositorio, su ruta (podría ser SMB, NFS, HTTP…), si está activado y si usa algún tipo de llave gpg (en este caso no). Ahora ya podemos hacer consultas contra este repositorio, instalar rpm’s, etc. Vamos a consultar el único rpm que hemos metido (perl-5.8.8-32.el5_5.2.i386.rpm). En el comando que veis deshabilito el repositorio base para evitar problemas de prioridades, etc:

# yum --enablerepo=repo_local --disablerepo=base info perl
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
 * addons: centos.mirror.xtratelecom.es
 * extras: centos.mirror.xtratelecom.es
 * rpmforge: fr2.rpmfind.net
 * updates: centos.mirror.xtratelecom.es
addons                                                                                                                                                         |  951 B     00:00
extras                                                                                                                                                         | 2.1 kB     00:00
repo_local                                                                                                                                                     |  951 B     00:00
rpmforge                                                                                                                                                       | 1.1 kB     00:00
updates                                                                                                                                                        | 1.9 kB     00:00
Excluding Packages in global exclude list
Finished

Available Packages
Name       : perl
Arch       : i386
Epoch      : 4
Version    : 5.8.8
Release    : 32.el5_5.2
Size       : 12 M
Repo       : repo_local
Summary    : El lenguaje de programación Perl.
URL        : http://www.perl.org/
License    : Artistic or GPL
Description: Perl es un lenguaje de programación de alto nivel derivado
           : del lenguaje C, de sed, de awk y de los script de la shell. Es adecuado
           : para la gestión de procesos, de ficheros y en particular de
           : ficheros de texto. Perl es un lenguaje sencillo y eficaz. Se utiliza
           : normalmente para la creación de utilidades de administración del sistema
           : y para la programación de sitios Web. Gran parte de los scripts CGI de la
           : web están escritos en Perl. Es necesario que instale el paquete perl en su
           : sistema si desea gestionar los scripts de Perl.
           :
           : Instale este paquete si desea programar en Perl o habilitar  su sistema
           : para gestionar los scripts Perl.

Si el repositorio lo quisierais además de para vuestros RPM personalizados para los oficiales de CentOS, deberíais sincronizarlo periódicamente con un mirror oficial y ejecutar después el createrepo. Podéis hacerlo en un cron, siendo el comando algo así:

# rsync -avz centos.mirror.xtratelecom.es::CentOS/5.6 /repo_local/centos/ && createrepo repo_local

Nota: no todos los repositorios aceptan rsync, en la lista de mirrors de CentOS veréis los que sí que lo permiten. El que uso en el ejemplo sí.