Crear repositorios locales para openSUSE (Mirror privado)

En este artículo veremos como configurar en forma local los tres repositorios principales de nuestra distro favorita openSUSE (Update, OSS y Non-OSS), para que los equipos de una red local puedan acceder a los mismos sin necesidad de acceder a Internet para obtener los paquetes.

Disponer de repositorios locales dentro de nuestra LAN o WAN permite evitar la implementación de controles y políticas de seguridad relacionadas con la autorización y control de acceso a Internet de varios equipos que por su naturaleza de trabajo no lo requieren. También permite realizar un uso eficiente del ancho de banda de Internet disponible.

Debido a que en mi trabajo utilizamos una versión cocinada de openSUSE en un gran número de estaciones de trabajo, que por cierto ha sido creada mediante la herramienta on-line SUSE Studio (de la cual tendré que hablar en el futuro), hemos visto la necesidad de implementar un repositorio local ubicado en un servidor dentro de la red corporativa que nos permita acceder rápidamente a actualizaciones y a paquetes de instalación que puedan resultar necesarios en el día a día.

Pasos de configuración

Lo que básicamente se va a realizar es configurar un mirror de repositorios más para la distribución openSUSE, aunque en este caso será un mirror privado. Como es de esperarse, en este ejemplo los repositorios locales serán configurados en un servidor openSUSE, que serán accesibles para los equipos de la red local a través del protocolo http.

  1. Primero comenzaremos por crear una carpeta en donde estará ubicado el repositorio. Como entre los tres repositorios Update, OSS y Non-OSS suelen ocupar bastante espacio, entre 30 a 40 Gb, hay que prever suficiente espacio en disco para ello (y esto es solo para una versión de la distro), y como tengo suficiente espacio en la partición /opt voy a crear ahí el directorio raíz del repositorio.
    testsrv:~ # mkdir -p /opt/opensuse
    
  2. Ahora procedemos a instalar Apache para servir los paquetes de los repositorios a los demás equipos de la red.
    testsrv:~ # zypper install apache2
    
  3. A continuación creamos un archivo denominado opensuserepos.conf en el directorio /etc/apache2/conf.d para configurar la accesibilidad del repositorio a través de Apache.
    testsrv:~ # touch /etc/apache2/conf.d/opensuserepos.conf
    
    Procedemos a editar el archivo,
    testsrv:~ # vi /etc/apache2/conf.d/opensuserepos.conf
    
    Y luego le agregamos la siguiente configuración para que el contenido del directorio /opt/opensuse/ pueda ser servido a través de la ruta /opensuse/ de nuestro servidor.
    Alias /opensuse/ /opt/opensuse/
    <directory "/opt/opensuse/">
        Options FollowSymLinks Indexes
        IndexOptions FancyIndexing VersionSort NameWidth=* Charset=UTF-8 TrackModified FoldersFirst XHTML
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    
  4. Ahora solo nos resta arrancar y activar el servicio de Apache para que los repositorios se encuentren disponibles mediante el protocolo http.
    testsrv:~ # systemctl start apache2.service
    testsrv:~ # systemctl enable apache2.service
    
  5. A continuación creamos los directorios donde vamos a sincronizar cada uno de los repositorios:
    testsrv:~ # mkdir -p /opt/opensuse/12.3/repo/update/
    testsrv:~ # mkdir -p /opt/opensuse/12.3/repo/oss/
    testsrv:~ # mkdir -p /opt/opensuse/12.3/repo/non-oss/
    
  6. Ahora tenemos que preparar el script que se va a encargar de la sincronización. Lo creamos dentro del directorio /usr/bin con el nombre syncopensuserepos y le asignamos los permisos correspondientes:
    testsrv:~ # touch /usr/bin/syncopensuserepos
    testsrv:~ # chmod 755 /usr/bin/syncopensuserepos
    
    Luego lo editamos:
    testsrv:~ # vi /usr/bin/syncopensuserepos
    
    Y le agregamos el siguiente contenido que como se puede observar utiliza el comando rsync para sincronizar los repositorios previa verificación de la existencia de los directorios locales de destino.
    #!/bin/bash
    
    # Procedimiento de sincronizacion de repositorios previa verificacion de existencia de carpeta.
    if [ -d /opt/opensuse/12.3/repo/update/ ]; then
        rsync --times --perms --recursive --links --verbose --progress mirrors.nl.eu.kernel.org::opensuse/update/12.3/ /opt/opensuse/12.3/repo/update/ --delete-after --human-readable --itemize-changes --stats --exclude=x86_64
    fi
    if [ -d /opt/opensuse/12.3/repo/oss/ ]; then
        rsync --times --perms --recursive --links --verbose --progress mirrors.nl.eu.kernel.org::opensuse/distribution/12.3/repo/oss/ /opt/opensuse/12.3/repo/oss/ --delete-after --human-readable --itemize-changes --stats --exclude=x86_64
    fi
    if [ -d /opt/opensuse/12.3/repo/non-oss/ ]; then
        rsync --times --perms --recursive --links --verbose --progress mirrors.nl.eu.kernel.org::opensuse/distribution/12.3/repo/non-oss/ /opt/opensuse/12.3/repo/non-oss/ --delete-after --human-readable --itemize-changes --stats --exclude=x86_64
    fi
    
    Al comando rsync se le pasan una serie de argumentos incluido el --exclude=x86_64, que evita sincronizar los paquetes de 64 bits que en este ejemplo se excluyen para evitar que se descarguen paquetes innecesarios.

  7. Ahora si ya podemos sincronizar los repositorios ejecutando el comando:
    testsrv:~ # syncopensuserepos
    
    Si es la primera vez que ejecutamos el comando de sincronización este llevará su tiempo para concluir, porque la sincronización de los tres repositorios ocuparán alrededor de 20 GB más o menos excluidos los paquetes x86_64, lo que es mucho espacio en disco y tráfico para descargarlos desde Internet.

  8. Lo único que nos resta hacer es configurar una tarea programada que ejecute la sincronización automáticamente. Para ello creamos el archivo syncopensuserepos en el directorio /etc/cron.d y le asignamos los permisos correspondientes.
    testsrv:~ # touch /etc/cron.d/syncopensuserepos
    testsrv:~ # chmod 644 /etc/cron.d/syncopensuserepos
    
    Luego lo editamos,
    testsrv:~ # vi /etc/cron.d/syncopensuserepos
    
    Y le agregamos la siguiente configuración que ejecuta el comando de sincronización todos los domingos a las 01:00 de la madrugada.
    # Sync openSUSE Repos.
    00 01 * * 0 root /usr/bin/syncopensuserepos >> /dev/null
    
  9. Por último reiniciamos el servicio cron y listo:
    testsrv:~ # systemctl restart cron.service
    
  10. Ahora ya podemos agregar manualmente los repositorios a nuestro sistema operativo utilizando los siguientes comandos:
    testsrv:~ # zypper ar http://ip-dominio_reposerver/opensuse/12.3/repo/oss
    testsrv:~ # zypper ar http://ip-dominio_reposerver/opensuse/12.3/repo/non-oss
    testsrv:~ # zypper ar http://ip-dominio_reposerver/opensuse/12.3/repo/update
    


Fuentes

Comentarios

  1. Hola. Ya sé que el artículo es antiguo. Gracias por compartirlo. Lo que me gustaría añadir ese que quizás es más fácil montar el repositorio sólo con FTP, para no tener que instalar Apache y configurarlo (es más sencillo el servidor FTP).
    Un saludo

    ResponderEliminar
    Respuestas
    1. Hola Patrick, yo hice varias pruebas con ftp y la verdad prefiero servir este tipo de contenido con los protocolos http y https, da menos problemas en redes controladas y funciona con proxies. Saludos..

      Eliminar

Publicar un comentario

Entradas populares