Saltar al contenido principal

Repositorio APT y Distribución de Paquetes

Visión General​

El sistema APT de Omnitouch proporciona distribución de paquetes para todas las implementaciones. Se sirven dos tipos de contenido:

  1. Paquetes APT: paquetes de Debian instalados a través de apt install
  2. Lanzamientos Binarios: binarios preconstruidos descargados directamente (exportadores de Prometheus, agentes, etc.)

La página de paquetes en el servidor APT también incluye una pestaña de Auto-configuración (OmniCore), que proporciona el paquete omnicore (servido en /pool/main/o/omnicore/) que contiene el conjunto completo de herramientas de automatización de Ansible para clientes que desean implementar y gestionar su red por sí mismos.

Se admiten dos modelos de implementación:

  1. Acceso Directo: las máquinas virtuales obtienen paquetes directamente del servidor APT de Omnitouch (por ejemplo, apt.<region>.omnitou.ch)
  2. Espejo de Caché Local: un servidor local se sincroniza desde Omnitouch y sirve paquetes a las máquinas virtuales (para implementaciones fuera de línea/aisladas)

Arquitectura​

Contenido Servido​

El servidor APT alberga todo el contenido requerido para las implementaciones:

Tipo de ContenidoDescripciónRuta
Paquetes de OmnitouchPaquetes .deb construidos a medida (omnihss, omnimme, etc.)/dists/<distro>/
Kit de Herramientas OmniCoreEl paquete omnicore: automatización completa de Ansible (roles, playbooks, deps) para implementación de autoservicio/pool/main/o/omnicore/
Paquetes de UbuntuPaquetes de Ubuntu en caché con todas las dependencias/<distro>/pool/main/
Lanzamientos de GitHubBinarios preconstruidos (Prometheus, Grafana, VoIPmonitor, etc.)/releases/<org>/<repo>/
Tarballs de FuenteArchivos de origen para aplicaciones web (CGrateS_UI, speedtest)/repos/
Paquetes de TercerosGalera, FRR, InfluxDB, KeyDB, etc./releases/<vendor>/

Variables de Configuración​

apt_repo es la única fuente de verdad para la distribución de paquetes. Defínelo una vez en tu inventario. Todo lo demás se deriva de él. No configuras la URL de descarga binaria, esquema, puerto o credenciales por separado.

Cómo funciona la derivación​

VariableDonde se estableceRol
apt_repoTu inventarioEl único bloque que configuras. Se plantilla directamente en la línea de origen APT.
remote_apt_*roles/common/defaults/main.ymlDerivado de apt_repo. Último recurso cuando apt_repo está ausente: apt.us-fl.omnitou.ch / 443 / https.
apt_download_baseroles/common/tasks/facts.ymlURL base única calculada que cada rol utiliza para descargas binarias, por lo que la línea de origen APT y las descargas binarias siempre concuerdan en host, esquema, puerto y credenciales.

Debido a que ambos valores derivados se construyen a partir del mismo bloque apt_repo, un inventario normal solo necesita apt_repo. No configuras remote_apt_* tú mismo.

Excepción: el servidor espejo de caché. Un host en el grupo apt_cache_servers es el único lugar donde remote_apt_* todavía se establece explícitamente. Su propio apt_repo apunta a la caché local. Los valores remote_apt_* describen entonces el servidor Omnitouch upstream del que se sincroniza (ver Opción 2).

Esquema y puerto​

El esquema sigue automáticamente el puerto: puerto 443 → https, cualquier otro puerto → http. Cuando se omite apt_repo.apt_repo_port:

  • Acceso directo por defecto a 443 (HTTPS)
  • Modo de caché por defecto a 8080 (HTTP)

Cuándo se usa cada modo​

EscenarioLínea de origen APTDescargas binarias (apt_download_base)
use_apt_cache: true (caché)http://<cache>:8080/... (sin autenticación)http://<cache>:8080/... (sin autenticación)
use_apt_cache: false (directo)https://<user>:<pass>@<server>/...https://<user>:<pass>@<server>:443/...

Opción 1: Acceso Directo​

Para implementaciones con conectividad a Internet, las máquinas virtuales obtienen paquetes directamente del servidor APT de Omnitouch.

