Mirroring de repositorios

Tenemos ahora dos mirrors de repostorios de la Debian y de la Ubuntu:

El repositorio Debian está construido como indicado acá

Contenido

Contiene de Debian la ultima distribución y dos anteriores como los mirror oficiales también los isos de instalación de las mismas versiones. Para Ubuntu tiene todas las distribuciones oficiales y también las isos.

La actualización de estos se hace por rsync lo que evita sobrescribir archivos y hace que una vez que tenemos el repositorio completo la actualización sea ágil.

Ventajas

  • La descarga de datos desde una máquina local es más rápida que una distante.
  • Requiere menos tráfico externo, por lo que cuesta menos en ancho de banda.
  • Los datos todavía están disponibles cuando el enlace de la red externa tiene problemas.
  • La distribución de datos desde un espejo local a usuarios externos ayuda a lograr un tráfico de red equilibrado (entrante ~ = saliente).

Funcionamiento general

El servicio de creación de reflejo básico requiere configurar algunos servicios, generalmente servidores HTTP y HTTPS (para distribuir los datos reflejados) y trabajos cron para actualizar los datos locales desde la fuente original. Pero una vez que el servicio se está ejecutando, es MUY importante mantenerlo a largo plazo para que muchos usuarios lo utilicen gradualmente. Es importante tomar en cuenta que Debian solo funciona con sus scripts originales no podemos sincronizar el repo con un script hecho por nosotros. Para nuestro mirror vamos a utilizar ftpsync. Lo que se hizo fue incluir estas scripts en nuestro role por lo que no es necesario descargar nada al ejecutar ansible ya configura y copia lo necesario.

Instalación del servidor con Ansible

Pre-requisitos:

Crear en redota un lv para almacenar las repos. Para esto realizamos lo siguiente:

* lvcreate -L4000G -n repos almacen   #crear una lv de 4 teras llamada repos en almacen
* mkfs.ext4 /dev/almacen/repos     # dar formato al lv repos
* nano /etc/fstab    # agregar para que se monte la lv cada vez que se inicie el sistema
/dev/almacen/repos /var/lib/vz/repos ext4 defaults 0 1   # agregar esta linea
* nano /etc/exports   # agregar acá la maquina montada para que sea gestionada por nfs-server
* exportfs -ra    # reiniciar el servicio
* systemctl status nfs-server   # estado del mismo servicio

también documentado en git

Default (variables que se definen por defecto)


# mirror
mirror_base_path: "/mnt/repos"                                                      # ubicación por defecto de los archivos
mirror_scripts_path: "/var/lib/mirror"                                              # lugar donde se copiaran las scripts
mirror_ssl: false                                                                   # crea el entorno para ssh (los certificados son creados previamente llamando al role certbot)
mirror_image_path: "{{ playbook_dir }}/roles/repositories/files/images/"            # imagen por defecto de la pantalla inicial
mirror_image: "repos.jpg"                                                           # imagen inicial
mirror_alias: ""                                                                    # si tiene alias

## Cron setup
mirror_cron: True                                                                   # si se quiere sincronizar automaticamente
mirror_bin_path: "{{mirror_scripts_path}}/mirror.sh"                                # archivo que ejecuta las scritps
mirror_cron_day: "*"                                                                # que dias
mirror_cron_hour:                                                                   # lista de horas que queremos ejecutar la actualizacion
  - '9'
  - '15'
  - '21'
  - '3'

########################################################################
## Debian repository
########################################################################

mirror_debian_rsync_host: 'debian.c3sl.ufpr.br'                                     # servidor rsync de Debian
mirror_debian_rsync_path: 'debian'                                                  # ubicacion dentro del servidor Debian
mirror_debian_rsync_user: ''                                                        # usuario si fuera necesario
mirror_debian_rsync_password: ''                                                    # contraseña de dicho usuario
mirror_debian_cd_rsync_host: 'debian.c3sl.ufpr.br'                                  # servidor rsync de las iso Debian
mirror_debian_cd_rsync_path: 'debian-cd'                                            # ubicacion dentro del servidor Debian

## Mirror information options                                                       #Datos del propietario del servicio mirror
mirror_debian_info_maintainer: 'Admins <admin@admin.com>'
mirror_debian_info_sponsor: '<https://www.sponsor.com>'
mirror_debian_info_country: 'Uruguay'
mirror_debian_info_location: 'Montevideo'
mirror_debian_info_throughput: 10Gb

## Include and exclude options
mirror_debian_arch_include: ''
mirror_debian_arch_exclude: ''

## Log option
mirror_debian_logdir: '{{mirror_scripts_path}}/debian/debian/log'                   # ubicacion del log del repo debian
mirror_debian_cd_logdir: '{{mirror_scripts_path}}/debian/debian-cd/log'             # ubicacion del log de los iso debian

########################################################################
## Ubuntu
########################################################################

mirror_ubuntu_rsync_host: 'archive.ubuntu.com'                                      # servidor rsync de Ubuntu
mirror_ubuntu_rsync_path: 'ubuntu'                                                  # ubicacion dentro del servidor Ubuntu
mirror_ubuntu_releases_rsync_host: 'ubuntu.c3sl.ufpr.br'                            # servidor rsync de los isos de Ubuntu 
mirror_ubuntu_releases_rsync_path: 'releases'                                       # ubicacion dentro del servidor Ubuntu

Luego de finalizada la instalación de este contenedor se deberá correr la script /var/lib/mirror/mirror.sh para que comience la copia de los repos (esta operación puede llevar muchas horas la primera vez ya que trae mas de 3 teras de datos)
Para las actualizaciones del repo no necesitamos correr el bash ya que cron se encarga de esta tarea.

Referencias

index.png (89.9 KB) Victor Torterola, 08/05/2019 08:38 AM