Ejecutando Linux completo con systemd en un smartphone mediante Droidspaces
Los smartphones Android antiguos a menudo se convierten en servidores domésticos, bots de Telegram o bancos de prueba locales. Por lo general, esto se hace con Termux y PRoot o manipulando chroot. Pero estos enfoques tienen serias desventajas. PRoot intercepta cada llamada al sistema mediante ptrace, lo que ralentiza el rendimiento. El chroot regular solo aísla el sistema de archivos, dejando el árbol de procesos y las redes compartidas con el host. Y lo más importante, obtener un systemd completo como PID 1 en Android siempre ha sido una tarea difícil debido a cgroups, SELinux y el asesino de memoria LMK de Android.
El proyecto Droidspaces del desarrollador ravindu644 ofrece una solución diferente. Es un binario de aproximadamente 400 KB, construido con musl libc. Utiliza espacios de nombres estándar del kernel de Linux y levanta contenedores aislados con inicialización real, aceleración de gráficos y redes.
Cómo Droidspaces se diferencia de las alternativas
A diferencia de las pilas pesadas de LXC o Docker que se ejecutan sobre Termux, Droidspaces funciona directamente con el kernel. No tiene dependencias externas. Si el kernel del sistema soporta espacios de nombres, la herramienta se ejecutará incluso en el entorno de recuperación de Android (Recovery o Ramdisk).
Comparemos Droidspaces con herramientas familiares:
- En PRoot, cada llamada al sistema tiene un retraso. Aquí el contenedor se ejecuta de forma nativa.
- El chroot regular falla con un simple comando de visualización de procesos. Droidspaces proporciona un aislamiento real de PID, MNT, UTS, IPC y Cgroup.
- El asesino de procesos en segundo plano de Android a menudo cierra Termux junto con todos los servicios. Droidspaces se desvincula de la sesión de la aplicación mediante setsid y vive en un daemon en segundo plano.
- Si eliminas la aplicación Android, los contenedores en ejecución en
/data/local/Droidspacesseguirán funcionando, los datos no se perderán.
Gráficos, sonido y red sin configuración manual
Desde la versión 6.x, la utilidad puede reenviar gráficos y audio por sí sola. Si necesitas XFCE u otro entorno de escritorio, no tendrás que configurar manualmente las variables de entorno e iniciar servidores en Termux.
Cuando los interruptores correspondientes están habilitados, la utilidad automáticamente levanta Termux:X11, VirGL y PulseAudio. Dentro del contenedor, las variables DISPLAY=:5 y GALLIUM_DRIVER=virpipe se establecen automáticamente. Para GPUs Qualcomm Adreno, el controlador Turnip con paso directo de GPU está disponible.
Se admiten cuatro modos de red:
- Host (red compartida con el dispositivo)
- NAT (red aislada con detección automática de interfaz y reenvío de puertos)
- Ninguno (aislamiento completo de red)
- Gateway (delegando enrutamiento a otro contenedor, por ejemplo con OpenWRT)
Gestión y trabajo con código
Se creó una GUI conveniente para Android en Kotlin. Configura puntos de montaje, asigna recursos de hardware, reenvía puertos y muestra los registros de inicio de systemd.
En escritorio Linux o mediante SSH, el dispositivo se gestiona a través de una utilidad de línea de comandos:
# Проверка готовности ядра
sudo ./droidspaces check
# Запуск контейнера с файлом конфигурации
sudo ./droidspaces start ubuntu --conf /path/to/ubuntu.config
# Вход в консоль запущенного контейнера
sudo ./droidspaces enter ubuntu
Si necesitas probar software sin arriesgar daños al sistema de archivos, el modo Volatile es útil. Utiliza OverlayFS, almacena todos los cambios en RAM y los descarta inmediatamente después de detenerlo.
Requisitos del kernel y matices de seguridad
Sin derechos de root, no ocurrirá ninguna magia. La herramienta necesita Root (KernelSU, Magisk o APatch) y versión del kernel 3.10 o superior.
En kernels antiguos (3.10–4.19), hay que lidiar con las specifics de Android. debido a conflictos de cifrado FBE y peculiaridades de VFS, a veces ocurren bloqueos del kernel. El autor proporcionó un interruptor Deadlock Shield y filtros BPF. Si desactivas la protección, incluso puedes ejecutar Docker dentro de Droidspaces (contenedores anidados). En kernels GKI modernos (5.4+), todas las funciones están disponibles de serie.
Una nota de seguridad importante: Droidspaces fue creado para entusiastas y no funciona como un sandbox estricto. Los procesos dentro del contenedor con privilegios de root tienen acceso a las llamadas al kernel, y el indicador --privileged desactiva la mayoría de las capacidades y restricciones de seccomp. Ejecutar código cuestionable en tu dispositivo personal definitivamente no es recomendable.
A quién le será útil este proyecto
La herramienta atraerá a quienes convierten una tablet o smartphone antiguo en un servidor local. Es conveniente para levantar contenedores Docker, una instancia de Home Assistant, bases de datos o un entorno de escritorio completo con renderizado mediante GPU.
Los binarios listos para usar para arquitecturas aarch64, armhf, x86_64, x86 y riscv64 están disponibles en los lanzamientos en GitHub.
Proyectos relacionados