>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Kotlin

Executando um Linux Completo com systemd em um Smartphone via Droidspaces

Smartphones Android antigos são frequentemente transformados em servidores caseiros, bots do Telegram ou bancadas de teste locais. Geralmente isso é feito com Termux e PRoot ou mexendo com chroot. Mas essas abordagens têm sérias desvantagens. O PRoot intercepta cada chamada de sistema via ptrace, o que diminui o desempenho. O chroot comum apenas isola o sistema de arquivos, deixando a árvore de processos e redes compartilhadas com o host. E o mais importante, ter um systemd completo como PID 1 no Android sempre foi uma tarefa desafiadora devido a cgroups, SELinux e o killer de memória LMK do Android.

O projeto Droidspaces do desenvolvedor ravindu644 oferece uma solução diferente. É um binário de cerca de 400 KB, compilado com musl libc. Ele usa namespaces padrão do kernel Linux e levanta containers isolados com inicialização real, aceleração gráfica e rede.

Como o Droidspaces difere das alternativas

Ao contrário das pilhas pesadas de LXC ou Docker executadas sobre o Termux, o Droidspaces trabalha diretamente com o kernel. Ele não tem dependências externas. Se o kernel do sistema suportar namespaces, a ferramenta funcionará até no ambiente de recuperação do Android (Recovery ou Ramdisk).

Vamos comparar o Droidspaces com ferramentas familiares:

  • No PRoot, cada chamada de sistema sofre um atraso. Aqui o container é executado nativamente.
  • O chroot comum quebra em um simples comando de visualização de processos. O Droidspaces fornece isolamento real de PID, MNT, UTS, IPC e Cgroup.
  • O killer de processos em segundo plano do Android frequentemente fecha o Termux junto com todos os serviços. O Droidspaces se desanexa da sessão do aplicativo via setsid e vive em um daemon em segundo plano.
  • Se você excluir o aplicativo Android, os containers em execução em /data/local/Droidspaces continuarão funcionando, os dados não serão perdidos.

Gráficos, som e rede sem configuração manual

Desde a versão 6.x, o utilitário pode encaminhar gráficos e áudio por conta própria. Se você precisar do XFCE ou de outro ambiente de desktop, não terá que configurar manualmente variáveis de ambiente e iniciar servidores no Termux.

Quando os toggles correspondentes estão habilitados, o utilitário automaticamente levanta o Termux:X11, VirGL e PulseAudio. Dentro do container, as variáveis DISPLAY=:5 e GALLIUM_DRIVER=virpipe são automaticamente configuradas. Para GPUs Qualcomm Adreno, o driver Turnip com passthrough direto de GPU está disponível.

Quatro modos de rede são suportados:

  • Host (rede compartilhada com o dispositivo)
  • NAT (rede isolada com detecção automática de interface e encaminhamento de portas)
  • None (isolamento completo de rede)
  • Gateway (delegação de roteamento para outro container, por exemplo com OpenWRT)

Gerenciamento e trabalho com código

Uma GUI conveniente foi criada para Android em Kotlin. Ela configura pontos de montagem, aloca recursos de hardware, encaminha portas e exibe os logs de boot do systemd.

No desktop Linux ou via SSH, o dispositivo é gerenciado através de um utilitário de linha de comando:

# Проверка готовности ядра
sudo ./droidspaces check

# Запуск контейнера с файлом конфигурации
sudo ./droidspaces start ubuntu --conf /path/to/ubuntu.config

# Вход в консоль запущенного контейнера
sudo ./droidspaces enter ubuntu

Se você precisa testar software sem arriscar danificar o sistema de arquivos, o modo Volatile é útil. Ele usa OverlayFS, armazena todas as alterações na RAM e as descarta imediatamente após a parada.

Requisitos de kernel e nuances de segurança

Sem direitos de root, nenhuma mágica vai acontecer. A ferramenta precisa de Root (KernelSU, Magisk ou APatch) e versão do kernel 3.10 ou superior.

Em kernels antigos (3.10–4.19), você tem que lidar com especificidades do Android. Devido a conflitos de criptografia FBE e peculiaridades do VFS, às vezes ocorrem travamentos do kernel. O autor forneceu um toggle Deadlock Shield e filtros BPF. Se você desabilitar a proteção, pode até executar Docker dentro do Droidspaces (containers aninhados). Em kernels GKI modernos (5.4+), todas as funções estão disponíveis prontas para uso.

Uma nota de segurança importante: o Droidspaces foi criado para entusiastas e não funciona como uma sandbox rígida. Processos dentro do container com privilégios de root têm acesso a chamadas de kernel, e o flag --privileged desabilita a maioria das capacidades e restrições de seccomp. Executar código questionável no seu dispositivo pessoal definitivamente não é aconselhável.

Quem achará este projeto útil

A ferramenta agradará àqueles que transformam um tablet ou smartphone antigo em um servidor local. É conveniente para levantar containers Docker, um Home Assistant caseiro, instâncias de banco de dados ou um ambiente de desktop completo com renderização via GPU.

Binários prontos para uso para arquiteturas aarch64, armhf, x86_64, x86 e riscv64 estão disponíveis nos lançamentos no GitHub.

Projetos relacionados