>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Kotlin

Uruchamianie pełnoprawnego Linuksa z systemd na smartfonie za pomocą Droidspaces

Stare smartfony z Androidem często zamieniane są w domowe serwery, boty Telegram lub lokalne środowiska testowe. Zazwyczaj odbywa się to za pomocą Termuksa i PRoot lub przez majsterkowanie przy chroot. Jednak te podejścia mają poważne wady. PRoot przechwytuje każde wywołanie systemowe przez ptrace, co spowalnia wydajność. Zwykły chroot izoluje tylko system plików, pozostawiając drzewo procesów i sieci współdzielone z hostem. A co najważniejsze, uruchomienie pełnego systemd jako PID 1 na Androidzie zawsze było trudnym zadaniem ze względu na cgroups, SELinux i zabójcę pamięci LMK Androida.

Projekt Droidspaces autorstwa programisty ravindu644 oferuje inne rozwiązanie. To binarka o rozmiarze około 400 KB, zbudowana z musl libc. Wykorzystuje standardowe namespace'y jądra Linuksa i tworzy izolowane kontenery z prawdziwą inicjalizacją, przyspieszeniem graficznym i siecią.

Czym Droidspaces różni się od alternatyw

W przeciwieństwie do ciężkich stosów LXC czy Dockera działających na Termuksie, Droidspaces pracuje bezpośrednio z jądrem. Nie ma zewnętrznych zależności. Jeśli jądro systemu obsługuje namespace'y, narzędzie uruchomi się nawet w środowisku odzyskiwania Androida (Recovery lub Ramdisk).

Porównajmy Droidspaces z znanymi narzędziami:

  • W PRoot każde wywołanie systemowe wiąże się z opóźnieniem. Tutaj kontener działa natywnie.
  • Zwykły chroot psuje się przy prostym poleceniu podglądu procesów. Droidspaces zapewnia uczciwą izolację PID, MNT, UTS, IPC i Cgroup.
  • Zabójca procesów w tle Androida często zamyka Termuks wraz ze wszystkimi usługami. Droidspaces odłącza się od sesji aplikacji przez setsid i żyje jako daemon w tle.
  • Jeśli usuniesz aplikację Android, uruchomione kontenery w /data/local/Droidspaces będą nadal działać, dane nie zostaną utracone.

Grafika, dźwięk i sieć bez ręcznej konfiguracji

Od wersji 6.x narzędzie może samodzielnie przekazywać grafikę i dźwięk. Jeśli potrzebujesz XFCE lub innego środowiska graficznego, nie będziesz musiał ręcznie ustawiać zmiennych środowiskowych i uruchamiać serwerów w Termuksie.

Gdy odpowiednie przełączniki są włączone, narzędzie automatycznie uruchamia Termux:X11, VirGL i PulseAudio. Wewnątrz kontenera zmienne DISPLAY=:5 i GALLIUM_DRIVER=virpipe są automatycznie ustawiane. Dla GPU Qualcomm Adreno dostępny jest sterownik Turnip z bezpośrednim przekazywaniem GPU.

Obsługiwane są cztery tryby sieciowe:

  • Host (współdzielona sieć z urządzeniem)
  • NAT (izolowana sieć z automatycznym wykrywaniem interfejsu i przekierowaniem portów)
  • Brak (całkowita izolacja sieci)
  • Gateway (delegowanie routingu do innego kontenera, na przykład z OpenWRT)

Zarządzanie i praca z kodem

Wygodny interfejs GUI został stworzony dla Androida w Kotlinie. Konfiguruje punkty montowania, alokuje zasoby sprzętowe, przekierowuje porty i wyświetla logi startowe systemd.

Na desktopowym Linuksie lub przez SSH urządzenie jest zarządzane za pomocą narzędzia wiersza poleceń:

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

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

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

Jeśli chcesz przetestować oprogramowanie bez ryzyka uszkodzenia systemu plików, przydatny jest tryb Volatile. Wykorzystuje OverlayFS, przechowuje wszystkie zmiany w RAM i odrzuca je natychmiast po zatrzymaniu.

Wymagania dotyczące jądra i niuanse bezpieczeństwa

Bez praw roota nic się nie wydarzy. Narzędzie wymaga roota (KernelSU, Magisk lub APatch) i jądra w wersji 3.10 lub nowszego.

Na starych jądrach (3.10–4.19) trzeba radzić sobie ze specyfiką Androida. Z powodu konfliktów szyfrowania FBE i osobliwości VFS czasami występują zamrożenia jądra. Autor udostępnił przełącznik Deadlock Shield i filtry BPF. Jeśli wyłączysz ochronę, możesz nawet uruchomić Dockera wewnątrz Droidspaces (kontenery zagnieżdżone). Na nowoczesnych jądrach GKI (5.4+) wszystkie funkcje są dostępne od razu.

Ważna uwaga dotycząca bezpieczeństwa: Droidspaces został stworzony dla entuzjastów i nie działa jako ścisła piaskownica. Procesy wewnątrz kontenera z uprawnieniami roota mają dostęp do wywołań jądra, a flaga --privileged wyłącza większość możliwości i ograniczeń seccomp. Uruchamianie wątpliwego kodu na osobistym urządzeniu zdecydowanie nie jest zalecane.

Komu przyda się ten projekt

Narzędzie spodoba się tym, którzy zamieniają stary tablet lub smartfon w lokalny serwer. Jest wygodne do tworzenia kontenerów Dockera, domowego Home Assistant, instancji baz danych lub pełnego środowiska graficznego z renderowaniem przez GPU.

Gotowe binarki dla architektur aarch64, armhf, x86_64, x86 i riscv64 są dostępne w wydaniach na GitHubie.

Powiązane projekty