Requisitos de Red​

Lista Blanca de IP de Origen: Tu dirección IP pública debe estar en la lista blanca en el servidor APT de Omnitouch. Durante la configuración, proporciona tus subredes de origen a Omnitouch. A cambio, recibirás:

  • Nombre de usuario y contraseña para la autenticación básica HTTP
  • FQDN para el servidor APT (por ejemplo, apt.<region>.omnitou.ch)

Requisitos de Firewall: Se debe permitir el acceso saliente a los siguientes rangos de IP de Omnitouch:

RedRango
IPv4144.79.167.0/24
IPv4160.22.43.0/24
IPv62001:df3:dec0::/48
ASNAS152894

Servicios que requieren acceso a la infraestructura de Omnitouch:

ServicioPuertoProtocoloPropósito
Servidor APT443TCPDescargas de paquetes (HTTPS)
Servidor APT53TCP/UDPResolución DNS para el FQDN de APT
Servidor de Licencias123UDPSincronización de tiempo NTP para validación de licencias
Servidor de Licencias53TCP/UDPResolución DNS para validación de licencias

Asegúrate de que el tráfico HTTPS (TCP/443), NTP (UDP/123) y DNS (TCP+UDP/53) esté permitido a los rangos de IP de Omnitouch.

Configuración​

all:
vars:
use_apt_cache: false

# Única fuente de verdad. La configuración de descarga binaria (remote_apt_*) y
# la URL apt_download_base se derivan de esto automáticamente - NO
# las configuras por separado.
apt_repo:
apt_server: "apt.<region>.omnitou.ch" # FQDN proporcionado por Omnitouch
apt_repo_username: "tu-usuario"
apt_repo_password: "tu-contraseña"
# apt_repo_port: 443 # opcional; por defecto a 443 (HTTPS)

Parámetros​

Fuentes de Paquetes APT (apt_repo)​

ParámetroTipoRequeridoPredeterminadoDescripción
apt_repo.apt_serverCadenaSí-Nombre de host o dirección IP del servidor APT
apt_repo.apt_repo_usernameCadenaSí-Nombre de usuario de autenticación básica HTTP
apt_repo.apt_repo_passwordCadenaSí-Contraseña de autenticación básica HTTP
apt_repo.apt_repo_portEnteroNo443Puerto del servidor. El esquema sigue al puerto (443 → HTTPS, de lo contrario HTTP).

Descargas Binarias (remote_apt_*)​

Estos se derivan automáticamente de apt_repo. No los configures en un inventario de acceso directo. Existen solo para que el servidor espejo de caché pueda apuntar a un upstream diferente (ver Opción 2). Para referencia, se predeterminan de la siguiente manera:

ParámetroDerivado deRecaída
remote_apt_serverapt_repo.apt_serverapt.us-fl.omnitou.ch
remote_apt_portapt_repo.apt_repo_port443
remote_apt_protocolpuerto (443 → https)https
remote_apt_userapt_repo.apt_repo_username""
remote_apt_passwordapt_repo.apt_repo_password""

General​

ParámetroTipoRequeridoPredeterminadoDescripción
use_apt_cacheBooleanoSí-Debe ser false para acceso directo

Patrones de URL (Acceso Directo)​

Fuentes de Paquetes APT (configuradas en /etc/apt/sources.list.d/omnitouch.list):

deb [trusted=yes] https://{username}:{password}@{apt_server}/ noble main

Descargas Binarias (construidas a partir de apt_download_base por tareas de Ansible get_url):

https://{username}:{password}@{apt_server}/releases/prometheus/node_exporter/node_exporter-1.8.1.linux-amd64.tar.gz

El puerto 443 se omite de la URL (es el predeterminado de HTTPS). Un puerto no estándar se agrega como :<port> y cambia el esquema a HTTP a menos que sea 443.

Cómo Funciona​

Las máquinas virtuales se autentican con autenticación básica HTTP tanto para paquetes APT como para descargas binarias. Los paquetes del sistema Ubuntu también se sirven desde el servidor Omnitouch (pre-caché), por lo que las máquinas virtuales no necesitan acceso a los espejos de Ubuntu.

Firma de Paquetes (GPG)​

