Saltar al contenido principal

Repositorio APT y Distribución de Paquetes

Descripció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 precompilados 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 personalizados (omnihss, omnimme, etc.)/dists/<distro>/
Herramientas de 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 precompilados (Prometheus, Grafana, Homer, etc.)/releases/<org>/<repo>/
Tarballs de FuenteArchivos fuente 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 y todo lo demás se deriva de él: no configuras la URL de descarga de binarios, el esquema, el puerto o las 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 coinciden 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, por lo que remote_apt_* se utiliza para describir el servidor Omnitouch upstream del que se sincroniza (ver Opción 2).

Esquema y puerto

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

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

Cuándo se utiliza cada modo

EscenarioLínea de origen APTDescargas binarias (apt_download_base)
use_apt_cache: true (caché)http://<cache>:8080/... — sin autenticaciónhttp://<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. Configuración de descarga de binarios (remote_apt_*) y
# la URL apt_download_base se derivan de esto automáticamente — NO
# los 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; predeterminado a 443 (HTTPS)

Parámetros

Fuentes de Paquetes APT (apt_repo)

ParámetroTipoRequeridoPredeterminadoDescripción
apt_repo.apt_serverCadena-Nombre de host o dirección IP del servidor APT
apt_repo.apt_repo_usernameCadena-Nombre de usuario de autenticación básica HTTP
apt_repo.apt_repo_passwordCadena-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_*)

Derivadas automáticamente de apt_repo — no configures estas 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 deRespaldo
remote_apt_serverapt_repo.apt_serverapt.us-fl.omnitou.ch
remote_apt_portapt_repo.apt_repo_port443
remote_apt_protocolpuerto (443https)https
remote_apt_userapt_repo.apt_repo_username""
remote_apt_passwordapt_repo.apt_repo_password""

General

ParámetroTipoRequeridoPredeterminadoDescripción
use_apt_cacheBooleano-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 get_url de Ansible):

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 para HTTPS). Un puerto no estándar se añade 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 limitaciones de ancho de banda, 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 se sincroniza la caché:

apt_cache_servers:
hosts:
customer-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 configura 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 las 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_serverCadenaAuto-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 llegar al 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_serverCadena-Servidor APT Omnitouch upstream desde el que sincronizar
remote_apt_portEnteroNo443Puerto del servidor APT Omnitouch upstream
remote_apt_protocolCadenaNohttpsProtocolo para la conexión de sincronización
remote_apt_userCadena-Credenciales para sincronizar desde Omnitouch
remote_apt_passwordCadena-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

No se requieren credenciales para el acceso a la caché: utiliza la configuración APT [trusted=yes].

Implementación de 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/ para Omnitouch y 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"

Lo que 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_reporemote_apt_* se derivan de él.

all:
vars:
use_apt_cache: false

# Única fuente de verdad tanto para las fuentes APT como para 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://usuario:contraseña@apt.<region>.omnitou.ch/
  • Todos los demás hosts: Generan 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

# Apuntar 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 # La caché normalmente se ejecuta en el puerto 8080

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

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


Ejemplo Completo

Aquí hay un ejemplo completo que muestra la configuración del servidor de caché con múltiples hosts de aplicación:

# Grupo del Servidor de Caché APT
apt_cache_servers:
hosts:
customer-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: "usuario-cliente"
remote_apt_password: "token-seguro-cliente"

# 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 existe apt_cache_servers)
# - apt_repo.apt_server: "10.179.1.114" (auto-derivado del servidor de caché)

Lo que sucede durante la implementación:

  1. Servidor de caché (10.179.1.114):

    • Utiliza remote_apt_* de su sección vars:
    • Descarga todos los paquetes desde https://usuario-cliente:token-seguro-cliente@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):

    • Detectan automáticamente que existe el grupo apt_cache_servers
    • Establecen automáticamente use_apt_cache: true
    • Derivan automáticamente apt_repo.apt_server: "10.179.1.114"
    • Generan: deb [trusted=yes] http://10.179.1.114:8080/noble noble main
    • Obtienen 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 incrementalmente todo el contenido desde el servidor APT de Omnitouch:

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

Las re-sincronizaciones son incrementales: los paquetes APT se comparan con el índice de 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 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:

Error al obtener https://10.179.1.115/noble/dists/noble/main/binary-amd64/Packages  401  No Autorizado

Causas posibles:

  • La 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 a la caché
  • apt_repo_username o apt_repo_password incorrectos
  • IP de origen no en la lista blanca en el servidor APT de Omnitouch
  • Usar 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://usuario:contraseña@10.179.1.115/noble noble main
  4. Verifica que las credenciales sean correctas para tu modo de implementación
  5. Confirma que tu IP pública esté en la lista blanca con Omnitouch (si usas acceso directo)

Las Descargas Binarias Fallan (Node Exporter, Zabbix, etc.)

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

Causas posibles:

  • 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/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 esperados (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

Causas posibles:

  • 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 de Omnitouch upstream en el puerto 443
  2. Verifica las credenciales remote_apt_*
  3. Revisa las reglas del firewall para el acceso saliente

Documentación Relacionada