Skip to content

edf#1

Merged
superturtlee merged 25 commits into
superturtlee:mainfrom
ravindu644:main
Jul 1, 2026
Merged

edf#1
superturtlee merged 25 commits into
superturtlee:mainfrom
ravindu644:main

Conversation

@superturtlee

Copy link
Copy Markdown
Owner

No description provided.

GarryStraitYT and others added 25 commits June 27, 2026 20:46
…device and organization (#222)

* Update community-supported devices list

This commit adds Motorola Moto G Stylus 5G (2022) [milanf/XT2215] to the list of supported devices.

Additionally, it reorganizes the table to be sorted by kernel version instead of whenever the device was added to the list, improving readability and maintenance.

Tests performed: None (Documentation update)

* Group devices by kernel version in docs

Add kernel-version group headers to Documentation/community-supported-devices.md (5.4, 5.10, 5.15, 6.1, 6.6, 6.12) to improve readability and organization of the device compatibility table. Minor table formatting adjustments were made for a few device rows to align them under the new sections.
Added translation using Weblate (Tamil)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (German)

Currently translated at 97.6% (490 of 502 strings)






Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/de/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/zh_Hant/
Translation: Droidspaces/Strings

Co-authored-by: Jung Chi Wang <snowwolf725@gmail.com>
Co-authored-by: MonkiFantasy <execvp@qq.com>
Co-authored-by: Sandmann79 <sandmann79@gmx.net>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
Updated by "Remove blank strings" add-on in Weblate.

Update translation files

Updated by "Remove blank strings" add-on in Weblate.

Translated using Weblate (Tamil)

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Tamil)

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Tamil)

Currently translated at 100.0% (3 of 3 strings)

Translated using Weblate (Pangasinan (pag_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Pangasinan (pag_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Iloko (ilo_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Iloko (ilo_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Filipino)

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Filipino)

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Cebuano (ceb_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Cebuano (ceb_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (cbk_PH (generated) (cbk_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (cbk_PH (generated) (cbk_PH))

Currently translated at 45.6% (229 of 502 strings)

Translated using Weblate (Portuguese)

Currently translated at 49.4% (248 of 502 strings)

Translated using Weblate (Portuguese)

Currently translated at 49.4% (248 of 502 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (502 of 502 strings)

Translated using Weblate (Italian)

Currently translated at 86.4% (434 of 502 strings)

Translated using Weblate (Italian)

Currently translated at 86.4% (434 of 502 strings)

Translated using Weblate (Indonesian)

Currently translated at 99.4% (499 of 502 strings)

Translated using Weblate (Indonesian)

Currently translated at 99.4% (499 of 502 strings)

Translated using Weblate (Indonesian)

Currently translated at 66.6% (2 of 3 strings)

Translated using Weblate (Japanese)

Currently translated at 82.2% (413 of 502 strings)

Translated using Weblate (Japanese)

Currently translated at 82.2% (413 of 502 strings)

Translated using Weblate (Japanese)

Currently translated at 66.6% (2 of 3 strings)

Translated using Weblate (Sinhala)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Khmer (Central))

Currently translated at 89.8% (451 of 502 strings)

Translated using Weblate (Khmer (Central))

Currently translated at 89.8% (451 of 502 strings)

Translated using Weblate (Romanian)

Currently translated at 72.9% (366 of 502 strings)

Translated using Weblate (Romanian)

Currently translated at 72.9% (366 of 502 strings)

Translated using Weblate (Romanian)

Currently translated at 66.6% (2 of 3 strings)

Translated using Weblate (Sinhala)

Currently translated at 62.7% (315 of 502 strings)

Translated using Weblate (Sinhala)

Currently translated at 62.7% (315 of 502 strings)

Translated using Weblate (Turkish)

Currently translated at 62.3% (313 of 502 strings)

Translated using Weblate (Turkish)

Currently translated at 62.3% (313 of 502 strings)

Translated using Weblate (Turkish)

Currently translated at 62.3% (313 of 502 strings)

Translated using Weblate (Turkish)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Russian)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Hindi)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (French)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Spanish)

Currently translated at 33.3% (1 of 3 strings)

Translated using Weblate (Russian)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Russian)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Hindi)

Currently translated at 46.8% (235 of 502 strings)

Translated using Weblate (Hindi)

Currently translated at 46.8% (235 of 502 strings)

Translated using Weblate (French)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (French)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Spanish)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (Spanish)

Currently translated at 45.0% (226 of 502 strings)

Translated using Weblate (German)

Currently translated at 97.6% (490 of 502 strings)

Translated using Weblate (German)

Currently translated at 97.6% (490 of 502 strings)






Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/es/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/fr/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/hi/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/id/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/ja/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/ro/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/ru/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/si/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/ta/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/plurals/tr/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/cbk_PH/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ceb_PH/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/de/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/es/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/fil/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/fr/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/hi/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/id/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ilo_PH/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/it/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ja/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/km/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/pag_PH/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/pt/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ro/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ru/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/si/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/ta/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/tr/
Translate-URL: https://hosted.weblate.org/projects/droidspaces/strings/zh_Hant/
Translation: Droidspaces/Plurals
Translation: Droidspaces/Strings

Co-authored-by: Ravindu Deshan <Droidcasts@protonmail.com>
Co-authored-by: Yusuf <ersemyus23@gmail.com>
Co-authored-by: தமிழ்நேரம் <tamilneram247@gmail.com>
A delegated-LAN (gateway-mode) client loses its router whenever its
gateway container reboots: the gateway's netns dies and takes the
gateway-side veth with it, so the client's app veth survives on the
bridge but the segment has no router.  Clients also could not be wired at
all until their gateway happened to be up.

Make the gateway own the wiring, end to end:

- gateway_wire_client() does the whole client wiring from the host side -
  bridge + gateway uplink, the app veth, a stable MAC, and the in-netns
  eth0 rename/up - so it behaves identically whether the client is just
  starting or already running.  The gateway-mode child only brings up lo.

- On every boot cycle the gateway container's monitor calls
  ds_net_rewire_gateway_clients(), which scans the running containers and
  runs gateway_wire_client() for each one that delegates to it.  That
  re-establishes the gateway-side cable and every client's eth0 in the
  gateway's current netns, with no client restart.

- A client started while its gateway is down now wires nothing and defers
  entirely to the gateway.  This also closes a race: the client can no
  longer bake in gateway/LAN settings that the user edits before the
  gateway starts - the gateway wires each client from its current config.

Supporting fixes:

- Drop NLM_F_ACK on RTM_GETLINK: a successful GETLINK already replies with
  RTM_NEWLINK, so the extra ACK left a stray datagram in the socket buffer
  that desynced the next request's reply (ds_nl_link_exists false
  positives).  Keep reading until our sequence matches.

