"Después del juego es antes del juego"
Sepp Herberger

viernes, 7 de febrero de 2025

Mirror para los repositorios de paquetes de Ubuntu 22.

Siempre me gusta hacer un mirror local de los repositorios de paquetes más frecuentes, ya que esto garantiza que mis equipos se actualizarán dentro de la red local sin depender de servicios ni conexiones externas. Ya traté esto en este articulo de hace 10 años, cuando trabajabamos con Debian. Ahora voy a contar como montarlo en Ubuntu 22.

Antaño usamos la utilidad debmirror. Las cosas han cambiado y ahora usaremos una herramienta más sencilla, apt-mirror. Primero instalamos el paquete en el servidor donde vamos a crear el repositorio mirror de paquetes:
# apt-get install apt-mirror
En /etc/apt/mirror.list metemos la lista de repositorios a clonar. Este configuración, a diferencia de la antigua debmirror, tiene un formato similar a los sources.list habituales de Debian/Ubuntu:
############# config ##################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  /mirror
# set skel_path    /skel
# set var_path     /var
# set cleanscript /clean.sh
# set defaultarch  >running host architecture<
# set postmirror_script /postmirror.sh
# set run_postmirror 0

set cleanscript /clean.sh
set defaultarch amd64  #Solo amd64
set nthreads     20
set _tilde 0
#set limit_rate 1000k 

############# end config ##############

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#

deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-amd64 http://es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-amd64 http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse

#######################
# REPOS DE LA SECCION #
#######################

deb-amd64 http://desarrollo.educarex.es/solointranet/ubuntu/jammy/ jammy linex
deb-amd64 http://linex.educarex.es/ubuntu/jammy/ jammy linex

###### 3rd Party Binary Repos

deb-amd64 http://dl.google.com/linux/earth/deb/ stable main

clean http://es.archive.ubuntu.com/ubuntu
clean http://desarrollo.educarex.es/solointranet/ubuntu
clean http://linex.educarex.es/ubuntu
clean http://desarrollo.educarex.es/es.archive.ubuntu.com/ubuntu
En el fichero anterior configuramos la clonación de los repos de Ubuntu Jammy, el repositorio interno de nuestra red (desarrollo.educarex.es y linex.educarex.es) y el repositorio de Google Earth. Solo clono los paquetes amd64, ya que la versión i386 de los paquetes tiene un uso marginal, ocupa mucho y no tengo suficiente espacio de disco para clonar dicha parte.

Todo se descargará en var/spool/apt-mirror/mirror. Para poder hacer uso del repositorio clonado en nuestra red hay que instalar apache2 y hacer que /var/www/html/ubuntu apunte a /var/spool/apt-mirror/mirror:
# ln -sf /var/spool/apt-mirror/mirror /var/www/html/ubuntu
Para que los repositorios se clonen diariamente creamos los ficheros /etc/cron.d/apt-mirror y /etc/cron.d/apt-mirror-die:
# cat /etc/cron.d/apt-mirror
# Regular cron jobs for the apt-mirror package
00 22	* * *	apt-mirror	rm -f /var/spool/apt-mirror/var/apt-mirror.lock; /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
# cat /etc/cron.d/apt-mirror-die 
# Matar el proceso apt-mirror
00 01	* * *	root	/usr/bin/killall -9 apt-mirror
A las 22:00 se lanza apt-mirror y tres horas después se corta. Por supuesto podemos cambiar estas horas para ajustar a nuestro caso. Harán falta varios días para bajar todos los repositorios completos, ya que el total son 670GB, repartidos así:
# du -sh *
5,4G	desarrollo.educarex.es
111M	dl.google.com
389G	es.archive.ubuntu.com
574M	linex.educarex.es
275G	security.ubuntu.com
Si tenemos prisa siempre podemos forzar la actualización a mano o lanzar el siguiente comando para ver si está todo ya bajado:
# apt-mirror
Una vez tenemos los repositorios clonados hay que distribuir a nuestros clientes unos ficheros *.list que apunten al mirror local en lugar de a los repositorios externos a la red. Tendriamos este /etc/apt/sources.list:
#Arquitectura amd64 tira del repositorio local
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/es.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb [arch=amd64] http://servidor-mirror/ubuntu/security.ubuntu.com/ubuntu/   jammy-security main restricted universe multiverse

#Arquitectura i386 tira de repositorios en Internet
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb [arch=i386] http://es.archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
deb [arch=i386] http://security.ubuntu.com/ubuntu   jammy-security main restricted universe multiverse
Fichero /etc/apt/sources.list.d/repoXubuntuLinex.list:
#Repositorio Linex Desarrollo 
deb [arch=amd64] http://servidor-mirror/ubuntu/desarrollo.educarex.es/solointranet/ubuntu/jammy jammy linex
deb [arch=i386]  http://desarrollo.educarex.es/solointranet/ubuntu/jammy/ jammy linex

#Repositorio Linex para Ubuntu
deb [arch=amd64] http://servidor-mirror/ubuntu/linex.educarex.es/ubuntu/jammy jammy linex
deb [arch=i386]  http://linex.educarex.es/ubuntu/jammy/ jammy linex
Fichero /etc/apt/sources.list.d/google.list:
#Google Earth
deb [ arch=amd64 ] http://servidor-mirror/ubuntu/dl.google.com/linux/earth/deb/  stable main 
En los ficheros anteriores cambiamos "servidor-mirror" por el nombre o ip de nuestro mirror local. Lo más cómodo es distribuir estos tres ficheros *.list mediante una tarea puppet y una vez hecho esto hacer "apt-get update" en los clientes para que sincronicen con los mirrors locales.

Y ya está, una vez completado veremos que los apt-get y pkgsync van bastante más rápidos y apenas saturan nuestra salida a Internet.

No hay comentarios:

Publicar un comentario