REBELION_EN_LA_GRANJA/02_device_lab/README.md
s1to 74bfbe9437 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.
2026-08-08 19:42:14 +02:00

112 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Device lab con redroid
La vía 1: laboratorio de dispositivos Android propio sobre el rack. Legal, reutilizable, y el
primer uso real es probar `oasis_mobile` a escala — incluido el escenario de dos APKs que se tienen
que ver entre sí (el bloqueo de capa 1).
**No hay móviles físicos.** Cada "dispositivo" es un contenedor redroid: Android real sobre el
kernel de una máquina Debian.
## Dos caminos
| | Para qué |
|---|---|
| **[ansible/](ansible/)** | **La granja de verdad**: los 16 blades del M1000e, provisionados y controlados desde un sitio. Es lo que hay que usar. |
| Este documento | Un solo nodo, a mano. Sirve para entender las piezas y para trastear en el sobremesa. |
El hardware está descrito en [hardware_m1000e.md](hardware_m1000e.md).
## Host
Comprobado el 2026-08-08 sobre esta máquina:
| | |
|---|---|
| CPU | 16 cores |
| RAM | 62 GB |
| SO | Debian 12 bookworm, kernel 6.1.0-51-amd64 |
| Docker | **no instalado** |
| binder | `binder_linux.ko` presente, pero `CONFIG_ANDROID_BINDERFS` **no está activado** |
Con 2 GB por instancia y dejando margen al host, **1220 instancias redroid** simultáneas es el
rango realista aquí. No son las 3060 de un nodo de 32c/128 GB.
## Prerrequisitos
### 1. binder — el punto donde esto se atasca
El kernel de Debian trae `binder_linux` como módulo pero **sin binderfs**, así que redroid no puede
crear los devices por sí mismo. Hay que cargarlos a mano con los tres nombres que Android espera:
```bash
sudo modprobe binder_linux devices=binder,hwbinder,vndbinder
ls -l /dev/binder /dev/hwbinder /dev/vndbinder # deben existir
```
Para que persista entre reinicios:
```bash
echo binder_linux | sudo tee /etc/modules-load.d/redroid.conf
echo "options binder_linux devices=binder,hwbinder,vndbinder" | sudo tee /etc/modprobe.d/redroid.conf
```
Si `modprobe` falla, la alternativa es el módulo DKMS de Waydroid
(`binder_linux-dkms`), que sí aporta binderfs.
### 2. Docker
```bash
sudo apt install docker.io docker-compose-v2
sudo usermod -aG docker $USER # requiere volver a entrar en sesión
```
### 3. adb
```bash
sudo apt install adb
```
## Arrancar
```bash
docker compose up -d
./connect.sh # conecta adb a las instancias levantadas
adb devices # deben salir 127.0.0.1:5555 .. 5558
```
Instalar un APK en todas:
```bash
./install-apk.sh ~/COFRE/CODERS/OASIS_APK/<algo>.apk
```
Ver una instancia:
```bash
sudo apt install scrcpy
scrcpy -s 127.0.0.1:5555
```
## Escalar
`docker-compose.yml` trae 4 instancias como punto de partida. Para más, replicar el bloque
cambiando nombre y puerto. A partir de ~8 conviene generar el compose con un script en vez de
mantenerlo a mano, o pasar a GADS.
## Para la flota entera
Todo lo de arriba, pero en 16 blades y sin hacerlo a mano: **[ansible/](ansible/)**.
Ahí está el preflight que identifica el modelo de blade solo, el despliegue completo, y `fleet`
para hablar con todos los Android desde un único sitio.
## Siguiente capa: GADS
[GADS](https://github.com/shamanec/GADS) da UI web, gestión de dispositivos y Appium integrado
encima de esto. Merece la pena cuando el número de instancias pase de una decena o cuando haga
falta lanzar tests automatizados en vez de trastear a mano.
## Limitación que hay que tener presente
Estas instancias **son detectables como emulador**. Sirven para probar tu propia app, no para
interactuar con plataformas que hacen atestación de dispositivo (ver
[../01_investigacion/stack_tecnico.md](../01_investigacion/stack_tecnico.md)).