El servidor APT de Omnitouch genera una clave de firma de repositorio y sirve la clave pública encriptada en /omnitouch.gpg. Para los hosts de acceso directo, el rol common obtiene automáticamente esa clave e instala en /etc/apt/trusted.gpg.d/omnitouch.gpg para que apt-get update verifique los metadatos del repositorio sin advertencias de NO_PUBKEY. Esto sucede automáticamente; no se requiere gestión manual de claves.

El modo de espejo de caché no utiliza verificación GPG. Los hosts que obtienen de una caché local utilizan [trusted=yes] en su lugar (ver Opción 2).


Opción 2: Espejo de Caché Local​

Para implementaciones fuera de línea, aisladas o con ancho de banda limitado, implementa una caché APT local que sincroniza todo el contenido desde Omnitouch.

Arquitectura​

Configuración​

Define el servidor de caché en tu archivo de hosts. Es el único lugar donde remote_apt_* se establece explícitamente. Esas variables describen el servidor Omnitouch upstream del que la caché se sincroniza:

apt_cache_servers:
hosts:
example-apt-cache:
ansible_host: 192.168.1.100
gateway: 192.168.1.1
vars:
# El servidor de caché sincroniza contenido DESDE el repositorio Omnitouch upstream
remote_apt_server: "apt.<region>.omnitou.ch"
remote_apt_port: 443
remote_apt_protocol: "https"
remote_apt_user: "tu-usuario"
remote_apt_password: "tu-contraseña"

all:
vars:
# use_apt_cache: true # Se establece automáticamente cuando existe el grupo apt_cache_servers
# apt_repo.apt_server: auto-derivado a 192.168.1.100 (primer servidor de caché)

Cómo funciona:

  • Servidor de caché (192.168.1.100): Utiliza credenciales remote_apt_* para sincronizar contenido desde el servidor Omnitouch upstream a través de HTTPS.
  • Todos los demás hosts: Derivan automáticamente apt_repo.apt_server: "192.168.1.100" y obtienen de la caché en el puerto 8080 sin credenciales.

Parámetros​

Fuentes de Paquetes APT (apt_repo)​

ParámetroTipoRequeridoPredeterminadoDescripción
apt_repo.apt_serverCadenaSíAuto-derivadoIP del servidor de caché local. Derivado automáticamente del primer host apt_cache_servers si no se especifica.
apt_repo.apt_repo_usernameCadenaNo-No requerido al usar caché (no se necesita autenticación)
apt_repo.apt_repo_passwordCadenaNo-No requerido al usar caché (no se necesita autenticación)
apt_repo.apt_repo_portEnteroNo8080Puerto que los hosts utilizan para alcanzar el servidor de caché local. (Reemplaza el apt_cache_port obsoleto).

Sincronización del Servidor de Caché (remote_apt_*)​

Estas variables configuran cómo el servidor de caché sincroniza contenido desde Omnitouch. Este es el único escenario donde remote_apt_* se establece manualmente:

ParámetroTipoRequeridoPredeterminadoDescripción
remote_apt_serverCadenaSí-Servidor APT Omnitouch upstream desde el cual sincronizar
remote_apt_portEnteroNo443Puerto del servidor APT Omnitouch upstream
remote_apt_protocolCadenaNohttpsProtocolo para la conexión de sincronización
remote_apt_userCadenaSí-Credenciales para sincronizar desde Omnitouch
remote_apt_passwordCadenaSí-Credenciales para sincronizar desde Omnitouch

General​

ParámetroTipoRequeridoPredeterminadoDescripción
use_apt_cacheBooleanoNotrueSe establece automáticamente en true cuando existe el grupo apt_cache_servers

Obsoleto: apt_cache_port ya no se utiliza. El puerto al que se conectan los hosts ahora se establece a través de apt_repo.apt_repo_port (predeterminado a 8080 cuando se omite).

Patrones de URL (Modo Caché)​

Fuentes de Paquetes APT (configuradas en /etc/apt/sources.list.d/omnitouch.list):

deb [trusted=yes] http://192.168.1.100:8080/noble noble main

Descargas Binarias (construidas a partir de apt_download_base):

http://192.168.1.100:8080/releases/prometheus/node_exporter/node_exporter-1.8.1.linux-amd64.tar.gz

El acceso a la caché no necesita credenciales. Utiliza la configuración APT [trusted=yes].

Desplegando la Caché​

  1. Provisión del servidor de caché (VM o contenedor LXC con disco de 50+ GB)

  2. Ejecuta el playbook de configuración de caché:

    ansible-playbook -i hosts/customer/production.yml services/apt_cache.yml
  3. Verifica la caché navegando a http://192.168.1.100:8080/

Qué se Sincroniza​

El espejo de caché sincroniza todo el contenido desde el servidor APT de Omnitouch. El mecanismo difiere según el tipo de contenido:

  • Paquetes APT (/dists/ + /pool/ tanto para Omnitouch como para Ubuntu) se sincronizan con curl impulsado por el índice del repositorio de Debian. El espejo obtiene el archivo Release upstream (y se salta si no ha cambiado), analiza Packages.gz para el nombre de archivo/SHA256/tamaño autoritativo de cada paquete, y descarga solo archivos que faltan o cuyo SHA256 no coincide con la copia local. Cada archivo descargado se verifica con SHA256 antes de ser comprometido.
  • Lanzamientos binarios y tarballs de fuente (/releases/, /repos/) no tienen índice al estilo de Debian, por lo que recurren a wget --recursive --timestamping, que solo vuelve a descargar archivos con un Last-Modified upstream más reciente.

Directorios de contenido sincronizados:

RutaContenido
/dists/<distro>/Metadatos del repositorio APT (archivos Packages, Release)
/pool/main/Paquetes .deb personalizados de Omnitouch
/<distro>/pool/main/Paquetes de Ubuntu y todas las dependencias
/releases/Lanzamientos de GitHub (Prometheus, Grafana, Zabbix, etc.)
/repos/Tarballs de fuente (Erlang, Elixir, CGrateS_UI, etc.)

Después de la sincronización inicial, la caché puede servir todos los paquetes sin conectividad a Internet.

Cómo Funciona​

El espejo de caché se autentica con autenticación básica HTTP para todo el contenido. Los paquetes APT se sincronizan con curl contra el índice del repositorio de Debian (Release + Packages.gz), descargando solo archivos cuyo SHA256 difiere de la copia local y verificando cada uno después de la descarga; /releases/ y /repos/ recurren a wget --recursive --timestamping. De cualquier manera, las sincronizaciones posteriores solo obtienen archivos nuevos o cambiados.


Configuración Automática​

Cuando existe un grupo apt_cache_servers en tu inventario, el sistema automáticamente:

  1. Establece use_apt_cache: true para todos los hosts (a menos que se anule explícitamente)
  2. Deriva apt_repo.apt_server de la IP ansible_host del primer servidor de caché

Ejemplo de Configuración Mínima​

apt_cache_servers:
hosts:
apt-cache-01:
ansible_host: 192.168.1.100
gateway: 192.168.1.1
vars:
# El servidor de caché sincroniza contenido desde el repositorio Omnitouch upstream
remote_apt_server: "apt.<region>.omnitou.ch"
remote_apt_user: "tu-usuario"
remote_apt_password: "tu-contraseña"

Qué sucede automáticamente:

  • Todos los hosts (excepto el servidor de caché) obtienen use_apt_cache: true
  • Todos los hosts (excepto el servidor de caché) obtienen apt_repo.apt_server: "192.168.1.100"
  • Todos los hosts obtienen de http://192.168.1.100:8080/ sin credenciales
  • El servidor de caché sincroniza paquetes desde https://tu-usuario:tu-contraseña@apt.<region>.omnitou.ch/

Anular el Comportamiento Automático​

Para forzar el acceso directo incluso con servidores de caché definidos:

all:
vars:
use_apt_cache: false # Forzar acceso directo incluso con servidores de caché definidos

apt_repo:
apt_server: "apt.<region>.omnitou.ch"
apt_repo_username: "usuario"
apt_repo_password: "contraseña"

Resumen de Configuración​

Escenario 1: Acceso Directo al Servidor APT (Sin Caché)​

