ipn/store: omit AWS & Kubernetes support on 'small' Linux GOARCHes

This removes AWS and Kubernetes support from Linux binaries by default
on GOARCH values where people don't typically run on AWS or use
Kubernetes, such as 32-bit mips CPUs.

It primarily focuses on optimizing for the static binaries we
distribute. But for people building it themselves, they can set
ts_kube or ts_aws (the opposite of ts_omit_kube or ts_omit_aws) to
force it back on.

Makes tailscaled binary ~2.3MB (~7%) smaller.

Updates #7272, #10627 etc

Change-Id: I42a8775119ce006fa321462cb2d28bc985d1c146
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2024-04-17 09:11:57 -07:00 committed by Brad Fitzpatrick
parent 449be38e03
commit 21a0fe1b9b
4 changed files with 26 additions and 7 deletions

View File

@ -49,6 +49,7 @@ case "$TARGET" in
-X tailscale.com/version.gitCommitStamp=${VERSION_GIT_HASH}" \ -X tailscale.com/version.gitCommitStamp=${VERSION_GIT_HASH}" \
--base="${BASE}" \ --base="${BASE}" \
--tags="${TAGS}" \ --tags="${TAGS}" \
--gotags="ts_kube" \
--repos="${REPOS}" \ --repos="${REPOS}" \
--push="${PUSH}" \ --push="${PUSH}" \
--target="${PLATFORM}" \ --target="${PLATFORM}" \

18
ipn/store/store_aws.go Normal file
View File

@ -0,0 +1,18 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
//go:build (ts_aws || (linux && (arm64 || amd64))) && !ts_omit_aws
package store
import (
"tailscale.com/ipn/store/awsstore"
)
func init() {
registerAvailableExternalStores = append(registerAvailableExternalStores, registerAWSStore)
}
func registerAWSStore() {
Register("arn:", awsstore.New)
}

View File

@ -1,25 +1,25 @@
// Copyright (c) Tailscale Inc & AUTHORS // Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
//go:build (ts_kube || (linux && (arm64 || amd64))) && !ts_omit_kube
package store package store
import ( import (
"strings" "strings"
"tailscale.com/ipn" "tailscale.com/ipn"
"tailscale.com/ipn/store/awsstore"
"tailscale.com/ipn/store/kubestore" "tailscale.com/ipn/store/kubestore"
"tailscale.com/types/logger" "tailscale.com/types/logger"
) )
func init() { func init() {
registerAvailableExternalStores = registerExternalStores registerAvailableExternalStores = append(registerAvailableExternalStores, registerKubeStore)
} }
func registerExternalStores() { func registerKubeStore() {
Register("kube:", func(logf logger.Logf, path string) (ipn.StateStore, error) { Register("kube:", func(logf logger.Logf, path string) (ipn.StateStore, error) {
secretName := strings.TrimPrefix(path, "kube:") secretName := strings.TrimPrefix(path, "kube:")
return kubestore.New(logf, secretName) return kubestore.New(logf, secretName)
}) })
Register("arn:", awsstore.New)
} }

View File

@ -28,13 +28,13 @@
var regOnce sync.Once var regOnce sync.Once
var registerAvailableExternalStores func() var registerAvailableExternalStores []func()
func registerDefaultStores() { func registerDefaultStores() {
Register("mem:", mem.New) Register("mem:", mem.New)
if registerAvailableExternalStores != nil { for _, f := range registerAvailableExternalStores {
registerAvailableExternalStores() f()
} }
} }