Skip to content

Commit

Permalink
drop versions older than 1.62 (#2405)
Browse files Browse the repository at this point in the history
  • Loading branch information
kradalby authored Feb 5, 2025
1 parent f12cb2e commit 9ae3570
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 21 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## Next


## 0.25.0 (2025-02-xx)

### BREAKING

- Authentication flow has been rewritten
Expand All @@ -13,6 +16,8 @@
[#1310](https://github.com/juanfont/headscale/issues/1310)).
- A logged out node logging in with the same user will replace the existing
node.
- Remove support for Tailscale clients older than 1.62 (Capability version 87)
[#2405](https://github.com/juanfont/headscale/pull/2405)

### Changes

Expand Down
4 changes: 3 additions & 1 deletion hscontrol/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,8 @@ func nodesChangedHook(db *db.HSDatabase, polMan policy.PolicyManager, notif *not

// Serve launches the HTTP and gRPC server service Headscale and the API.
func (h *Headscale) Serve() error {
capver.CanOldCodeBeCleanedUp()

if profilingEnabled {
if profilingPath != "" {
err := os.MkdirAll(profilingPath, os.ModePerm)
Expand All @@ -566,7 +568,7 @@ func (h *Headscale) Serve() error {

log.Info().
Caller().
Str("minimum_version", capver.TailscaleVersion(MinimumCapVersion)).
Str("minimum_version", capver.TailscaleVersion(capver.MinSupportedCapabilityVersion)).
Msg("Clients with a lower minimum version will be rejected")

// Fetch an initial DERP Map before we start serving
Expand Down
14 changes: 14 additions & 0 deletions hscontrol/capver/capver.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,20 @@ import (
"tailscale.com/util/set"
)

const MinSupportedCapabilityVersion tailcfg.CapabilityVersion = 88

// CanOldCodeBeCleanedUp is intended to be called on startup to see if
// there are old code that can ble cleaned up, entries should contain
// a CapVer where something can be cleaned up and a panic if it can.
// This is only intended to catch things in tests.
//
// All uses of Capability version checks should be listed here.
func CanOldCodeBeCleanedUp() {
if MinSupportedCapabilityVersion >= 111 {
panic("LegacyDERP can be cleaned up in tail.go")
}
}

func tailscaleVersSorted() []string {
vers := xmaps.Keys(tailscaleToCapVer)
sort.Strings(vers)
Expand Down
13 changes: 13 additions & 0 deletions hscontrol/capver/capver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,19 @@ func TestTailscaleLatestMajorMinor(t *testing.T) {
}{
{3, false, []string{"v1.76", "v1.78", "v1.80"}},
{2, true, []string{"1.78", "1.80"}},
// Lazy way to see all supported versions
{10, true, []string{
"1.62",
"1.64",
"1.66",
"1.68",
"1.70",
"1.72",
"1.74",
"1.76",
"1.78",
"1.80",
}},
{0, false, nil},
}

Expand Down
10 changes: 3 additions & 7 deletions hscontrol/noise.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,8 @@ func (ns *noiseServer) earlyNoise(protocolVersion int, writer io.Writer) error {
return nil
}

const (
MinimumCapVersion tailcfg.CapabilityVersion = 82
)

func isSupportedVersion(version tailcfg.CapabilityVersion) bool {
return version >= MinimumCapVersion
return version >= capver.MinSupportedCapabilityVersion
}

func rejectUnsupported(
Expand All @@ -168,9 +164,9 @@ func rejectUnsupported(
if !isSupportedVersion(version) {
log.Error().
Caller().
Int("minimum_cap_ver", int(MinimumCapVersion)).
Int("minimum_cap_ver", int(capver.MinSupportedCapabilityVersion)).
Int("client_cap_ver", int(version)).
Str("minimum_version", capver.TailscaleVersion(MinimumCapVersion)).
Str("minimum_version", capver.TailscaleVersion(capver.MinSupportedCapabilityVersion)).
Str("client_version", capver.TailscaleVersion(version)).
Str("node_key", nkey.ShortString()).
Str("machine_key", mkey.ShortString()).
Expand Down
13 changes: 0 additions & 13 deletions integration/scenario.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,6 @@ const (

var usePostgresForTest = envknob.Bool("HEADSCALE_INTEGRATION_POSTGRES")

func enabledVersions(vs map[string]bool) []string {
var ret []string
for version, enabled := range vs {
if enabled {
ret = append(ret, version)
}
}

sort.Sort(sort.Reverse(sort.StringSlice(ret)))

return ret
}

var (
errNoHeadscaleAvailable = errors.New("no headscale available")
errNoUserAvailable = errors.New("no user available")
Expand Down

0 comments on commit 9ae3570

Please sign in to comment.