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:

Servicios y Dominios Públicos: ipfs.mx-os.mx y mirrors.mx-os.mx ============================================================== Fundación MxOS opera dos servicios web públicos con responsabilidades y alcances claramente delimitados:

Úsanos de gateway de IPFS: ipfs.mx-os.mx

El dominio ipfs.mx-os.mx (junto con su alias gateway.mx-os.mx) es la pasarela pública y abierta de IPFS de Fundación MxOS, alojada sobre la infraestructura soberana de HOBOPS.IO.

El espejo de software libre de Fundación MxOS: mirrors.mx-os.mx

El dominio mirrors.mx-os.mx es el portal web canónico y catálogo curado de distribución de paquetes y medios de instalación de software libre de Fundación MxOS.

Arquitectura y Principios de Operación

El sistema opera sobre cinco pilares técnicos:

  1. 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.
  2. 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).
  3. Puntero canónico con DNSLink: Para evitar lidiar con hashes cambiantes en cada sincronización, el dominio mirrors.mx-os.mx cuenta 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.
  4. 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.
  5. 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:

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 cinco 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 kubo

Paso 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.service

Paso 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 --reload

Los enrutadores residenciales y de campus suelen almacenar en caché los registros TXT de DNSLink por tiempos prolongados. Para que tu nodo resuelva los identificadores de contenido (CID) recién publicados sin esperar vencimientos de caché local, configura Kubo para consultar directamente el punto de resolución DoH de Cloudflare para el dominio mx-os.mx:

# Delegar resolución DNSLink de mx-os.mx a Cloudflare DoH (FQDN estricto)
ipfs config --json DNS.Resolvers '{"mx-os.mx.": "https://cloudflare-dns.com/dns-query", ".": "auto"}'
systemctl --user restart ipfs.service

Paso 5: Explora los módulos disponibles con ipfs ls

Antes de enclavillar, puedes consultar directamente la estructura y los módulos publicados en el catálogo maestro ejecutando ipfs ls:

# 1. Explorar la raíz completa del catálogo comunitario
ipfs ls /ipns/mirrors.mx-os.mx

# 2. Listar las ramas de Fedora disponibles (43, 44, 45)
ipfs ls /ipns/mirrors.mx-os.mx/fedora/releases

# 3. Listar medios de instalación ISO disponibles
ipfs ls /ipns/mirrors.mx-os.mx/fedora/iso

# 4. Listar los repositorios de CentOS Stream 10
ipfs ls /ipns/mirrors.mx-os.mx/centos-stream/10-stream

# 5. Listar los repositorios de Grupos de Interés Especial (SIGs) de CentOS Stream 10
ipfs ls /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream

Paso 6: 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/43 1.2G ~3.5 GB
Imágenes ISO Fedora 44 ipfs pin add /ipns/mirrors.mx-os.mx/fedora/iso/44 1.2G ~3.5 GB
Imágenes ISO Fedora 45 ipfs pin add /ipns/mirrors.mx-os.mx/fedora/iso/45 1.2G ~3.5 GB
Todas las Imágenes ISO (43, 44, 45) ipfs pin add /ipns/mirrors.mx-os.mx/fedora/iso 3.5G ~10 GB
CentOS 10 BaseOS ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/BaseOS 7.0G ~15 GB
CentOS 10 AppStream ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/AppStream 29G ~45 GB
CentOS 10 CRB (CodeReady Builder) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/CRB 31G ~30 GB
CentOS 10 HighAvailability ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/HighAvailability 166M ~500 MB
CentOS 10 NFV y RT (Redes y Tiempo Real) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/10-stream/RT 2.1G ~5.0 GB
CentOS 10 SIG Extras (extras-common) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/extras 948K ~50 MB
CentOS 10 SIG Virtualización (KVM y oVirt) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/virt 1.4G ~500 MB
CentOS 10 SIG Módulos de Kernel (kmods) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/kmods 192M ~500 MB
CentOS 10 SIG Mensajería (RabbitMQ) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/messaging 572M ~1.0 GB
CentOS 10 SIG Almacenamiento (Ceph, Samba, NFS Ganesha) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/storage 6.4G ~6.0 GB
CentOS 10 SIG Hyperscale (Kernel y Paquetes Avanzados) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/hyperscale 9.8G ~10 GB
CentOS 10 Stream Completo (Base + SIGs) ipfs pin add /ipns/mirrors.mx-os.mx/centos-stream 69G ~105 GB
Paquetería Fedora 43 Everything ipfs pin add /ipns/mirrors.mx-os.mx/fedora/releases/43/Everything 118G ~125 GB
Paquetería Fedora 44 Everything ipfs pin add /ipns/mirrors.mx-os.mx/fedora/releases/44/Everything 0 ~125 GB
Paquetería Fedora 45 Everything (Desarrollo) ipfs pin add /ipns/mirrors.mx-os.mx/fedora/releases/45/Everything 0 ~125 GB
Catálogo Canónico Completo ipfs pin add /ipns/mirrors.mx-os.mx 195G ~480 GB

Gestión Eficiente de Almacenamiento: Btrfs, CoW y Subvolúmenes

Para los operadores de nodos guardianes que sincronizan o almacenan paquetes localmente, la infraestructura de espejos de MxOS aprovecha las capacidades nativas de Btrfs y la copia en escritura (CoW; Copy-on-Write):

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-$basearch

Para 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-centosofficial

[cs10-crb-mxos-ipfs]
name=CentOS Stream 10 - CRB (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/10-stream/CRB/$basearch/os/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[cs10-highavailability-mxos-ipfs]
name=CentOS Stream 10 - HighAvailability (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/10-stream/HighAvailability/$basearch/os/
enabled=0
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[cs10-rt-mxos-ipfs]
name=CentOS Stream 10 - Real Time (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/10-stream/RT/$basearch/os/
enabled=0
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[cs10-extras-mxos-ipfs]
name=CentOS Stream 10 - Extras Comunes (Espejo MxOS IPFS)
baseurl=http://127.0.0.1:8080/ipns/mirrors.mx-os.mx/centos-stream/SIGs/10-stream/extras/$basearch/extras-common/
enabled=1
metadata_expire=6h
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

Opció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-$basearch

Estructura 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
    │   ├── HighAvailability/     <- Paquetes para clústeres de alta disponibilidad
    │   ├── NFV/                   <- Virtualización de funciones de red
    │   └── RT/                    <- Núcleo y herramientas en tiempo real
    └── SIGs/
        └── 10-stream/
            └── extras/            <- Paquetería complementaria de SIGs (extras-common)

Identificación y Reconocimiento de Nodos Guardianes

La participación en el enjambre de MxOS es voluntaria, descentralizada y respetuosa de la privacidad por diseño. No existe registro forzoso, telemetría intrusiva ni recopilación obligatoria de datos.

Custodia Anónima: Participación Plena y Soberana

En la Red de Espejos Comunitarios de Fundación MxOS, la custodia anónima es totalmente válida, bienvenida y considerada de primera clase.

Registro Voluntario de tu Nodo a tu Nombre

Si como operador individual, colectivo tecnológico, universidad, centro de cómputo o empresa privada deseas vincular públicamente tu nodo a tu nombre, organización o proyecto, puedes solicitar tu inclusión en el Directorio de Custodios.

Al registrarte, tu nodo aparecerá formalmente en el radar de Vigía con tus datos verificados:

Procedimiento para Registrar tu Nodo a tu Nombre

Para añadir tu nodo al archivo guardianes.json y figurar formalmente con tu identidad en el espejo comunitario, sigue estos pasos:

  1. Obtén el identificador PeerID de tu nodo:

    ipfs id -f="<id>\n"
  2. Asegúrate de estar compartiendo al menos un módulo o el catálogo:

    ipfs pin add /ipns/mirrors.mx-os.mx/fedora/iso
  3. Edita 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"
    }
  4. Reglas para el registro:

    • Utiliza el nombre completo del estado (por ejemplo, Jalisco o Queré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.
  5. 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.

Participación Anónima y Privacidad

Fundación MxOS respeta plenamente tu derecho a la privacidad. Se vale totalmente operar y enclavillar tu nodo de forma anónima.

No es obligatorio registrar tu nodo en guardianes.json ni revelar tu identidad civil, alias o ubicación para colaborar con la red. Cualquier instancia de Kubo conectada al enjambre global que enclaville uno o más módulos mediante ipfs pin add /ipns/mirrors.mx-os.mx/... participa de forma inmediata y automática en el intercambio de bloques vía Bitswap. Tu nodo servirá datos a otros pares cercanos, deduplicará tráfico y acelerará las descargas en tu región con absoluta confidencialidad y sin dejar rastro de identidad en el catálogo.

El registro en guardianes.json es un reconocimiento honorífico y voluntario para aquellos operadores, instituciones o empresas que desean hacer pública su contribución en el observatorio de Vigía y en el portal web comunitario.

Seguridad e Integridad Criptográfica

La seguridad en la red de espejos descansa en dos barreras independientes e infranqueables:

  1. 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.
  2. 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.
  3. 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:

Documentación Técnica Detallada

Para profundizar en las especificaciones y manuales, consulta el directorio docs/:

Canales de Comunidad y Contacto

Licenciamiento

Este proyecto opera bajo un modelo de licenciamiento libre y comunitario: