Repositorio local de Zextras Carbonio CE

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio