Rebelión en la granja — investigación y laboratorio de dispositivos

Investigación sobre granjas de dispositivos y automatización completa para
levantar un laboratorio Android sobre un chasis de blades Debian.

Conclusión que ordena el repositorio: el cuello de botella nunca fue el
cómputo sino la identidad. Desde que la atestación de dispositivo pasó de
estadística a criptográfica, un servidor no puede hacerse pasar por un
teléfono — le falta una clave grabada en fábrica que ningún software produce.

Contenido:

- 01_investigacion/ — capa de identidad (verificación telefónica, eSIM,
  reputación de IP, atestación por hardware, correlación entre cuentas),
  mercado y players, stack técnico, marco legal en la UE
- 02_device_lab/ansible/ — Ansible para 16 blades: preflight de solo lectura
  que identifica el hardware por DMI, despliegue de redroid en Docker y
  control de flota por adb. Solo ansible.builtin, sin colecciones externas
- docs/ — requisitos, costes y repaso de seguridad con 11 hallazgos
- 03_charla/ — guion para HackMadrid / Hackmeeting València

Estado: la automatización está escrita pero SIN ejecutar contra hardware.
YAML validado, plantillas renderizadas en ambos modos de red y fleet.sh
comprobado con bash -n. El modelo de blade sigue sin confirmar.
This commit is contained in:
s1to 2026-08-08 19:42:14 +02:00
commit 74bfbe9437
42 changed files with 2989 additions and 0 deletions

View file

@ -0,0 +1,70 @@
# Inventario de la granja. Copia esto a hosts.yml y ajusta IPs.
#
# cp inventory/hosts.yml.example inventory/hosts.yml
#
# Reparto: 1 blade coordinador (adb + control) + 15 blades de carga.
# El coordinador NO corre instancias Android, solo dirige.
all:
children:
granja:
vars:
ansible_user: root
# Si entras con usuario normal + sudo, cambia a:
# ansible_user: sito
# ansible_become_password: "{{ vault_sudo_password }}"
children:
# ---------------------------------------------------------------
# Coordinador: adb, scripts de flota, punto único de control
# ---------------------------------------------------------------
coordinator:
hosts:
blade-01:
ansible_host: 10.0.0.11
# ---------------------------------------------------------------
# Nodos de carga: aquí corren los contenedores redroid
# ---------------------------------------------------------------
redroid_nodes:
hosts:
blade-02: { ansible_host: 10.0.0.12, redroid_macvlan_ip_offset: 20 }
blade-03: { ansible_host: 10.0.0.13, redroid_macvlan_ip_offset: 30 }
blade-04: { ansible_host: 10.0.0.14, redroid_macvlan_ip_offset: 40 }
blade-05: { ansible_host: 10.0.0.15, redroid_macvlan_ip_offset: 50 }
blade-06: { ansible_host: 10.0.0.16, redroid_macvlan_ip_offset: 60 }
blade-07: { ansible_host: 10.0.0.17, redroid_macvlan_ip_offset: 70 }
blade-08: { ansible_host: 10.0.0.18, redroid_macvlan_ip_offset: 80 }
blade-09: { ansible_host: 10.0.0.19, redroid_macvlan_ip_offset: 90 }
blade-10: { ansible_host: 10.0.0.20, redroid_macvlan_ip_offset: 100 }
blade-11: { ansible_host: 10.0.0.21, redroid_macvlan_ip_offset: 110 }
blade-12: { ansible_host: 10.0.0.22, redroid_macvlan_ip_offset: 120 }
blade-13: { ansible_host: 10.0.0.23, redroid_macvlan_ip_offset: 130 }
blade-14: { ansible_host: 10.0.0.24, redroid_macvlan_ip_offset: 140 }
blade-15: { ansible_host: 10.0.0.25, redroid_macvlan_ip_offset: 150 }
blade-16: { ansible_host: 10.0.0.26, redroid_macvlan_ip_offset: 160 }
# -------------------------------------------------------------------------
# PILOTO DE UN NODO
# -------------------------------------------------------------------------
# Para probar todo esto en el sobremesa antes de tocar el chasis, comenta
# el bloque `granja` de arriba y descomenta este. El sobremesa hace de
# coordinador y de nodo de carga a la vez.
#
# ansible-playbook playbooks/preflight.yml
# ansible-playbook site.yml
#
# all:
# children:
# granja:
# children:
# coordinator:
# hosts:
# localhost:
# ansible_connection: local
# redroid_nodes:
# hosts:
# localhost:
# ansible_connection: local
# redroid_macvlan_ip_offset: 20