Cómo crear un repositorio local de YUM con acceso http

En el artículo aprenderemos a crear un repositorio local de YUM con acceso http, esto es, un mirror de los repositorios de CentOS 7, con acceso vía web, a nivel local.

Esto puede ser muy útil en redes que no queremos que estén expuestas a Internet pero que si queremos que puedan acceder a las últimas versiones de los paquetes RPM, gestionados por el gestor YUM

Crear repositorio local de YUM con acceso http

Para ello vamos a utilizar un host con un sistema operativo Centos 7, al cual le instalaremos una serie de paquetes; primero de todo, para tener acceso a los paquetes vía web, instalaremos el servidor web Apache

Instalamos:

1
yum install httpd

Para operar con el servidor web Apache, podéis consultar el artículo que escribí en su día llamado “Arranque y parada de un servidor web Apache Linux

Si tenemos el cortafuegos habilitado, recuerda abrir los puertos, ‘80’ o ‘443’, en el caso que utilicemos HTTPS

1
2
3
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Una vez hecho esto ya podemos acceder vía web:

Crear repositorio YUM local

Debemos primero instalar los paquetes necesarios para crear, configurar y manejar repositorios:

1
yum install createrepo  yum-utils

Antes de continuar, os comento que, ya que los repositorios ocupan mucho espacio, es recomendable, si tenemos esa posibildiad, utilizar un recurso NFS, desde una cabina de discos o NAS, que es justo lo que he hecho yo.

Ya os comenté que tengo una cabina Synology; desde esta he compartido una carpeta vía NFS y la he montado justo en «/var/www/html/repos», tal como sigue:

1
2
#Editamos el fichero /etc/fstab
192.168.0.200:/volume1/MirrorCentos    /var/www/html/repos nfs     defaults 0 0

Creamos la carpeta donde irán los ficheros de los repositorios:

1
mkdir -p /var/www/html/repos/{base,centosplus,extras,updates}

Utilizamos la herramienta “reposync” para sincronizar los repositorios oficiales:

1
2
3
4
5
6
7
8
reposync -g -l -d -m --repoid=base --newest-only --download-metadata \ 
--download_path=/var/www/html/repos/
reposync -g -l -d -m --repoid=centosplus --newest-only --download-metadata \
--download_path=/var/www/html/repos/
reposync -g -l -d -m --repoid=extras --newest-only --download-metadata \
--download_path=/var/www/html/repos/
reposync -g -l -d -m --repoid=updates --newest-only --download-metadata \
--download_path=/var/www/html/repos/

Podemos comprobar que efectivamente se han sincronizar los paquetes, por ejemplo:

1
ls -l /var/www/html/repos/base/

Otro paso más es crear los ficheros con los metadatos:

1
2
3
4
createrepo /var/www/html/repos/base/  
createrepo /var/www/html/repos/centosplus/  
createrepo  /var/www/html/repos/extras/  
createrepo /var/www/html/repos/updates/

Para actualizar la información sería así:

1
2
3
4
createrepo --update /var/www/html/repos/base/  
createrepo --update /var/www/html/repos/centosplus/ 
createrepo --update/var/www/html/repos/extras/  
createrepo --update /var/www/html/repos/updates/

Creamos el fichero del Virtual Host para Apache:

1
vim /etc/httpd/conf.d/repos.conf

Con la información:

1
2
3
4
5
6
7
8
9
10
11
12
13
<VirtualHost *:80>
    ServerName ejemplo.repos
    ServerAlias ejemplo.repos.com
    DocumentRoot /var/www/html/repos
    ErrorLog /var/log/httpd/repos.error.log
    CustomLog /var/log/httpd/repos.access.log combined
        <Directory /var/www/html/repos>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
                Allow from all
        </Directory>
</VirtualHost>

Reiniciamos Apache y ya podemos acceder vía web:

1
http://ip-del-host/repos

Una muestra:

Crear tarea diaria de sincronización utilizando Cron

Nos interesa tener siempre sincronizado los repositorios, por lo que crearemos una tarea diaria para la sincronización de los repositorios:

1
vi /etc/cron.daily/actualizar-repositorios

Con el contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
reposync -g -l -d -m --repoid=base --newest-only \
--download-metadata --download_path=/var/www/html/repos/
 
reposync -g -l -d -m --repoid=centosplus \
--newest-only --download-metadata --download_path=/var/www/html/repos/
 
reposync -g -l -d -m --repoid=extras \
--newest-only --download-metadata --download_path=/var/www/html/repos/
 
reposync -g -l -d -m --repoid=updates \
--newest-only --download-metadata --download_path=/var/www/html/repos/

Le damos permiso de ejecución al script:

1
chmod +x /etc/cron.daily/actualizar-repositorios

Añadir repositorios locales de YUM en host clientes

Una vez ya tenemos la replica de YUM montada en el host central, ahora, para utilizar estos repositorios, los debemos configurar en las máquinas clientes.

Añadiendo este fichero:

1
vim /etc/yum.repos.d/local-repos.repo

Con la información de los repositorios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[local-base]
name=CentOS Base
baseurl=http://ip-servidor-central/base/
gpgcheck=0
enabled=1
[local-centosplus]
name=CentOS CentOSPlus
baseurl=http://ip-servidor-central/centosplus/
gpgcheck=0
enabled=1
[local-extras]
name=CentOS Extras
baseurl=http://ip-servidor-central/extras/
gpgcheck=0
enabled=1
[local-updates]
name=CentOS Updates
baseurl=http://ip-servidor-central/updates/
gpgcheck=0
enabled=1

Y con esto ya lo tenemos listo.

Espero que la información os sea de utilidad en algún momento. Nos vamos leyendo.

Para elaborar el artículo me he consultado los siguientes enlaces:

Tecmint.com – How to Setup Local HTTP Yum Repository
rm-rf.es – Cómo crear un repositorio local de yum
Bencame.com – Creating a local YUM Repository