ov-layers/skills/tailscale/SKILL.md
Tailscale mesh VPN (tailscaled service). Installs the tailscale package from upstream, enables tailscaled.service via systemd. Use when adding Tailscale as a standalone systemd service to an image — distinct from the deploy-time Tailscale tunnel/sidecar model.
npx skillsauth add overthinkos/overthink-plugins tailscaleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | none |
| Ports | none (WireGuard uses UDP; no host port mapping) |
| Service | tailscaled.service (systemd, enabled at build time) |
| Install files | tasks: |
rpm:): tailscale from the upstream tailscale-stable repo (https://pkgs.tailscale.com/stable/fedora/tailscale.repo)pac:): tailscale# image.yml -- typical bootc composition
my-bootc-image:
base: "quay.io/fedora/fedora-bootc:43"
bootc: true
distro: ["fedora:43", fedora]
layers:
- bootc-base
- tailscale
- ...
The layer's cmd: task issues systemctl enable tailscaled.service at build time (suffixed with || true because offline bootc assembly can't fully activate a live systemd — same || true pattern used in /ov-layers:bootc-config for systemctl set-default graphical.target).
The image does not bring up the mesh on first boot — tailscale up --authkey=tskey-… is a runtime concern, not a build-time concern. Options:
sudo tailscale up and copy the login URL./etc/tailscale/authkey (out of scope for this layer)./ov-images:selkies-desktop-bootc — primary consumer (bootc VM that wants a tailnet identity at boot).Two declarative checks (build-scope):
tailscale-binary — /usr/bin/tailscale and /usr/sbin/tailscaled executables existtailscaled-unit-enabled — systemctl is-enabled tailscaled.service returns enabled/ov-layers:tailscale) — bakes the daemon into a system image as a first-class systemd service. The image runs its own tailnet node. Use for bootc/VM images./ov-layers:container-nesting — also installs the tailscale package, but as a tool inside a container-in-container harness (rootless podman with Tailscale-backed outbound). Different use case; don't use both in the same image./ov:sidecar, /ov:deploy) — a separate deployment-time decision that runs tailscale in a sidecar container alongside your app pod, giving the app a tailnet identity without baking the daemon into the app image. This is deploy.yml-only state and is not affected by whether this layer is present.All three can coexist, but for most cases you want exactly one.
/ov-layers:container-nesting — the previous home of the tailscale package (bundled with buildah/skopeo/docker for nested podman; separate concern)/ov-images:selkies-desktop-bootc — primary consumer/ov-layers:bootc-config — companion layer for bootc boot wiring (autologin, graphical target, supervisord user service)/ov:sidecar — deploy-time Tailscale sidecar pattern (alternative, not a replacement)/ov:deploy — deploy.yml tunnel/sidecar configuration/ov:layer — layer authoring reference/ov:test — declarative testing referenceUse when the user asks about:
tailscaled.service appears in a bootc image's service listtools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).