Add -s -w when building fleetd components to remove debugging information and reduce binary sizes (#43260)

Resolves #43259.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] QA'd all new/changed functionality manually

## fleetd/orbit/Fleet Desktop

- [x] Verified compatibility with the latest released version of Fleet
(see [Must
rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md))
- [x] Verified that fleetd runs on macOS, Linux and Windows
- [x] Verified auto-update works from the released version of component
to the new version (see [tools/tuf/test](../tools/tuf/test/README.md))
This commit is contained in:
Lucas Manuel Rodriguez 2026-04-08 18:30:05 -03:00 committed by GitHub
parent bf0df1c157
commit fa71b582d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 37 additions and 26 deletions

View file

@ -804,7 +804,7 @@ desktop-linux:
docker build -f Dockerfile-desktop-linux -t desktop-linux-builder .
docker run --rm -v $(shell pwd):/output desktop-linux-builder /bin/bash -c "\
mkdir -p /output/fleet-desktop && \
CGO_ENABLED=1 CC=musl-gcc go build -o /output/fleet-desktop/fleet-desktop -ldflags \"-linkmode external -extldflags \\\"-static\\\" -X=main.version=$(FLEET_DESKTOP_VERSION)\" /usr/src/fleet/orbit/cmd/desktop && \
CGO_ENABLED=1 CC=musl-gcc go build -o /output/fleet-desktop/fleet-desktop -ldflags \"-s -w -linkmode external -extldflags \\\"-static\\\" -X=main.version=$(FLEET_DESKTOP_VERSION)\" /usr/src/fleet/orbit/cmd/desktop && \
cd /output && \
tar czf desktop.tar.gz fleet-desktop && \
rm -r fleet-desktop"
@ -819,7 +819,7 @@ desktop-linux-arm64:
docker build -f Dockerfile-desktop-linux -t desktop-linux-builder .
docker run --rm -v $(shell pwd):/output desktop-linux-builder /bin/bash -c "\
mkdir -p /output/fleet-desktop && \
GOARCH=arm64 go build -o /output/fleet-desktop/fleet-desktop -ldflags "-X=main.version=$(FLEET_DESKTOP_VERSION)" /usr/src/fleet/orbit/cmd/desktop && \
GOARCH=arm64 go build -o /output/fleet-desktop/fleet-desktop -ldflags \"-s -w -X=main.version=$(FLEET_DESKTOP_VERSION)\" /usr/src/fleet/orbit/cmd/desktop && \
cd /output && \
tar czf desktop.tar.gz fleet-desktop && \
rm -r fleet-desktop"

View file

@ -37,7 +37,7 @@ GOOS=windows \
GOARCH=amd64 \
go build \
-trimpath \
-ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$VERSION \
-ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$VERSION \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=$COMMIT \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date=$DATE" \
-o ./orbit.exe ./orbit/cmd/orbit
@ -50,7 +50,7 @@ GOOS=linux \
GOARCH=amd64 \
go build \
-trimpath \
-ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$VERSION \
-ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$VERSION \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=$COMMIT \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date=$DATE" \
-o ./orbit-linux ./orbit/cmd/orbit

View file

@ -0,0 +1 @@
* Removed debugging symbols from orbit and Fleet Desktop executables.

View file

@ -19,6 +19,8 @@ builds:
flags:
- -trimpath
ldflags:
- -s
- -w
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version={{.Version}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit={{.Commit}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date={{.Date}}

View file

@ -23,6 +23,8 @@ builds:
flags:
- -trimpath
ldflags:
- -s
- -w
- -linkmode external -extldflags "-static"
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version={{.Version}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit={{.Commit}}

View file

@ -20,6 +20,8 @@ builds:
flags:
- -trimpath
ldflags:
- -s
- -w
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version={{.Version}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit={{.Commit}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date={{.Date}}

View file

@ -19,6 +19,8 @@ builds:
flags:
- -trimpath
ldflags:
- -s
- -w
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version={{.Version}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit={{.Commit}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date={{.Date}}

View file

@ -19,6 +19,8 @@ builds:
flags:
- -trimpath
ldflags:
- -s
- -w
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version={{.Version}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit={{.Commit}}
- -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date={{.Date}}

View file

@ -225,10 +225,10 @@ func buildTargetBinary(cmdDir string, version string, binaryPath string, arch st
// check if cmdDir contains desktop
// if it does, add -ldflags "-H=windowsgui" to exec.Command
if strings.Contains(cmdDir, "desktop") {
linkFlags := fmt.Sprintf("-H=windowsgui -X=main.version=%s", version)
linkFlags := fmt.Sprintf("-s -w -H=windowsgui -X=main.version=%s", version)
buildExec = exec.Command("go", "build", "-ldflags", linkFlags, "-o", outputBinary)
} else {
linkFlags := fmt.Sprintf("-X=github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=%s", version)
linkFlags := fmt.Sprintf("-s -w -X=github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=%s", version)
buildExec = exec.Command("go", "build", "-ldflags", linkFlags, "-o", outputBinary)
}
buildExec.Env = append(os.Environ(), "GOOS=windows", fmt.Sprintf("GOARCH=%s", arch))

View file

@ -106,7 +106,7 @@ func buildOrbit(binaryPath, arch, version, commit, date string) error {
/* #nosec G204 -- arguments are actually well defined */
buildExec := exec.Command("go", "build",
"-o", binaryPath,
"-ldflags", fmt.Sprintf("-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=%s -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=%s -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date=%s", version, commit, date),
"-ldflags", fmt.Sprintf("-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=%s -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=%s -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Date=%s", version, commit, date),
"./"+filepath.Join("orbit", "cmd", "orbit"),
)
buildExec.Env = append(os.Environ(), "GOOS=darwin", "GOARCH="+arch)

View file

@ -156,7 +156,7 @@ func createMacOSApp(version, authority string, notarize bool) error {
/* #nosec G204 -- arguments are actually well defined */
buildExec := exec.Command("go", "build",
"-o", amdBinaryPath,
"-ldflags", os.ExpandEnv("-X=main.version=$FLEET_DESKTOP_VERSION"),
"-ldflags", os.ExpandEnv("-s -w -X=main.version=$FLEET_DESKTOP_VERSION"),
"./"+filepath.Join("orbit", "cmd", "desktop"),
)
buildExec.Env = append(os.Environ(), "CGO_ENABLED=1", "GOOS=darwin", "GOARCH=amd64")
@ -172,7 +172,7 @@ func createMacOSApp(version, authority string, notarize bool) error {
/* #nosec G204 -- arguments are actually well defined */
buildExec = exec.Command("go", "build",
"-o", armBinaryPath,
"-ldflags", os.ExpandEnv("-X=main.version=$FLEET_DESKTOP_VERSION"),
"-ldflags", os.ExpandEnv("-s -w -X=main.version=$FLEET_DESKTOP_VERSION"),
"./"+filepath.Join("orbit", "cmd", "desktop"),
)
buildExec.Env = append(os.Environ(), "CGO_ENABLED=1", "GOOS=darwin", "GOARCH=arm64")

View file

@ -8,26 +8,26 @@ mkdir -p $SCRIPT_DIR/macos $SCRIPT_DIR/windows $SCRIPT_DIR/linux $SCRIPT_DIR/lin
# 1. build hello_world table extensions
GOOS=darwin GOARCH=amd64 go build -o $SCRIPT_DIR/macos/hello_world_macos_amd64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=arm64 go build -o $SCRIPT_DIR/macos/hello_world_macos_arm64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=amd64 go build -ldflags '-s -w' -o $SCRIPT_DIR/macos/hello_world_macos_amd64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=arm64 go build -ldflags '-s -w' -o $SCRIPT_DIR/macos/hello_world_macos_arm64.ext $SCRIPT_DIR
lipo -create $SCRIPT_DIR/macos/hello_world_macos_amd64.ext $SCRIPT_DIR/macos/hello_world_macos_arm64.ext -output $SCRIPT_DIR/macos/hello_world_macos.ext
rm $SCRIPT_DIR/macos/hello_world_macos_amd64.ext $SCRIPT_DIR/macos/hello_world_macos_arm64.ext
GOOS=windows GOARCH=amd64 go build -o $SCRIPT_DIR/windows/hello_world_windows.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=arm64 go build -o $SCRIPT_DIR/windows-arm64/hello_world_windows_arm64.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=amd64 go build -ldflags '-s -w' -o $SCRIPT_DIR/windows/hello_world_windows.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=arm64 go build -ldflags '-s -w' -o $SCRIPT_DIR/windows-arm64/hello_world_windows_arm64.ext.exe $SCRIPT_DIR
GOOS=linux GOARCH=amd64 go build -o $SCRIPT_DIR/linux/hello_world_linux.ext $SCRIPT_DIR
GOOS=linux GOARCH=arm64 go build -o $SCRIPT_DIR/linux-arm64/hello_world_linux_arm64.ext $SCRIPT_DIR
GOOS=linux GOARCH=amd64 go build -ldflags '-s -w' -o $SCRIPT_DIR/linux/hello_world_linux.ext $SCRIPT_DIR
GOOS=linux GOARCH=arm64 go build -ldflags '-s -w' -o $SCRIPT_DIR/linux-arm64/hello_world_linux_arm64.ext $SCRIPT_DIR
# 2. build hello_mars table extensions
GOOS=darwin GOARCH=amd64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/macos/hello_mars_macos_amd64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=arm64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/macos/hello_mars_macos_arm64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=amd64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/macos/hello_mars_macos_amd64.ext $SCRIPT_DIR
GOOS=darwin GOARCH=arm64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/macos/hello_mars_macos_arm64.ext $SCRIPT_DIR
lipo -create $SCRIPT_DIR/macos/hello_mars_macos_amd64.ext $SCRIPT_DIR/macos/hello_mars_macos_arm64.ext -output $SCRIPT_DIR/macos/hello_mars_macos.ext
rm $SCRIPT_DIR/macos/hello_mars_macos_amd64.ext $SCRIPT_DIR/macos/hello_mars_macos_arm64.ext
GOOS=windows GOARCH=amd64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/windows/hello_mars_windows.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=arm64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/windows-arm64/hello_mars_windows_arm64.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=amd64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/windows/hello_mars_windows.ext.exe $SCRIPT_DIR
GOOS=windows GOARCH=arm64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/windows-arm64/hello_mars_windows_arm64.ext.exe $SCRIPT_DIR
GOOS=linux GOARCH=amd64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/linux/hello_mars_linux.ext $SCRIPT_DIR
GOOS=linux GOARCH=arm64 go build -ldflags '-X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/linux-arm64/hello_mars_linux_arm64.ext $SCRIPT_DIR
GOOS=linux GOARCH=amd64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/linux/hello_mars_linux.ext $SCRIPT_DIR
GOOS=linux GOARCH=arm64 go build -ldflags '-s -w -X "main.extensionName=test_extensions.hello_mars" -X "main.tableName=hello_mars" -X "main.columnValue=mars"' -o $SCRIPT_DIR/linux-arm64/hello_mars_linux_arm64.ext $SCRIPT_DIR

View file

@ -20,9 +20,9 @@ source ./tools/tuf/test/load_orbit_version_vars.sh
Build:
```sh
GOOS=darwin GOARCH=amd64 go build -ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit-darwin ./orbit/cmd/orbit
GOOS=linux GOARCH=amd64 go build -ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit-linux ./orbit/cmd/orbit
GOOS=windows GOARCH=amd64 go build -ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit.exe ./orbit/cmd/orbit
GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit-darwin ./orbit/cmd/orbit
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit-linux ./orbit/cmd/orbit
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION" -o orbit.exe ./orbit/cmd/orbit
```
Push:
```sh

View file

@ -111,7 +111,7 @@ source ./tools/tuf/test/load_orbit_version_vars.sh
# Compile a new version of Orbit:
GOOS=windows GOARCH=amd64 go build \
-o orbit-windows.exe \
-ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION \
-ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=$ORBIT_COMMIT" \
./orbit/cmd/orbit

View file

@ -145,7 +145,7 @@ for system in $SYSTEMS; do
GOARCH=$goarch_value \
go build \
-race=$race_value \
-ldflags="-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION \
-ldflags="-s -w -X github.com/fleetdm/fleet/v4/orbit/pkg/build.Version=$ORBIT_VERSION \
-X github.com/fleetdm/fleet/v4/orbit/pkg/build.Commit=$ORBIT_COMMIT" \
-o $orbit_target ./orbit/cmd/orbit
fi