Crear mirror de Ubuntu
¿Te has preguntado cómo crear un mirror de Ubuntu para descarga local y rápida de paquetes en tu empresa? Yo sí, recientemente, y aquí te contaré cómo lo hice.
Conceptos
Qué es un mirror de Ubuntu
Algunos lo conocen simplemente como repositorio. Un mirror de Ubuntu es un servidor que aloja copias de los archivos de los repositorios del sistema operativo Ubuntu.
Estos repositorios incluyen paquetes de software, actualizaciones y otros archivos esenciales para el funcionamiento y mantenimiento del sistema Ubuntu. Los mirrors están distribuidos geográficamente para mejorar la velocidad de acceso y la fiabilidad para los usuarios en todo el mundo.
Contenido
- Paquetes: Archivos binarios precompilados para aplicaciones de software.
- Actualizaciones: Parches de seguridad, correcciones de errores y actualizaciones de versión para el software existente.
- Código Fuente: El código fuente original de los paquetes de software, disponible para los usuarios que prefieren compilar el software ellos mismos.
- Archivos de Instalación: Imágenes ISO y otros archivos necesarios para instalar Ubuntu.
Tipos de Mirrors
- Mirrors Oficiales: Mantenidos por Canonical, la empresa detrás de Ubuntu, o sus socios de confianza.
- Mirrors No Oficiales: Mantenidos por voluntarios u organizaciones que eligen apoyar a la comunidad de Ubuntu.
Estructura
- Repositorio Principal (Main): Contiene los paquetes del sistema core esenciales para el funcionamiento de Ubuntu.
- Repositorio Universe: Incluye una gran colección de software adicional mantenido por la comunidad de Ubuntu.
- Repositorio Restricted: Contiene controladores y firmware propietarios necesarios para cierto hardware.
- Repositorio Multiverse: Contiene software que no es libre o tiene restricciones legales.
Configuración
Para crear un mirror de Ubuntu debemos seguir estos pasos:
1. Preparar un servidor dedicado
Las características de hardware pueden depender mucho de cada entorno, según la cantidad de versiones de Ubuntu a replicar, según cantidad de equipos cliente a servir, entre otros. Pero estos podrían ser unas características mínimas bastante conservadoras:
- Ubuntu Server 22.04 o superior
- 2 GB de RAM
- 2 vCPUs
- 1 TB de disco (redundante, montado en /mirror)
El directorio bajo el cual se almacenará el contenido del mirror es /mirror y en esa ruta debería estar montado un disco de gran capacidad, preferentemente redundante con RAID o alguna alternativa equivalente.
2. Instalar dependencias
La creación de un mirror de Ubuntu se puede realizar con distintas opciones de software. En mi caso, opté hacerlo con Debmirror porque parece estar bien documentada, soportada y vigente.
Así es como instalo debmirror y otros paquetes necesarios:
sudo apt-get install -y apache2 debmirror gnupg xz-utils rsync
3. Ajustes previos
Es necesario crear la estructura de directorios para debmirror de este modo:
sudo mkdir -p \ /mirror/debmirror/amd64 \ /mirror/debmirror/mirrorkeyring \ /mirror/scripts cd /var/www/html sudo ln -s /mirror/debmirror/amd64 ubuntu
Los comandos anteriores deberían crear una estructura como se muestra en las siguientes imágenes:
Ahora es momento de instalar la llave GPG de Ubuntu:
sudo gpg --no-default-keyring \ --keyring /mirror/debmirror/mirrorkeyring/trustedkeys.gpg \ --import /usr/share/keyrings/ubuntu-archive-keyring.gpg
4. Script de ayuda
Existe un script que nos simplifica el uso de debmirror y el cual lo debemos descargar como sigue:
cd /mirror/scripts sudo curl -o debmirroramd64.sh \ https://louwrentius.com/files/debmirroramd64.sh.txt sudo chmod +x debmirroramd64.sh
Este script está bastante bien documentado con comentarios. Yo le hice algunos ajustes mínimos como estos:
# Distintos repositorios por cada release deseado: jammy y noble release=jammy,jammy-security,jammy-updates,jammy-backports,noble,noble-security,noble-updates,noble-backports # Replica cercana a mi zona geográfica que deseo usar para descargar paquetes server=pe.archive.ubuntu.com # Parámetros de debmirror: quitar algunos comentarios y modificar parámetros # para que quede como se muestra debajo debmirror -a $arch \ --no-source \ --rsync-options "-aIL --partial" \ -s $section \ -h $server \ -d $release \ -r $inPath \ --progress \ --method=$proto \ $outPath
5. Descarga inicial
Ahora toca ejecutar el script debmirroramd64.sh y esperar que termine toda la descarga. Esto puede tomar horas, dependiendo de la velocidad a Internet.
Aquí recomiendo el uso de un gestor de sesiones de shell como tmux el cual permite dejar una sesión corriendo en segundo plano en nuestro servidor. De este modo, podemos desconectarnos y dejar que tmux mantenga activos los procesos de shell que posteriormente podemos reanudar.
El script se ejecuta sin ningún parámetro, como sigue:
cd /mirror/scripts sudo bash debmirroramd64.sh
6. Descarga automática periódica
Una tarea programada cron es indispensable para que debmirror constantemente descargue los nuevos paquetes de actualizaciones.
Una línea como la siguiente debería ser agregada al final del archivo /etc/crontab:
15 */12 * * * root /mirror/scripts/debmirroramd64.sh
Esto hará que se ejecute el script cada 12 horas en el minuto 15.
7. Configuración de clientes
Una vez que nuestro mirror privado de Ubuntu ya está listo, tenemos que realizar una configuración de Virtual Host de Apache y DNS para que se sirva la ruta /var/www/html/ubuntu que apunta a /mirror/debmirror/amd64. Por ejemplo, esto se haría con un nombre como mirror.miempresa.com
De este modo, ahora los clientes Ubuntu que están dentro de nuestra organización pueden configurar sus fuentes de repositorio de paquetes en /etc/apt/sources.list como sigue:
deb http://mirror.miempresa.com/ubuntu noble main restricted universe multiverse deb http://mirror.miempresa.com/ubuntu noble-security main restricted universe multiverse deb http://mirror.miempresa.com/ubuntu noble-updates main restricted universe multiverse
Conclusión
Este tutorial ha mostrado paso a paso cómo crear tu propio mirror de Ubuntu. He limitado las opciones de configuración al mínimo posible para hacerlo práctico y fácil de entender.
Si te surge la duda sobre el espacio necesario para hospedar más de un release de Ubuntu, aquí te dejo unos datos:
- Ubuntu jammy: 384 GB
- Ubuntu noble: 156 GB
Estos pesos fueron obtenidos en Junio del 2024, pero conforme avance el tiempo el espacio de disco irá aumentando conforme se añadan más actualizaciones.
Naturalmente, Ubuntu jammy, al ser un release más antiguo, seguirá aumentando de tamaño pero a un ritmo algo más lento que Ubuntu noble. Al cabo de unos años, Ubuntu jammy no recibirá más actualizaciones y su espacio en disco ya no crecerá, mientras que Ubuntu noble sí lo seguirá haciendo.
Espero este artículo te haya sido de utilidad. Nos encontramos en una próxima oportunidad.
Deja un comentario