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.
60 lines
1.9 KiB
YAML
60 lines
1.9 KiB
YAML
---
|
|
# Instala un APK en toda la flota, desde el coordinador.
|
|
#
|
|
# ansible-playbook playbooks/apk.yml -e apk_local_path=~/COFRE/CODERS/OASIS_APK/oasis.apk
|
|
#
|
|
# Se ejecuta desde el coordinador a propósito: en modo macvlan un blade NO puede
|
|
# hablar con sus propios contenedores, así que instalar desde cada nodo fallaría.
|
|
# Desde el coordinador funcionan los dos modos de red.
|
|
|
|
- name: Instalar APK en la flota
|
|
hosts: coordinator
|
|
gather_facts: false
|
|
vars:
|
|
apk_local_path: ""
|
|
tasks:
|
|
|
|
- name: Exigir la ruta del APK
|
|
ansible.builtin.assert:
|
|
that: apk_local_path | length > 0
|
|
fail_msg: "Falta -e apk_local_path=/ruta/al/app.apk"
|
|
|
|
- name: Comprobar que el APK existe en el nodo de control
|
|
ansible.builtin.stat:
|
|
path: "{{ apk_local_path }}"
|
|
delegate_to: localhost
|
|
become: false
|
|
register: apk_local
|
|
|
|
- name: Abortar si no está
|
|
ansible.builtin.assert:
|
|
that: apk_local.stat.exists
|
|
fail_msg: "No existe: {{ apk_local_path }}"
|
|
|
|
- name: Copiar el APK al coordinador
|
|
ansible.builtin.copy:
|
|
src: "{{ apk_local_path }}"
|
|
dest: "{{ coordinator_dir }}/apks/{{ apk_local_path | basename }}"
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
|
|
- name: Conectar adb a la flota
|
|
ansible.builtin.command:
|
|
cmd: "{{ coordinator_dir }}/fleet.sh connect"
|
|
register: apk_connect
|
|
changed_when: false
|
|
|
|
- name: Resultado de la conexión
|
|
ansible.builtin.debug:
|
|
var: apk_connect.stdout_lines
|
|
|
|
- name: Instalar el APK en todos los dispositivos
|
|
ansible.builtin.command:
|
|
cmd: "{{ coordinator_dir }}/fleet.sh install {{ coordinator_dir }}/apks/{{ apk_local_path | basename }}"
|
|
register: apk_install
|
|
changed_when: true
|
|
|
|
- name: Resultado de la instalación
|
|
ansible.builtin.debug:
|
|
var: apk_install.stdout_lines
|