Droidspaces
Implement a transparent DNS proxy for NAT containers
To fix DNS-related issues in existing systemd-based containers (containers already installed using the Droidspaces app), please run this command as root inside the container's shell:
cat > "/etc/systemd/resolved.conf.d/dns.conf" << 'EOF'
[Resolve]
DNSStubListener=no
EOF
â¤1đŠ1
If Droidspaces doesn't work for you, it falls into two categories.
01. Your kernel version
- If you have a legacy kernel, probably 4.19 or older, you fall into this category.
- As I clearly stated in multiple places in my README, you cannot run modern systemd like v258 on these kernels. They fail to boot, every systemctl command hangs, and everything will be broken. Even LXC cannot boot them. There is no fix for this.
If you wonder why, modern systemd requires modern syscalls, which older kernels often lack. So, if you run foreground mode with the -f flag, you will see thousands of "function not implemented" errors.
What to try on these kernels?
You can try anything below systemd v258, or any distro with a different init system like OpenRC, runit, s6, etc.
My picks: Ubuntu 20.04, 22.04, 24.04, 25.04, 25.10; Alpine 3.23; Gentoo OpenRC flavor.
Notes: Especially in Kernel 4.14.113, which the Galaxy S10 uses by default, you cannot boot any systemd-based distros without enabling the "Deadlock Shield". This is a kernel bug that causes the entire systemd and host to become unresponsive when booting a container.
Symptoms: Systemd hangs, even in older distros. The entire host becomes unresponsive. You cannot reboot or power off your device.
Solution: Either enable Deadlock Shield or use an upstreamed kernel like 4.14.356.
02. Your rooting solution
- As I clearly stated in the official documentation, Droidspaces on Magisk or Apatch is highly unstable. You will face weird issues with these solutions.
More info:
https://github.com/ravindu644/Droidspaces-OSS/issues/11#issuecomment-4036688816
Droidspaces requires a custom kernel anyway. Why can't anyone switch to KernelSU when compiling their kernels?
01. Your kernel version
- If you have a legacy kernel, probably 4.19 or older, you fall into this category.
- As I clearly stated in multiple places in my README, you cannot run modern systemd like v258 on these kernels. They fail to boot, every systemctl command hangs, and everything will be broken. Even LXC cannot boot them. There is no fix for this.
If you wonder why, modern systemd requires modern syscalls, which older kernels often lack. So, if you run foreground mode with the -f flag, you will see thousands of "function not implemented" errors.
What to try on these kernels?
You can try anything below systemd v258, or any distro with a different init system like OpenRC, runit, s6, etc.
My picks: Ubuntu 20.04, 22.04, 24.04, 25.04, 25.10; Alpine 3.23; Gentoo OpenRC flavor.
Notes: Especially in Kernel 4.14.113, which the Galaxy S10 uses by default, you cannot boot any systemd-based distros without enabling the "Deadlock Shield". This is a kernel bug that causes the entire systemd and host to become unresponsive when booting a container.
Symptoms: Systemd hangs, even in older distros. The entire host becomes unresponsive. You cannot reboot or power off your device.
Solution: Either enable Deadlock Shield or use an upstreamed kernel like 4.14.356.
02. Your rooting solution
- As I clearly stated in the official documentation, Droidspaces on Magisk or Apatch is highly unstable. You will face weird issues with these solutions.
More info:
https://github.com/ravindu644/Droidspaces-OSS/issues/11#issuecomment-4036688816
Droidspaces requires a custom kernel anyway. Why can't anyone switch to KernelSU when compiling their kernels?
â¤1đĨ1đŠ1
--hw-access demonstration.I'm executing
adb/fastboot/heimdall commands remotely via Tailscale+SSH. My other phone is connected to the S10 using a Type-C to Type-C cable..!That means you can use Droidspaces to do stuff even remotely with full hardware access..!
đŋ3đĨ2đŠ1
Droidspaces-universal-test-2026-03-18.apk
14 MB
Test APK from the latest CI.
Fixes strange DHCP issues on Void Linux and Devuan Linux, resolves runit boot failures, and other related problems.
Please test it and let us know if you cannot access the Internet in the container when using NAT mode.
Fixes strange DHCP issues on Void Linux and Devuan Linux, resolves runit boot failures, and other related problems.
Please test it and let us know if you cannot access the Internet in the container when using NAT mode.
â¤3đŠ1
Droidspaces v5.7.1 has been released..!
https://github.com/ravindu644/Droidspaces-OSS/releases/tag/v5.7.1
What's changed?
@Droidspaces
https://github.com/ravindu644/Droidspaces-OSS/releases/tag/v5.7.1
What's changed?
- Fixed issues where runit caused crashes on Android because it modified kernel sysctl parameters, leading to system crashes. Resolved by selectively masking the entire /proc/sys.
- Fixed issues where Gentoo + OpenRC could not obtain an IP from the DHCP server.
- Fixed issues where Devuan received an incorrect IP from the DHCP server.
- Fixed shutdown issues in Void Linux.
- Repaired sysfs symlinks for OpenRC/Gentoo network detection.
- Rewrote firmware path management for Android.
@Droidspaces
đŋ3đŠ1
Set up UFW and Fail2Ban properly, and it actually works!
But had to enable some kernel configs to pull this off :(
Everything behaves like a real Linux server...
But had to enable some kernel configs to pull this off :(
Everything behaves like a real Linux server...
đĨ2đŠ1
Fixed 2 issues with the hardware access feature:
1. On Android, block devices like USB storage and SD cards appear under /dev/block, not /dev, unlike standard Linux. This meant attached storage never showed up in the container's devtmpfs, even in hw access mode. Fixed by bind mounting the host's /dev/block to the container's /dev/block.
2. On some devices, GPU nodes were missing in freshly mounted devtmpfs inside containers. Previously, users had to manually bind mount GPU nodes. Now, if a GPU node exists on the host but is missing in the container, we create it in the container using mknod(), no bind mount needed :)
This also fixes binder, hwbinder, and vndbinder missing issues, and resolves the GitHub issue:
https://github.com/ravindu644/Droidspaces-OSS/issues/19
1. On Android, block devices like USB storage and SD cards appear under /dev/block, not /dev, unlike standard Linux. This meant attached storage never showed up in the container's devtmpfs, even in hw access mode. Fixed by bind mounting the host's /dev/block to the container's /dev/block.
2. On some devices, GPU nodes were missing in freshly mounted devtmpfs inside containers. Previously, users had to manually bind mount GPU nodes. Now, if a GPU node exists on the host but is missing in the container, we create it in the container using mknod(), no bind mount needed :)
This also fixes binder, hwbinder, and vndbinder missing issues, and resolves the GitHub issue:
https://github.com/ravindu644/Droidspaces-OSS/issues/19
â¤7đĨ°1đŠ1
This is also one of my side projects, came way before Droidspaces.
To use
It even supports dynamic namespace isolation, hardware access, rootfs.img support, post-exec scripts as a replacement for init, running at boot even the device is locked and encrypted, etc.
Even though this is more primitive than the Droidspaces project, it still provides basic Linux on Android.
v4.4 was released with fixes related to BusyBox. From now on, we specifically use our custom BusyBox to perform certain shell operations.
https://github.com/ravindu644/Ubuntu-Chroot/releases/tag/v4.4
To use
ubuntu-chroot, you only need root access. No kernel configuration needed. It just works.It even supports dynamic namespace isolation, hardware access, rootfs.img support, post-exec scripts as a replacement for init, running at boot even the device is locked and encrypted, etc.
Even though this is more primitive than the Droidspaces project, it still provides basic Linux on Android.
v4.4 was released with fixes related to BusyBox. From now on, we specifically use our custom BusyBox to perform certain shell operations.
https://github.com/ravindu644/Ubuntu-Chroot/releases/tag/v4.4
đĨ°1đŠ1
Added an official guide on how to compile a kernel with Droidspaces support for any GKI device:
https://github.com/ravindu644/Droidspaces-OSS/blob/main/Documentation/Kernel-Configuration.md
You can now compile the kernel just like a legacy non-GKI kernel and flash only the boot.img or compiled kernel Image, without worrying about ABI or LKM compatibility đĨŗ
@Droidspaces
https://github.com/ravindu644/Droidspaces-OSS/blob/main/Documentation/Kernel-Configuration.md
You can now compile the kernel just like a legacy non-GKI kernel and flash only the boot.img or compiled kernel Image, without worrying about ABI or LKM compatibility đĨŗ
@Droidspaces
đĨ5â¤4đ1đŠ1đŋ1
Droidspaces
:)
Initial guide:
https://github.com/ravindu644/Droidspaces-OSS/blob/main/Documentation/Cool-things-you-can-do.md
Will add hardware hacking as well in near-future :)
https://github.com/ravindu644/Droidspaces-OSS/blob/main/Documentation/Cool-things-you-can-do.md
Will add hardware hacking as well in near-future :)
đŋ3đŠ1
Hosted my own Git server and VS Code server, only accessible to me via Tailscale :)
Everything works with just one click.
No trial and error.
So, my S10 officially runs:
- Tailscale
- Samba
- Jellyfin
- Fail2ban
- UFW
- Docker
- MySQL server
- Getea
- VS Code server
- OpenSSH server
All under 3GB of RAM usage (including Android) and under 5% idle CPU usage.
Nothing is impossible :)
Everything works with just one click.
No trial and error.
So, my S10 officially runs:
- Tailscale
- Samba
- Jellyfin
- Fail2ban
- UFW
- Docker
- MySQL server
- Getea
- VS Code server
- OpenSSH server
All under 3GB of RAM usage (including Android) and under 5% idle CPU usage.
Nothing is impossible :)
đĨ10đ3đŠ1