Todos los hosts obtienen paquetes directamente del servidor del repositorio APT. Solo se necesita apt_repo. Los valores remote_apt_* se derivan de él.

all:
vars:
use_apt_cache: false

# Única fuente de verdad para tanto las fuentes APT como las descargas binarias
apt_repo:
apt_server: "apt.<region>.omnitou.ch"
apt_repo_username: "usuario"
apt_repo_password: "contraseña"

Resultado: Todos los hosts generan deb [trusted=yes] https://usuario:contraseña@apt.<region>.omnitou.ch/ noble main


Escenario 2: Servidor de Caché APT Definido en el Archivo de Hosts (Automático)​

El servidor de caché está en tu inventario y será desplegado/sincronizado por Ansible.

apt_cache_servers:
hosts:
cache-server:
ansible_host: 192.168.1.100
gateway: 192.168.1.1
vars:
# El servidor de caché sincroniza paquetes desde el repositorio autenticado upstream
remote_apt_server: "apt.<region>.omnitou.ch"
remote_apt_port: 443
remote_apt_protocol: "https"
remote_apt_user: "usuario"
remote_apt_password: "contraseña"

# No se necesita configuración en all: vars:
# Todo se deriva automáticamente del grupo apt_cache_servers

Resultado:

  • Servidor de caché: Sincroniza desde https://user:pass@apt.<region>.omnitou.ch/
  • Todos los demás hosts: Genera deb [trusted=yes] http://192.168.1.100:8080/noble noble main (sin credenciales)

Escenario 3: Caché APT Remota NO en el Archivo de Hosts (Manual)​

El servidor de caché existe en otro lugar y ya está configurado (no gestionado por tu Ansible).

all:
vars:
use_apt_cache: true

# Apunta todos los hosts al servidor de caché externo
apt_repo:
apt_server: "192.168.1.100" # IP del servidor de caché externo
apt_repo_port: 8080 # El caché normalmente se ejecuta en el puerto 8080

# No se necesita grupo apt_cache_servers
# No se necesita remote_apt_* (el caché ya está configurado externamente)

Resultado: Todos los hosts generan deb [trusted=yes] http://192.168.1.100:8080/noble noble main (sin credenciales)


Ejemplo Completo​

Este es un ejemplo completo y funcional. Muestra la configuración del servidor de caché con múltiples hosts de aplicación:

# Grupo de Servidores de Caché APT
apt_cache_servers:
hosts:
example-apt-cache:
ansible_host: 10.179.1.114
gateway: 10.179.1.1
host_vm_network: "vmbr0"
num_cpus: 4
memory_mb: 16384
proxmoxLxcDiskSizeGb: 120
vars:
# El servidor de caché sincroniza paquetes desde el repositorio autenticado upstream
remote_apt_server: "apt.<region>.omnitou.ch"
remote_apt_port: 443
remote_apt_protocol: "https"
remote_apt_user: "customer-username"
remote_apt_password: "customer-secure-token"

# Servidores de Aplicación
hss:
hosts:
customer-hss01:
ansible_host: 10.179.2.140
gateway: 10.179.2.1

mme:
hosts:
customer-mme01:
ansible_host: 10.179.1.15
gateway: 10.179.1.1

dns:
hosts:
customer-dns01:
ansible_host: 10.179.2.177
gateway: 10.179.2.1

# Configuración Global
all:
vars:
# Auto-configuración (no se necesita configuración manual):
# - use_apt_cache: true (auto-habilitado cuando existen apt_cache_servers)
# - apt_repo.apt_server: "10.179.1.114" (auto-derivado del servidor de caché)

Qué sucede durante el despliegue:

  1. Servidor de caché (10.179.1.114):

    • Utiliza remote_apt_* de su sección vars:
    • Descarga todos los paquetes desde https://customer-username:customer-secure-token@apt.<region>.omnitou.ch/
    • Sirve paquetes en el puerto 8080 a través de nginx
  2. Hosts de aplicación (customer-hss01, customer-mme01, customer-dns01):

    • Detecta automáticamente que existe el grupo apt_cache_servers
    • Establece automáticamente use_apt_cache: true
    • Deriva automáticamente apt_repo.apt_server: "10.179.1.114"
    • Genera: deb [trusted=yes] http://10.179.1.114:8080/noble noble main
    • Obtiene todos los paquetes del servidor de caché (sin credenciales requeridas)

