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. firewall-cmd --zone=public --permanent --add-service=http
  2. firewall-cmd --zone=public --permanent --add-service=https
  3. 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. #Editamos el fichero /etc/fstab
  2. 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. reposync -g -l -d -m --repoid=base --newest-only --download-metadata \ 
  2. --download_path=/var/www/html/repos/
  3. reposync -g -l -d -m --repoid=centosplus --newest-only --download-metadata \
  4. --download_path=/var/www/html/repos/
  5. reposync -g -l -d -m --repoid=extras --newest-only --download-metadata \
  6. --download_path=/var/www/html/repos/
  7. reposync -g -l -d -m --repoid=updates --newest-only --download-metadata \
  8. --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. createrepo /var/www/html/repos/base/  
  2. createrepo /var/www/html/repos/centosplus/  
  3. createrepo  /var/www/html/repos/extras/  
  4. createrepo /var/www/html/repos/updates/

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

  1. createrepo --update /var/www/html/repos/base/  
  2. createrepo --update /var/www/html/repos/centosplus/ 
  3. createrepo --update/var/www/html/repos/extras/  
  4. 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. <VirtualHost *:80>
  2.     ServerName ejemplo.repos
  3.     ServerAlias ejemplo.repos.com
  4.     DocumentRoot /var/www/html/repos
  5.     ErrorLog /var/log/httpd/repos.error.log
  6.     CustomLog /var/log/httpd/repos.access.log combined
  7.         <Directory /var/www/html/repos>
  8.                 Options Indexes FollowSymLinks
  9.                 AllowOverride All
  10.                 Require all granted
  11.                 Allow from all
  12.         </Directory>
  13. </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. #!/bin/bash
  2.  
  3. reposync -g -l -d -m --repoid=base --newest-only \
  4. --download-metadata --download_path=/var/www/html/repos/
  5.  
  6. reposync -g -l -d -m --repoid=centosplus \
  7. --newest-only --download-metadata --download_path=/var/www/html/repos/
  8.  
  9. reposync -g -l -d -m --repoid=extras \
  10. --newest-only --download-metadata --download_path=/var/www/html/repos/
  11.  
  12. reposync -g -l -d -m --repoid=updates \
  13. --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. [local-base]
  2. name=CentOS Base
  3. baseurl=http://ip-servidor-central/base/
  4. gpgcheck=0
  5. enabled=1
  6. [local-centosplus]
  7. name=CentOS CentOSPlus
  8. baseurl=http://ip-servidor-central/centosplus/
  9. gpgcheck=0
  10. enabled=1
  11. [local-extras]
  12. name=CentOS Extras
  13. baseurl=http://ip-servidor-central/extras/
  14. gpgcheck=0
  15. enabled=1
  16. [local-updates]
  17. name=CentOS Updates
  18. baseurl=http://ip-servidor-central/updates/
  19. gpgcheck=0
  20. 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