Запускаем полноценный Linux с systemd на смартфоне через Droidspaces
Старые смартфоны на Android часто превращают в домашние серверы, Telegram-ботов или локальные тестовые стенды. Обычно для этого берут Termux с PRoot или ковыряют chroot. Но у этих подходов есть серьезные грабли. PRoot перехватывает каждый системный вызов через ptrace, из-за чего просаживается скорость работы. Обычный chroot изолирует только файловую систему, оставляя дерево процессов и сети общими с хостом. А главное, поднять полноценный systemd в качестве PID 1 на Android всегда было сложной задачей из-за особенностей cgroups, SELinux и утилит очистки памяти Android LMK.
Проект Droidspaces от разработчика ravindu644 предлагает другое решение. Это бинарник весом около 400 КБ, собранный с musl libc. Он использует стандартные неймспейсы ядра Linux и поднимает изолированные контейнеры с настоящей инициализацией, ускорением графики и сетью.
Чем Droidspaces отличается от аналогов
В отличие от тяжеловесных связок LXC или Docker поверх Termux, Droidspaces работает напрямую с ядром. У него нет внешних зависимостей. Если ядро системы поддерживает неймспейсы, инструмент заведется даже в среде восстановления Android (Recovery или Ramdisk).
Сравним Droidspaces с привычными инструментами:
- В PRoot каждый системный вызов идет с задержкой. Здесь контейнер работает нативно.
- Обычный chroot сбегает при банальной команде просмотра процессов. Droidspaces дает честную изоляцию PID, MNT, UTS, IPC и Cgroup.
- Убийца фоновых процессов Android часто закрывает Termux вместе со всеми сервисами. Droidspaces отвязывается от сессии приложения через setsid и живет в фоновом демоне.
- Если удалить Android-приложение, запущенные контейнеры в
/data/local/Droidspacesпродолжат работать, данные не пропадут.
Графика, звук и сеть без ручной настройки
С версий 6.x утилита умеет самостоятельно пробрасывать графику и звук. Если вам нужен XFCE или другой рабочий стол, не придется вручную вбивать переменные окружения и стартовать серверы в Termux.
При включении соответствующих тумблеров утилита сама поднимает Termux:X11, VirGL и PulseAudio. Внутри контейнера автоматически оказываются переменные DISPLAY=:5 и GALLIUM_DRIVER=virpipe. Для видеокарт Qualcomm Adreno доступен драйвер Turnip с прямой проброской GPU.
С сетью поддерживается четыре режима:
- Host (общая сеть с устройством)
- NAT (изолированная сеть с автоопределением интерфейса и пробросом портов)
- None (полная сетевая изоляция)
- Gateway (делегирование маршрутизации другому контейнеру, например с OpenWRT)
Управление и работа с кодом
Для Android создали удобный графический интерфейс на Kotlin. В нем настраиваются точки монтирования, выделяются аппаратные ресурсы, пробрасываются порты и выводятся логи загрузки systemd.
На десктопном Linux или через SSH устройство управляется через утилиту командной строки:
# Проверка готовности ядра
sudo ./droidspaces check
# Запуск контейнера с файлом конфигурации
sudo ./droidspaces start ubuntu --conf /path/to/ubuntu.config
# Вход в консоль запущенного контейнера
sudo ./droidspaces enter ubuntu
Если нужно протестировать софт без риска испортить файловую систему, пригодится режим Volatile. Он использует OverlayFS, хранит все изменения в оперативной памяти и сбрасывает их сразу после остановки.
Требования к ядру и нюансы безопасности
Без рут-прав магии не произойдет. Инструменту нужен Root (KernelSU, Magisk или APatch) и ядро версии 3.10 или новее.
На старых ядрах (3.10–4.19) приходится сталкиваться со спецификой Android. Из-за конфликтов FBE-шифрования и особенностей VFS иногда возникают зависания ядра. Автор предусмотрел переключатель Deadlock Shield и BPF-фильтры. Если отключить защиту, получается запускать даже Docker внутри Droidspaces (nested containers). На современных ядрах GKI (5.4+) все функции доступны сразу.
Важная оговорка по безопасности: Droidspaces создавался для энтузиастов и не работает как строгая песочница. Процессы внутри контейнера с правами root имеют доступ к вызовам ядра, а флаг --privileged отключает большинство ограничений capabilities и seccomp. Запускать сомнительный код на личном устройстве точно не стоит.
Кому пригодится проект
Инструмент понравится тем, кто превращает старый планшет или смартфон в локальный сервер. На нем удобно поднимать Docker-контейнеры, домашний Home Assistant, инстансы баз данных или полноценный рабочий стол с рендерингом через GPU.
Готовые бинарники под архитектуры aarch64, armhf, x86_64, x86 и riscv64 выложены в релизах на GitHub.