Actualizando la Caché​

Para sincronizar nuevos paquetes o actualizaciones:

ansible-playbook -i hosts/customer/production.yml services/apt_cache.yml

Esto sincroniza de manera incremental todo el contenido desde el servidor APT de Omnitouch:

  • Nuevas versiones de paquetes de Omnitouch
  • Nuevos paquetes y dependencias de Ubuntu
  • Nuevos lanzamientos de GitHub
  • Tarballs de origen actualizados

Las re-sincronizaciones son incrementales: los paquetes APT se comparan con el índice Debian upstream por SHA256 (y se omiten por completo si el archivo Release upstream no ha cambiado), mientras que /releases/ y /repos/ utilizan wget --timestamping. Los archivos existentes que no han cambiado se omiten, haciendo que la re-sincronización sea rápida.

Nota: El servidor APT de Omnitouch es la única fuente de verdad para todos los paquetes. Omnitouch construye y publica paquetes en él; ejecutar services/apt_cache.yml en los espejos de caché luego sincroniza lo que actualmente está publicado.


Solución de Problemas​

La Actualización de APT Falla con 401 No Autorizado​

Síntomas:

Failed to fetch https://10.179.1.115/noble/dists/noble/main/binary-amd64/Packages  401  Unauthorized

Posibles causas:

  • Configuración de apt_repo definida en all: vars: en lugar de apt_cache_servers: vars:
  • Hosts intentando acceder al repositorio autenticado directamente en lugar de al caché
  • apt_repo_username o apt_repo_password incorrectos
  • IP de origen no permitida en el servidor APT de Omnitouch
  • Usando credenciales de caché para acceso directo o viceversa

Resolución:

  1. Verifica el alcance de la configuración: Asegúrate de que apt_repo con credenciales esté definido en apt_cache_servers: vars:, NO en all: vars:
  2. Verifica el modo de caché: Al usar caché, los hosts deben conectarse al servidor de caché (puerto 8080), no al repositorio upstream
  3. Verifica las fuentes generadas: En el host que falla, verifica /etc/apt/sources.list.d/omnitouch.list
    • Correcto (modo caché): deb [trusted=yes] http://10.179.1.114:8080/noble noble main
    • Incorrecto (tiene credenciales en el lugar incorrecto): deb [trusted=yes] https://user:pass@10.179.1.115/noble noble main
  4. Verifica que las credenciales sean correctas para tu modo de despliegue
  5. Confirma que tu IP pública esté permitida con Omnitouch (si usas acceso directo)

Fallos en Descargas Binarias (Node Exporter, Zabbix, etc.)​

Síntomas: El playbook de Ansible falla al descargar archivos de la ruta /releases/

Posibles causas:

  • Credenciales de apt_repo incorrectas (las descargas binarias derivan su autenticación de apt_repo en modo directo)
  • En un servidor espejo de caché, remote_apt_user / remote_apt_password incorrectos
  • Esquema o puerto incorrectos. Recuerda que el puerto 443 implica HTTPS y cualquier otro puerto implica HTTP.

Resolución:

  1. En modo directo, verifica que apt_repo.apt_repo_username / apt_repo.apt_repo_password coincidan con los proporcionados por Omnitouch
  2. En un servidor espejo de caché, verifica las credenciales remote_apt_* upstream
  3. Confirma que el apt_download_base derivado utilice el host/esquema/puerto esperado (verifica con ansible-playbook ... -vvv o inspeccionando la tarea get_url que falla)

El Servidor de Caché No Puede Sincronizar​

Síntomas: El playbook del servidor de caché falla al descargar paquetes

Posibles causas:

  • El servidor de caché no tiene acceso a internet
  • Credenciales remote_apt_* incorrectas
  • Firewall bloqueando conexiones salientes a Omnitouch

Resolución:

  1. Verifica que el servidor de caché pueda alcanzar el servidor APT upstream de Omnitouch en el puerto 443
  2. Verifica las credenciales remote_apt_*
  3. Revisa las reglas del firewall para el acceso saliente

Documentación Relacionada​