Red de Espejos Comunitarios de Software Libre sobre IPFS
Infraestructura de distribución soberana, descentralizada y de alta
resiliencia para distribuciones Linux de la familia RPM, operada por la
Fundación MxOS bajo el dominio canónico
mirrors.mx-os.mx.
Propósito y Misión
Históricamente, los usuarios e instituciones en México y Latinoamérica han dependido de espejos universitarios aislados o enlaces transfronterizos hacia redes de entrega de contenido comerciales en Estados Unidos. Esta dependencia genera latencia, costos recurrentes de transferencia y vulnerabilidad ante caídas de enlaces internacionales.
La red de espejos de MxOS replantea la entrega de paquetes utilizando el Sistema de Archivos Interplanetario (IPFS). Al emplear direccionamiento por contenido y distribución entre pares (P2P), el espejo se convierte en una red colaborativa donde cualquier integrante de la comunidad o institución académica puede donar almacenamiento y ancho de banda local, deduplicando transferencias y acelerando descargas dentro de redes locales o nacionales.
Aviso de Fase Experimental
Este proyecto se encuentra actualmente en fase de experimentación activa y prueba de concepto. Operamos bajo una arquitectura de guerrilla diseñada para maximizar la soberanía sin requerir grandes presupuestos de infraestructura:
- La ingesta inicial y el almacenamiento de paquetes residen en estaciones de trabajo y nodos comunitarios locales.
- El gateway público oficial reside en HOBOPS.IO bajo el dominio
ipfs.mx-os.mx, accesible también mediantegateway.ipfs.mx-os.mx; opera estrictamente como un punto de acceso efímero y proxy inverso sin almacenamiento permanente ni pineo. - Convocamos a la comunidad técnica a probar las descargas, reportar anomalías y sumarse como nodos guardianes pioneros para evaluar el rendimiento real de Bitswap en conexiones residenciales y académicas.
Arquitectura y Principios de Operación
El sistema opera sobre cinco pilares técnicos:
- Direccionamiento por contenido inmutable: Cada archivo, paquete RPM y metadato se divide en bloques criptográficos referenciados por su identificador de contenido (CID). Si dos versiones comparten paquetes idénticos, estos se deduplican en el almacenamiento global.
- Distribución entre pares con Bitswap: Al solicitar un paquete, el demonio Kubo lo descarga simultáneamente de todos los nodos guardianes disponibles que lo posean en la red local o internet (puerto 4001 TCP/UDP).
- Puntero canónico con DNSLink: Para evitar lidiar
con hashes cambiantes en cada sincronización, el dominio
mirrors.mx-os.mxcuenta con registros TXT DNSLink (_dnslink.mirrors.mx-os.mx) que apuntan al CID raíz más reciente con una propagación de 300 segundos. - Puente HTTP para compatibilidad universal: Quienes no cuenten con un nodo IPFS pueden consumir el espejo directamente a través de HTTP/HTTPS mediante el terminador web que reenvía peticiones hacia el enjambre.
- Observabilidad y telemetría comunitaria con Vigía: Monitoreo descentralizado en tiempo real (mirrors.mx-os.mx/vigia/) que audita la disponibilidad de cada módulo, la latencia y la distribución territorial de los nodos guardianes sin recolectar telemetría privada de los usuarios.
Vigía: Observabilidad y Cartografía del Enjambre P2P
La salud, redundancia territorial y disponibilidad de los repositorios no es una caja negra: es auditable abiertamente por cualquier integrante de la comunidad en tiempo real mediante el tablero oficial Vigía:
- Acceso web interactivo: mirrors.mx-os.mx/vigia/
- Instantánea de telemetría JSON: https://mirrors.mx-os.mx/vigia/telemetry.json
- Cartografía soberana: Muestra el número de guardianes por módulo (BaseOS, AppStream, Everything, ISOs), ubicación geográfica aproximada y organizaciones de red.
- Directorio de Custodios: Registro abierto donde los operadores de nodos guardianes pueden voluntariamente vincular su identificador de par (PeerID) con su alias, organización o perfil comunitario para recibir reconocimiento público en el enjambre.
Inicio Rápido de Colaboración: Enclavillado de Repositorios
El objetivo fundamental de la red de espejos de MxOS es la soberanía y la resiliencia comunitaria: la infraestructura no depende de servidores centrales, sino del enclavillado (pineo) colaborativo. Cada usuario, institución o laboratorio aloja localmente los repositorios que mejor le parezca y comparte bloques con su red local e internet mediante intercambio entre pares (P2P).
En cuatro pasos directos puedes configurar tu equipo como nodo guardián:
Paso 1: Instalación de Kubo
Kubo se encuentra empaquetado para Fedora y CentOS Stream en el repositorio Copr de MxOS:
# Habilitar repositorio Copr e instalar paquete
sudo dnf copr enable renich/kubo
sudo dnf install kuboPaso 2: Inicialización y servicio systemd
Se recomienda operar Kubo en modo de usuario no privilegiado (rootless):
# Inicializar almacén en ~/.ipfs
ipfs init
# Habilitar e iniciar servicio persistente de usuario
systemctl --user enable --now ipfs.servicePaso 3: Apertura de puerto del enjambre libp2p
Para permitir que otros nodos descarguen bloques desde tu equipo, abre el puerto 4001:
# Abrir puerto de enjambre libp2p (TCP y UDP)
sudo firewall-cmd --permanent --add-port=4001/tcp
sudo firewall-cmd --permanent --add-port=4001/udp
sudo firewall-cmd --reloadPaso 4: Elige y enclavilla tus módulos
No necesitas descargar los cientos de gigabytes del catálogo completo. Selecciona el módulo que mejor se adapte a tu cuota de almacenamiento en disco:
| Módulo | Comando de Enclavillado | Tamaño en Red | Estimado Final |
|---|---|---|---|
| Imágenes ISO (Fedora 43) | ipfs pin add /ipns/mirrors.mx-os.mx/fedora/iso |
1.2G | ~3.5 GB |
| Sistema Base (CentOS Stream 10 BaseOS) | ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/BaseOS |
7.0G | ~15 GB |
| Aplicaciones (CentOS Stream 10 AppStream) | ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/AppStream |
29G | ~45 GB |
| Paquetería Completa (Fedora 43 Everything) | ipfs pin add /ipns/mirrors.mx-os.mx/fedora/releases/43/Everything |
56G | ~110 GB |
| Espejo Maestro Completo (Todas las ramas) | ipfs pin add /ipns/mirrors.mx-os.mx |
93G | ~300 GB |
Para consultar procedimientos de dimensionamiento, políticas de recolección de basura (GC) y administración avanzada de almacenamiento, consulta la Guía Completa para Operadores de Nodos Guardianes en la documentación del repositorio.
Consumo del Espejo desde Clientes DNF
Si además de enclavillar deseas actualizar tus equipos locales consumiendo paquetes desde la red comunitaria, configura DNF de la siguiente manera:
Opción recomendada: Conexión mediante nodo IPFS local
Al contar con Kubo activo en tu equipo (escuchando en
127.0.0.1:8080), los paquetes se descargan por la red P2P.
Si otro equipo en tu misma red local ya descargó una actualización, tu
máquina la obtendrá a la velocidad de la red interna sin salir a
internet.
Para Fedora 43, 44, 45 o Rawhide
Crea el archivo /etc/yum.repos.d/fedora-mxos-ipfs.repo
con privilegios administrativos:
[fedora-mxos-ipfs]
name=Fedora $releasever - $basearch (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/fedora/releases/$releasever/Everything/$basearch/os/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-updates-mxos-ipfs]
name=Fedora $releasever Updates - $basearch (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/fedora/updates/$releasever/$basearch/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearchPara CentOS Stream 10
Crea el archivo
/etc/yum.repos.d/centos-stream-mxos-ipfs.repo:
[cs10-baseos-mxos-ipfs]
name=CentOS Stream 10 - BaseOS (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/10-stream/BaseOS/$basearch/os/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[cs10-appstream-mxos-ipfs]
name=CentOS Stream 10 - AppStream (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/10-stream/AppStream/$basearch/os/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficialOpción estándar: Conexión HTTPS directa
Si tu equipo no ejecuta un demonio IPFS, puedes configurar tus repositorios apuntando directamente al punto de entrada HTTPS:
[fedora-mxos-https]
name=Fedora $releasever - $basearch (MxOS HTTPS)
baseurl=https://mirrors.mx-os.mx/fedora/releases/$releasever/Everything/$basearch/os/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearchEstructura del Catálogo Canónico
El árbol publicado bajo /ipns/mirrors.mx-os.mx respeta
rigurosamente las convenciones de rutas de Fedora y CentOS Stream:
mirrors.mx-os.mx/
├── README.rst <- Documento de bienvenida e instrucciones
├── README.html <- Portal web estilizado con selector de temas
├── guardianes.json <- Directorio comunitario de nodos custodios verificados
├── vigia/ <- Tablero de telemetría y cartografía P2P
│ ├── index.html <- Aplicación web autocontenida
│ └── telemetry.json <- Instantánea JSON de nodos guardianes
├── fedora/
│ ├── iso/ <- Imágenes de instalación de Fedora
│ ├── releases/ <- Árbol Everything por versión y arquitectura
│ └── updates/ <- Repositorios de actualizaciones continuas
└── centos-stream/
├── iso/ <- Medios de instalación de CentOS Stream
└── 10-stream/
├── BaseOS/ <- Paquetes base y núcleo del sistema
├── AppStream/ <- Módulos y aplicaciones adicionales
└── CRB/ <- CodeReady Linux Builder
Identificación y Reconocimiento de Nodos Guardianes
La participación en el enjambre es voluntaria, descentralizada y respetuosa de la privacidad por diseño. No existe registro forzoso ni telemetría invasiva:
- Identidad criptográfica nativa (PeerID): Todo nodo
que ejecuta Kubo cuenta con un identificador único e infalsificable
derivado de su par de llaves Ed25519 (por ejemplo,
12D3KooWBVZfAQ...). Al compartir bloques en la DHT, el nodo se anuncia públicamente con este hash. - Reconocimiento territorial pasivo con GeoIP y ASN: Vigía inspecciona la dirección IP pública del nodo contra la base de datos MaxMind GeoLite2 ASN, atribuyendo automáticamente la organización de la red o proveedor institucional; por ejemplo, redes universitarias, HOBOPS.IO para gateways o proveedores residenciales.
- Registro voluntario en el Directorio de Custodios:
Quienes deseen asociar su nodo con su identidad pública, alias,
institución o sitio web pueden solicitar su inclusión en
guardianes.jsonmediante un Merge Request al repositorio de Git:- Alias o distintivo: Ejemplo:
@tu_usuariooudg-sistemas. - Nombre completo o entidad: Nombre formal del custodio o institución.
- Organización: Colectivo, empresa o universidad; por
ejemplo,
EVALinuxoFundación MxOS. - Ubicación: Ciudad, estado y país en texto canónico;
por ejemplo,
Ixtlahuacán de los Membrillos, Jalisco, México; sin abreviaturas. - Sitio web: Dominio o portal verificado; por
ejemplo,
https://evalinux.comohttps://ipfs.mx-os.mx. - Insignia honorífica: Distintivo en el tablero de Vigía; por ejemplo, Guardián Pionero, Espejo Académico o Gateway Oficial.
- Alias o distintivo: Ejemplo:
Procedimiento para Registrarte en el Directorio
Para añadir tu nodo al archivo guardianes.json y
aparecer formalmente en el radar de Vigía, sigue estos pasos:
Obtén el identificador PeerID de tu nodo:
ipfs id -f="<id>\n"Asegúrate de estar compartiendo al menos un módulo o el catálogo:
ipfs pin add /ipns/mirrors.mx-os.mx/fedora/isoEdita el archivo ``guardianes.json`` en tu copia del repositorio: Agrega una entrada dentro del objeto
"guardianes"utilizando tu PeerID como clave:"12D3KooWBVZfAQyPExhScDpiG4Hahh3e6QmwRZRVopib1ThgUo2g": { "alias": "renich", "nombre": "Rénich Bon Ćirić", "organizacion": "EVALinux", "ubicacion": "Ixtlahuacán de los Membrillos, Jalisco, México", "sitio": "https://evalinux.com", "contacto": "renich@evalinux.com", "rol": "guardian", "insignia": "🛡️ Guardián Pionero", "verificacion": "gitlab" }Reglas para el registro:
- Utiliza el nombre completo del estado (por ejemplo,
JaliscooQuerétaro; nunca abreviado). - Evita espacios alrededor de diagonales; utiliza redacción directa con comas o conjunciones.
- Proporciona un enlace HTTPS funcional en el campo
sitio.
- Utiliza el nombre completo del estado (por ejemplo,
Envía tu solicitud: Crea una rama con tu cambio y abre un Merge Request en nuestro repositorio de Git (git.mx-os.mx/MxOS/mirrors o gitlab.com/mxos/mirrors). Una vez aprobado, tu nodo aparecerá automáticamente vinculado en vigia.mx-os.mx y en el espejo comunitario.
Seguridad e Integridad Criptográfica
La seguridad en la red de espejos descansa en dos barreras independientes e infranqueables:
- Integridad de bloques: La naturaleza direccionada por contenido de IPFS garantiza que ningún bit pueda alterarse en tránsito; si un bloque difiere de su hash, el cliente lo descarta automáticamente.
- Firmas GPG oficiales: El gestor DNF valida cada RPM
contra la llave pública oficial del proyecto correspondiente (ubicada en
/etc/pki/rpm-gpg/). Ni los operadores de nodos ni atacantes intermedios pueden inyectar código no firmado. - Identidad soberana Ed25519 (IPNS): El catálogo se
firma con la llave criptográfica dedicada
mxos-mirrors(k51qzi5uqu5di6ed3qtnwrdlvpmfil07ib6qfzb1t259nux49jenn8my4dtg0v), permitiendo la verificación independiente de DNS mediante la ruta/ipns/k51qzi5uqu5di6ed3qtnwrdlvpmfil07ib6qfzb1t259nux49jenn8my4dtg0v.
Herramientas y Automatización en este Repositorio
Este repositorio contiene los scripts de gestión y automatización de la infraestructura:
- bin/mxos-mirror-sync.bash: Sincronización diferencial upstream mediante rsync preservando metadatos.
- bin/mxos-mirror-ingest.bash:
Ingesta UnixFS en Kubo con soporte de filestore
(
--nocopy). - bin/mxos-ipns-publish.bash: Firma y publicación en IPNS con la llave Ed25519 del proyecto.
- bin/mxos-key-backup.bash: Exportación, respaldo cifrado (age/gpg) y restauración de la llave Ed25519.
- bin/mxos-dnslink-update.bash: Actualización desatendida del registro DNSLink en Cloudflare mediante API REST.
- bin/mxos-mirror.bash: Orquestador integral del ciclo completo (sincronizar, ingerir, firmar y publicar).
- vigia/: Colector de telemetría P2P en Crystal y tablero web de observabilidad (repositorio en git.mx-os.mx).
- etc/caddy/Caddyfile: Plantilla de proxy inverso para Caddy.
- etc/nginx/mirrors.mx-os.mx.conf: Plantilla de configuración para Nginx.
- systemd/: Unidades de servicio y temporizadores de systemd para tareas programadas.
Documentación Técnica Detallada
Para profundizar en las especificaciones y manuales, consulta el directorio docs/:
- docs/index.rst: Índice general de la documentación.
- docs/business/spec.rst: Modelo estratégico, justificación e incentivos comunitarios.
- docs/functional/spec.rst: Especificación de catálogo modular, pineo y telemetría pasiva.
- docs/technical/spec.rst: Arquitectura de red, resolución DNSLink y puente MirrorManager.
- docs/guides/index.rst: Manuales paso a paso para operadores, clientes y replicación autónoma.
- docs/project/roadmap.rst: Fases de ejecución y seguimiento del proyecto.
Canales de Comunidad y Contacto
- Canal oficial de Telegram: @mx_os_mx
- Sitio web: mx-os.mx
- Repositorios de código: git.mx-os.mx
Licenciamiento
Este proyecto opera bajo un modelo de licenciamiento libre y comunitario:
- Documentación y especificaciones: Licenciadas bajo GNU Free Documentation License v1.3 o posterior (GNU FDL v1.3+) sin secciones invariantes, sin textos de portada y sin textos de contraportada, en modelo dual con Creative Commons Atribución-CompartirIgual 4.0 Internacional (CC-BY-SA-4.0).
- Herramientas, scripts y configuraciones: Licenciadas bajo la Licencia Pública General de GNU v3.0 o posterior (GNU GPLv3+).