Hola amigos de NETWORLD, hoy veremos como podemos tener nuestro propio repositorio local de Zextras Carbonio CE en un servidor local con el fin de agilizar nuestras descargas y actualizaciones, a veces nos encontramos con una velocidad de internet frustrante como en Cuba, cortes, latencia, etc y poder contar con nuestro propio repositorio actualizado nos evita diferentes dolores de cabeza.
El proceso para crear un repositorio de Zextras aunque no es nada del otro mundo, me obligó a usar una nueva herramienta ya que fue imposible usar opciones tradicionales como wget o rsync por no estar soportadas por Zextras, así que por encima de mi gusto he tenido que usar «apt-mirror» y no precisamente la versión «apt-mirror2» que en teoría está un poco mejor optimizada, etc, pero en este caso dio más problemas que la versión original «apt-mirror», de cualquier forma si buscas información sobre apt-mirror verás que suele tener problemas con corromper algunos paquetes si por ejemplo falla la conexión, pero no te preocupes, en este artículo te traigo una solución que revisará todo el repositorio y hará la comparación, si hay paquetes dañados te notificará y los quitará por ti, luego ejecutará nuevamente apt-mirror y este descargará solo esos paquetes que se eliminaron por estar dañados. Que bueno, ¿verdad?
Lo siguiente sería levantar nuestro servidor http (en este caso Nginx) para servir el repositorio en la red, y por último configurar nuestro servidor Carbonio CE para que se actualice de nuestro repositorio local.
Comencemos, lo primero es tener un nuevo servidor con Ubuntu, en este caso usamos Ubuntu Server 22.04 LTS, aquí descargamos el repositorio e instalamos Nginx para servirlo en la red, veamos los detalles de este servidor:
Nombre o FQDN: mirror.networldcu.tech
Dirección IP: 192.168.1.15
Espacio en disco: El repositorio de Zextras Carbonio CE pesa alrededor de 12GB, la realidad es que es mucho menos que eso, pero Zextras mantiene varios versiones de cada paquete .deb (hasta 11 versiones de algunos paquetes) y no, no tenemos forma de descargar solo los últimos usando apt-mirror o si das con la magia nos la dejas saber en los comentarios. Otra opción es usar un script para limpiar un poco el repositorio de los archivos más antiguos, pero ya eso es otro tema.
Instalando apt-mirror, su configuración y descargando el repositorio
Instalar apt-mirror
# apt-update
# apt-upgrade
# apt install apt-mirror
Configurar apt-mirror
# mkdir /var/www/html/carbonioce
Edita el archivo de configuración de apt-mirror, por defecto este archivo viene configurado para descargar el repositorio de Ubuntu, entonces vamos a eliminar este archivo (o mejor hacemos una salva) y creamos uno nuevo con el siguiente contenido:
Salvar el archivo actual:
mv /etc/apt/mirror.list /etc/apt/mirror.list.back
# nano /etc/apt/mirror.list
set base_path /var/www/html/carbonioce
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
set postmirror_script /var/spool/apt-mirror/var/postmirror.sh
set defaultarch amd64
set nthreads 2
set _tilde 0
deb [arch=amd64 signed-by=/usr/share/keyrings/zextras.gpg] https://repo.zextras.io/release/ubuntu jammy main
clean https://repo.zextras.io/release/ubuntu
Vamos a instalar la llave para que pueda ser usada, podemos prescindir de ella, pero si podemos vamos a ponerla:
# wget -O- "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x5dc7680bc4378c471a7fa80f52fd40243e584a21" | gpg --dearmor | sudo tee /usr/share/keyrings/zextras.gpg > /dev/null
# chmod 644 /usr/share/keyrings/zextras.gpg
Estamos listos para comenzar a descargar el repositorio de Zextras Carbonio CE, el cual se ubicará en /var/www/html/carbonioce
# apt-mirror
Recuerda son alrededor de 12GB, paciencia, sobre todo si estas en Cuba, puedes abrir una nueva terminal e ir viendo los cambios en el directorio para ver cuanto ha descargado, esto porque apt-mirror no es muy generoso en este punto y no nos dará información de que paquete está descargando ni por donde va, es un poco invisible el proceso.
# watch -n 2 'ls -RS /var/www/html/carbonioce'
Si ya tienes el mirror descargado, o incluso si quieres ir ahorrando tiempo, vamos a preparar el servidor http Nginx para servir el repositorio.
# apt install nginx
# nano /etc/nginx/sites-available/carbonioce
server {
listen 80;
server_name 192.168.1.15;
root /var/www/html/carbonioce/mirror/repo.zextras.io;
index index.html;
location / {
autoindex on;
}
}
Ajusta lo anterior con la IP de tu servidor Nginx y el directorio donde estará el repositorio, aconsejo que no lo cambies.
# ln -s /etc/nginx/sites-available/carbonioce /etc/nginx/sites-enabled/
# nginx -t
# systemctl restart nginx
Listo, si abres un navegador y accedes a http://192.168.1.15/ te mostrará el repo de Zextras.
Antes de continuar, para asegurarnos de que el repositorio se descargó completamente y no hay paquetes corruptos, lo que haremos será ejecutar el siguiente script, le dejo el código y el descargable, debes ajustarlo a tu escenario:
#!/bin/bash
# Creado por NETWORLD para verificar la integridad de los paquetes del repositorio de Zextras Carbonio CE
# Variables
MIRROR_PATH="/var/www/html/carbonioce/mirror/repo.zextras.io/release/ubuntu"
POOL_PATH="$MIRROR_PATH/pool"
PACKAGES_GZ="$MIRROR_PATH/dists/jammy/main/binary-amd64/Packages.gz"
PACKAGES_FILE="/tmp/Packages"
EXPECTED_SIZES="/tmp/expected_sizes.txt"
FILES_TO_FIX="/tmp/files_to_fix.txt"
# Limpiar archivos temporales previos
rm -f "$PACKAGES_FILE" "$EXPECTED_SIZES" "$FILES_TO_FIX"
echo "Extrayendo lista de paquetes desde Packages.gz..."
zcat "$PACKAGES_GZ" > "$PACKAGES_FILE"
echo "Generando lista de archivos y tamaños esperados..."
grep -E 'Filename|Size' "$PACKAGES_FILE" | awk '{print $2}' | paste - - > "$EXPECTED_SIZES"
# Verificar paquetes y listar los corruptos o faltantes
echo "Verificando integridad de los paquetes en $POOL_PATH..."
while read file size; do
full_path="$MIRROR_PATH/$file"
if [[ -f "$full_path" ]]; then
real_size=$(stat -c %s "$full_path" 2>/dev/null)
if [[ "$real_size" != "$size" ]]; then
echo "Archivo corrupto: $file (Esperado: $size, Encontrado: $real_size)"
echo "$full_path" >> "$FILES_TO_FIX"
fi
else
echo "Archivo faltante: $file"
echo "$full_path" >> "$FILES_TO_FIX"
fi
done < "$EXPECTED_SIZES"
# Mostrar lista de archivos con problemas
if [[ -s "$FILES_TO_FIX" ]]; then
echo "Se encontraron archivos corruptos o faltantes:"
cat "$FILES_TO_FIX"
# Preguntar si desea eliminarlos y repararlos
read -p "¿Deseas eliminar estos archivos y volver a descargarlos? (s/n): " respuesta
if [[ "$respuesta" == "s" || "$respuesta" == "S" ]]; then
echo "Eliminando archivos..."
xargs rm -f < "$FILES_TO_FIX"
echo "Ejecutando apt-mirror para recuperar paquetes faltantes..."
sudo apt-mirror
echo "Proceso completado."
else
echo "No se realizaron cambios. Puedes ejecutar 'sudo apt-mirror' manualmente si lo deseas."
fi
else
echo "No se encontraron archivos corruptos o faltantes."
fi
Ejecutar el script:
# ./verificar_mirror.sh
Ahora ya estamos seguros de que el repositorio está correcto, podemos comenzar a utilizarlo en nuestros servidores con Carbonio CE.
Para configurar nuestro repositorio local en nuestro servidor donde instalaremos o actualizaremos Carbonio CE, seguimos los siguientes pasos, también puede usar el script que les dejo, que hace exactamente lo mismo:
Pasos de forma manual:
Instalar la llave:
# wget -O- "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x5dc7680bc4378c471a7fa80f52fd40243e584a21" | gpg --dearmor | sudo tee /usr/share/keyrings/zextras.gpg > /dev/null
# chmod 644 /usr/share/keyrings/zextras.gpg
Configurar el repositorio:
# nano /etc/apt/sources.list.d/zextras.list
deb [arch=amd64 signed-by=/usr/share/keyrings/zextras.gpg] http://192.168.1.15/release/ubuntu jammy main
Debe modificar la dirección IP por la de su servidor Nginx.
Comprobar:
# apt update
Script para instalar el repositorio de forma automática (debe editar el script y cambiar la dirección IP de su servidor Nginx)
#!/bin/bash
FILE=/etc/apt/sources.list.d/zextras.list
if [ "$EUID" -ne 0 ]
then echo "Por favor ejecute como root"
exit
fi
if [ -f "$FILE" ]; then
echo "$FILE ya existe, quiere actualizarlo? "
read answer
if [ "$answer" != "${answer#[Yy]}" ] ;then
echo "$FILE será actualizado"
else
echo "$FILE no ha sido cambiado"
exit
fi
else
echo "$FILE no existe, se agregará a la lista de repositorios.."
fi
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/zextras.gpg] http://192.168.1.15/release/ubuntu jammy main" > /etc/apt/sources.list.d/zextras.list
wget -O- "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x5dc7680bc4378c471a7fa80f52fd40243e584a21" | gpg --dearmor | sudo tee /usr/share/keyrings/zextras.gpg > /dev/null
chmod 644 /usr/share/keyrings/zextras.gpg
apt update -yq
if [ -f "$FILE" ]; then
echo "Los repositorios locales de Carbonio se han instalado correctamente"
else
echo "fallido"
exit
fi
# ./repo_local.sh
Bien, ahora ya cuentas con tu propio repositorio de Zextras Carbonio CE, ahorra tiempo y recursos, eso si, no olvides actualizar el repositorio al menos una vez al mes, por supuesto puedes configurar una tarea cron, simplemente ejecuta:
# apt-mirror
VIDEO DISPONIBLE PRONTO EN NUESTRO CANAL
Si tiene alguna duda, lo esperamos en nuestro grupo en Telegram.