agent: add separate glibc build with NVML support (#1618)

purego requires dynamic linking, so split the agent builds:
- Default: static binary without NVML (works on musl/alpine)
- Glibc: dynamic binary with NVML support via purego

Changes:
- Add glibc build tag to conditionally include NVML code
- Add beszel-agent-linux-amd64-glibc build/archive in goreleaser
- Update ghupdate to use glibc binary on glibc systems
- Switch nvidia dockerfile to golang:bookworm with -tags glibc
This commit is contained in:
henrygd
2026-01-12 15:38:13 -05:00
parent 6a1a98d73f
commit 3279a6ca53
8 changed files with 57 additions and 9 deletions

View File

@@ -5,6 +5,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"log/slog"
"maps"
"os/exec"
"regexp"
@@ -14,8 +15,6 @@ import (
"time"
"github.com/henrygd/beszel/internal/entities/system"
"log/slog"
)
const (

View File

@@ -1,4 +1,4 @@
//go:build (linux || windows) && amd64
//go:build amd64 && (windows || (linux && glibc))
package agent

View File

@@ -1,4 +1,4 @@
//go:build linux && amd64
//go:build glibc && linux && amd64
package agent

View File

@@ -1,4 +1,4 @@
//go:build (!linux && !windows) || !amd64
//go:build (!linux && !windows) || !amd64 || (linux && !glibc)
package agent

View File

@@ -19,11 +19,11 @@ func TestSystemdManagerGetServiceStats(t *testing.T) {
assert.NoError(t, err)
// Test with refresh = true
result := manager.getServiceStats(true)
result := manager.getServiceStats("any-service", true)
assert.Nil(t, result)
// Test with refresh = false
result = manager.getServiceStats(false)
result = manager.getServiceStats("any-service", false)
assert.Nil(t, result)
}