- Give gateway clients distinct veth prefixes (ds-c/ds-q) so the NAT
  last-container refcount cannot miscount them as live NAT containers.

- Pin a stable, segment-derived MAC on the gateway-side cable and
  move+rename it into the gateway atomically, so OpenWrt's netifd sees one
  persistent eth1 instead of a churning random-MAC device.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Drop -f from e2fsck: it now exits fast on a clean image and only runs a full repair when the fs is actually marked unclean.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Optional manual override for NAT mode.  When --upstream is set, the WAN
is forced through the listed interface(s) and automatic uplink detection
is disabled entirely - it never hops to whatever interface netd marks as
the active default network.

Within the pinned list it does still fail over in priority (list) order:
the route monitor re-resolves on every link/route change and selects the
first listed interface that is up and has a default route.  So a pin like
"wlan0,rmnet*" prefers Wi-Fi and falls back to mobile data when Wi-Fi
drops - the hop stays inside the user's chosen set, never outside it.
Literals and wildcards are both supported (use rmnet* for mobile data,
whose interface number is not stable across reconnects).

If no pinned interface is up at start, or the active one disappears
mid-run, the FROM rule is removed (so traffic can't leak onto a recycled
table) and reinstalled automatically when one returns.  Unset = today's
automatic detection, unchanged.

The CSV parser is shared between the CLI and config loader; the app
restores the upstream-interface picker as optional with a pinning hint
(string keys renamed to upstream_interface_title/_hint across locales).

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
…dge kernels

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
… pinning

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Move ds_net_rewire_gateway_clients() ahead of the DONE handshake write.
The DONE write unblocks the container init to pivot_root and exec the
real init (procd/netifd); plugging client LAN cables (eth1) after it
hot-plugged them into a gateway whose netifd was already booting, racing
its LAN bring-up. Wire the client cables first, then unblock, so the
gateway execs its init with every client cable already present -
mirroring how a client's eth0 is wired before its own DONE.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Fixes OpenWRT external and internal reboot.

On shutdown/reboot OpenWRT remounts its root read-only, leaving our
mount point under /mnt/Droidspaces/<name> read-only too. External and
internal reboots never unmount the rootfs.img (to keep restarts fast),
so the next boot reuses that still-read-only mount and pivot_root fails
to create .old_root ("Read-only file system") - the container never
booted.

Force the image mount read-write in internal_boot() right after the
rootfs self-bind - the single point every boot path funnels through.
Skipped for directory rootfs and volatile mode; no-op if already RW.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Use the short commit hash instead of the build date, and default the
tag component to CI instead of test for non-release builds.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
Match the CI apk naming: droidspaces-v<version>-<commit>.tar.gz.
Falls back to the date when not in a git checkout.

Signed-off-by: ravindu644 <droidcasts@protonmail.com>
@superturtlee
superturtlee merged commit eb5f211 into superturtlee:main Jul 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants