Skip to content

feat: add tailscale to mod-v2.json#18

Open
chicohaager wants to merge 1 commit intoIceWhaleTech:mainfrom
chicohaager:add-tailscale-sysext
Open

feat: add tailscale to mod-v2.json#18
chicohaager wants to merge 1 commit intoIceWhaleTech:mainfrom
chicohaager:add-tailscale-sysext

Conversation

@chicohaager
Copy link
Copy Markdown

Summary

Adds Tailscale as a community systemd-sysext module to the ZimaOS Mod-Store.

What it ships

tailscaled runs as a native systemd service on the ZimaOS host — same model the upstream Buildroot recipe uses. State lives at /DATA/AppData/tailscale/ (so it survives ZimaOS updates). The module mirrors the chicohaager/cron precedent already in this list.

/usr/bin/{tailscale,tailscaled}
/usr/lib/systemd/system/tailscaled.service
/usr/lib/extension-release.d/extension-release.tailscale   # ID=_any

Why sysext and not Docker

Subnet-router and exit-node features need direct access to the host network stack (TUN, netfilter, policy routing). Running tailscaled inside a container on ZimaOS works for plain mesh, but loses the routing features and adds NAT hops. The sysext keeps the kernel fast-path and integrates with systemd-resolved.

Verification

Built and running on a ZimaCube Pro (ZimaOS v1.6.1, kernel 6.12.25, x86_64):

$ systemd-sysext list
HIERARCHY EXTENSIONS              SINCE
/usr      cron, tailscale, ...    ...

$ systemctl is-active tailscaled
active

$ tailscale status
... (logged in, IPv4 mesh up)

The squashfs is built with -comp gzip because the ZimaOS kernel does not enable CONFIG_SQUASHFS_ZSTD — using zstd here makes systemd-sysext refresh fail with Invalid argument.

One known limitation (kernel-side, not module-side)

Tailscale logs disabling tunneled IPv6 due to system IPv6 config: kernel doesn't support IPv6 policy routing. This is because the ZimaOS kernel ships without CONFIG_IPV6_MULTIPLE_TABLES / CONFIG_IPV6_SUBTREES. IPv4 tailnet is fully functional; only IPv6 tunneling is disabled. A separate kernel-config request can be filed against IceWhaleTech/ZimaOS if that's of interest — the sysext module itself can't fix this.

Test plan

  • mod-v2.json is valid JSON (python3 -m json.tool)
  • Entry follows the same repo-pattern as zima_cron and doconverter
  • Release asset tailscale.raw exists at the linked URL and is publicly downloadable
  • Module installs and runs on ZimaOS v1.6.1 (verified on hardware)

Adds the Tailscale systemd-sysext module to the ZimaOS Mod-Store.
The module ships tailscaled as a native systemd service with state
under /DATA/AppData/tailscale, mirroring the upstream Buildroot recipe.
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.

1 participant