Droidspaces
1.23K subscribers
245 photos
26 videos
31 files
106 links
Download Telegram
Droidspaces
Photo
Well, why not? 😅

The uptime got messed up when I was setting up HTTPS :)

Even this is more powerful than the latest RPI 5 in benchmarks.

The only caveat is this phone isn't using the latest Linux kernel, as that's the nature of old Android :(
🔥4💩1🗿1
Droidspaces
Photo
Why not host a Gitea Actions runner on a phone? 🗿
🤯1💩1🗿1
Droidspaces v5.8.0 has been released..!

https://github.com/ravindu644/Droidspaces-OSS/releases/tag/v5.8.0

What's new?

- mount: slave-bind host /dev/block in --hw-access mode (fixes external storage not visible inside the container)
- hardware: mirror missing GPU nodes into devtmpfs on hw_access boot
- ds_dhcp: fix misaligned iphdr access in send_reply
- net: use kernel ip rule as primary upstream detection on Android (100x better upstream detection on wildcards 🥳)
- app: removed global uptime from the 'System Statistics' card and using per-container uptime in the container info menu
- Modify service.sh to update module description
- fix: Introduce Termux environment detection and prevent --termux-x11 killing termux, when running the droidspaces ... command within Termux
- app+backend: Decouple Hardware Access and Termux-X11 features
- app: implement Material You Accent color picker
- fix(backend): sort bind mounts alphabetically to prevent shadowing
- feat: implement port range forwarding
- fix: serialize DHCP "started" log via cond var to eliminate race with port-forward and boot logs
- fix: persist port-forward state file to guarantee full rule cleanup on stop


TLDR:

- 100x better upstream detection. Now you can hop between SIM1/SIM2 mobile data + WiFi without dropping any requests.
- Added Docker-like port range forwarding support.
- Mirrors GPU nodes from host to container if the container’s devtmpfs doesn’t have the detected nodes


@Droidspaces
🔥5🗿2💩1
Droidspaces
Droidspaces v5.8.0 has been released..! https://github.com/ravindu644/Droidspaces-OSS/releases/tag/v5.8.0 What's new? - mount: slave-bind host /dev/block in --hw-access mode (fixes external storage not visible inside the container) - hardware: mirror missing…
Droidspaces v5.8.1

https://github.com/ravindu644/Droidspaces-OSS/releases/tag/v5.8.1

Fixes:

- fix(runtime): prevent metadata overwrite during container scan
- fix: restrict Termux X11 conflict check to 'start' or 'restart' commands
- fix: skip Termux force-stop if unified /tmp bridge is already mounted


@Droidspaces
🗿51💩1
New feature 👀
🔥62👏1💩1
Droidspaces
Photo
Well,

Developers can now integrate the droidspaces daemon at the init.rc level.

Theoretically, you can run droidspaces without root if it is integrated into the Android init system.

However, since it is dangerous, I have artificially limited the ability for non-root users on Android to connect with the droidspaces socket.

On Linux, though, users can run droidspaces commands without sudo!
2🥰1💩1
For Magisk/APatch issues, enabling the toggle is enough.

For GrapheneOS users, however, they might need to integrate droidspaces as an init service to fix certain syscalls that get blocked even when running as root.
💩1
Droidspaces-universal-v5.9.0-daemon-test2.apk
14.1 MB
testing :)

1. Install
2. Enable daemon mode
3. Reboot the device
4. Tell me the results :)
💩1
After the recent changes to the Droidspaces daemon and using custom SELinux policies to fix denials related to Droidspaces during boot,

I can finally confirm that Droidspaces is fully stable on Magisk and Apatch 🥳

Now, only GrapheneOS needs testing..
🔥2👏1💩1
We just integrated droidspacesd directly into Android's native init system - no KernelSU, Magisk, or APatch needed. No post-fs-data.sh or service.sh scripts either.

Here's what that means for you:

Unkillable daemon - even if you kill -9 it, init brings it right back up automatically.

No root manager needed - the daemon runs as UID 0 (root) natively, without relying on Magisk, APatch, or KSU to function.

Clean SELinux - runs under its own permissive domain with no noisy denials.

Symlink mode - developers can place a symlink at /vendor/bin/droidspaces pointing to /data/local/bin/droidspaces. This means once the vendor image is repacked and shipped, you never need to unpack it again for updates.

The app just updates the real binary inside /data, and init picks it up automatically on the next boot🗿

https://github.com/ravindu644/Droidspaces-OSS/commit/9fdca856bd2d296980ab6c0becb490981283a025

@droidspaces
🤯6🔥31💩1
Droidspaces
Photo
Currently, the daemon drops all connections from non-UID0 sockets for security. That means to communicate with the daemon, you must be root, even though theoretically root isn’t required for a client.

This design choice is intended to block malicious connections from managing or running arbitrary commands inside containers as malicious processes.

If your rooting method is compromised, droidspaces, along with all your modules and everything else under the sun, will be compromised too.

Since the daemon uses an abstract socket called @droidspaces, all apps are denied by SELinux anyway, even if I remove the checks. There’s no fix for that without patching SELinux to allow the "untrusted apps" domain to communicate with the socket. But:

We can’t allow untrusted apps to communicate with the daemon via SELinux either. Why? Because that would let any userspace app communicate with the droidspaces app and potentially with any socket in the system, which is extremely dangerous.

The daemon and client are baked into the same droidspaces binary. Also, the binary can directly execute commands if no daemon is found AND it has root. A 3-in-1 solution.

The app requires root anyway to install containers, etc., so even without strict UID checks, the app will partially work.

We can’t use droidspaces as a “command execution environment” for non-root processes to execute root commands needed for the app either. If a vulnerability in droidspaces is exploited, any non-root process could spawn a root shell.

The biggest concern is that the droidspaces binary can execute commands directly inside running containers using the run command. If any process could connect to the socket, it could enter container shells, execute commands, nuke containers, plant backdoors, etc.

This is a massive security risk.

So, until someone implements a kernelsu-like solution to “crown” the official droidspaces manager and block connections from everything else, I won’t implement such a feature.

Even if I did, it would overcomplicate the app’s code. Thanks to our 3-in-1 architecture, I didn’t have to touch any app code; the droidspaces binary acts as a client for the daemon if it detects the socket is alive.
💩1