Compare commits

..
Author SHA1 Message Date
Lumpiasty 16fd2170db Merge pull request 'chore(deps): update busybox docker tag to v1.38.0' (#17) from renovate/busybox-1.x into main
ci/woodpecker/push/pr-build Pipeline was canceled
ci/woodpecker/push/release-tag Pipeline was canceled
Reviewed-on: #17
2026-06-12 00:30:20 +00:00
Lumpiasty b7f3bdbbc6 Merge pull request 'chore(deps): update alpine docker tag to v3.24.0' (#18) from renovate/alpine-3.x into main
ci/woodpecker/push/release-tag Pipeline is pending
ci/woodpecker/push/pr-build Pipeline was canceled
Reviewed-on: #18
2026-06-12 00:30:12 +00:00
Lumpiasty c2fee4d239 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.220.0' (#12) from renovate/renovate-renovate-43.x into main
ci/woodpecker/push/release-tag Pipeline is pending
ci/woodpecker/push/pr-build Pipeline was canceled
Reviewed-on: #12
2026-06-12 00:30:02 +00:00
Lumpiasty 568f114c6e Merge pull request 'State dir clarifications' (#21) from feat/state-dir-docs into main
ci/woodpecker/push/release-tag Pipeline was successful
ci/woodpecker/push/pr-build Pipeline was successful
Reviewed-on: #21
2026-06-12 00:17:57 +00:00
Lumpiasty 6ba07dd23b State dir clarifications
ci/woodpecker/pr/pr-build Pipeline was successful
2026-06-12 02:09:51 +02:00
Renovate Bot 75b95fe4c4 chore(deps): update renovate/renovate docker tag to v43.220.0
ci/woodpecker/pr/pr-build Pipeline was successful
2026-06-11 02:00:59 +00:00
Renovate Bot c8b5101416 chore(deps): update alpine docker tag to v3.24.0
ci/woodpecker/pr/pr-build Pipeline was successful
2026-06-11 02:00:57 +00:00
Renovate Bot cba8447fa7 chore(deps): update busybox docker tag to v1.38.0
ci/woodpecker/pr/pr-build Pipeline was successful
2026-06-04 02:01:01 +00:00
5 changed files with 37 additions and 3 deletions
+11
View File
@@ -9,10 +9,21 @@
# Reports pass/fail status back to Gitea, so it shows up as a required check on
# the PR.
# Doc-only changes can't affect the image, so they don't trigger the build.
# NOTE: if Gitea is ever configured to REQUIRE this check for merging, a
# doc-only PR will have no check at all — exempt such PRs or merge manually.
# Renovate PRs always touch the Dockerfile or pipeline files, so the
# automerge gate is unaffected by these exclusions.
when:
- event: pull_request
path:
exclude: &doc_paths
- '**/*.md'
- 'docs/**'
- event: push
branch: main
path:
exclude: *doc_paths
steps:
- name: Build all arches (no push)
+7
View File
@@ -13,9 +13,16 @@
# unchanged, so no tag is created and nothing is released — they ride along
# with the next Tailscale bump or manual tag.
# Skipped for doc-only pushes: TAILSCALE_VERSION lives in the Dockerfile, so a
# push that doesn't touch non-doc files can never introduce a new version to
# tag (the job would just no-op after spinning up OpenBao + git containers).
when:
- event: push
branch: main
path:
exclude:
- '**/*.md'
- 'docs/**'
steps:
- name: Get git token from OpenBao
+1 -1
View File
@@ -46,7 +46,7 @@ steps:
- bao kv get -mount secret -field GITHUB_COM_TOKEN renovate > /woodpecker/github_com_token
- name: renovate
# Renovate's built-in "woodpecker" manager tracks this image automatically.
image: renovate/renovate:43.207.4
image: renovate/renovate:43.220.0
environment:
# --- platform / target ---
RENOVATE_PLATFORM: gitea
+2 -2
View File
@@ -213,10 +213,10 @@ RUN printf '%s\n' \
# This stage runs on the TARGET platform (no --platform override): gcc then
# produces native target-arch binaries directly. Under buildx this is
# transparently emulated via binfmt/QEMU for non-native targets.
FROM alpine:3.23.4@sha256:5b10f432ef3da1b8d4c7eb6c487f2f5a8f096bc91145e68878dd4a5019afde11 AS busybox
FROM alpine:3.24.0@sha256:a2d49ea686c2adfe3c992e47dc3b5e7fa6e6b5055609400dc2acaeb241c829f4 AS busybox
# renovate: datasource=docker depName=busybox versioning=docker
ARG BUSYBOX_VERSION=1.37.0
ARG BUSYBOX_VERSION=1.38.0
RUN apk add --no-cache build-base linux-headers wget bzip2 perl upx
+16
View File
@@ -294,6 +294,22 @@ Only the small, rarely-written state file touches flash; the socket dir is
tmpfs. The netmap is held in memory only — see
[Why netmap disk-caching is removed](#why-netmap-disk-caching-is-removed).
### What lives in the state dir
| File | Purpose | Write frequency |
|---|---|---|
| `tailscaled.state` | Node identity, auth keys, prefs | On auth / key rotation / prefs change |
| `derpmap.cached.json` | Cached DERP relay server list for **bootstrap DNS**: at cold start with broken/unavailable DNS, tailscaled asks DERP servers to resolve the control plane. The binary ships a static DERP list, but it goes stale; this cache keeps the current one. | Once at first auth, then **only when Tailscale's relay infrastructure changes** (a few times a year). `dnsfallback.UpdateCache` has a deep-equal guard and skips the write when the DERP map is unchanged — netmap churn never touches it. |
`derpmap.cached.json` is intentionally **kept** despite the flash-wear policy:
the policy targets *frequent* writes (netmap deltas, logs), not one-shot
caches. On a router this cache is genuinely useful — after a power outage the
device may boot with WAN up but upstream DNS broken, exactly the case where a
fresh DERP list lets the node reach the control plane anyway. With
`cachenetmap` omitted, this file and `tailscaled.state` are the only cold-start
resilience the node has. (There is no `ts_omit_*` tag for it; it is written
only because `--statedir` is set.)
## Flash wear protection
Several measures are in place to avoid wearing out internal flash: