Rework build system; cut release 1.3.1-1
Replace the dpkg-buildpackage / debhelper rig with the same pattern
used in vpp-maglev: a Makefile that cross-compiles CGO-free static
binaries for amd64 and arm64, plus a debian/build-deb.sh that stages
the .deb directly with dpkg-deb. The two arch packages drop into
build/ and run on any glibc/musl Linux of the matching arch.
VERSION is parsed once from debian/changelog and injected at link
time via -ldflags "-X 'main.Version=...' -X 'main.Commit=...' -X
'main.Date=...'", so 'govpp-snmp-agentx --version' is the source of
truth for which build is running. main.go's Version constant becomes
a var to make this work; the old sync-version make target is gone.
Removes the now-unused debian/{control,rules,postinst,prerm,*.debhelper}
files and adds build/ to .gitignore.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
govpp-snmp-agentx
|
||||
vppcfg.yaml
|
||||
build/
|
||||
|
||||
# Debian packaging artifacts
|
||||
debian/.debhelper/
|
||||
|
||||
@@ -1,29 +1,46 @@
|
||||
PROG = govpp-snmp-agentx
|
||||
PROG := govpp-snmp-agentx
|
||||
MODULE := govpp-snmp-agentx
|
||||
NATIVE_ARCH := $(shell go env GOARCH)
|
||||
VERSION := ${shell head -1 debian/changelog | sed -n 's/.*(\([^)]*\)).*/\1/p'}
|
||||
COMMIT_HASH := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||||
DATE := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
LDFLAGS := -s -w \
|
||||
-X 'main.Version=$(VERSION)' \
|
||||
-X 'main.Commit=$(COMMIT_HASH)' \
|
||||
-X 'main.Date=$(DATE)'
|
||||
|
||||
.PHONY: build test clean pkg-deb sync-version
|
||||
# CGO_ENABLED=0 produces a fully static binary: the same .deb runs on
|
||||
# any glibc/musl Linux of the matching arch, and govpp itself has no
|
||||
# cgo dependency, so this is a no-op for VPP API compatibility.
|
||||
export CGO_ENABLED := 0
|
||||
|
||||
# Build the binary
|
||||
build:
|
||||
cd src && go build -o ../$(PROG) .
|
||||
.PHONY: help all build build-amd64 build-arm64 test pkg-deb clean
|
||||
|
||||
# Run all tests
|
||||
test:
|
||||
help: ## Show this help
|
||||
@printf "Usage: make <target>\n\nTargets:\n"
|
||||
@awk -F ':.*## ' '/^[A-Za-z][A-Za-z0-9_-]*:.*## / {printf " %-16s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
|
||||
all: build ## Alias for build (native arch)
|
||||
|
||||
build: ## Build the binary for the host architecture
|
||||
mkdir -p build/$(NATIVE_ARCH)
|
||||
cd src && go build -ldflags "$(LDFLAGS)" -o ../build/$(NATIVE_ARCH)/$(PROG) .
|
||||
|
||||
build-amd64: ## Cross-build the binary for linux/amd64
|
||||
mkdir -p build/amd64
|
||||
cd src && GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ../build/amd64/$(PROG) .
|
||||
|
||||
build-arm64: ## Cross-build the binary for linux/arm64
|
||||
mkdir -p build/arm64
|
||||
cd src && GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o ../build/arm64/$(PROG) .
|
||||
|
||||
test: ## Run all Go unit tests
|
||||
cd src && go test ./...
|
||||
|
||||
# Clean build artifacts
|
||||
clean:
|
||||
pkg-deb: build-amd64 build-arm64 ## Build .deb packages for amd64 and arm64
|
||||
debian/build-deb.sh $(PROG) amd64 $(VERSION)
|
||||
debian/build-deb.sh $(PROG) arm64 $(VERSION)
|
||||
|
||||
clean: ## Remove build artifacts
|
||||
rm -rf build/
|
||||
rm -f $(PROG)
|
||||
[ -d debian/go ] && chmod -R +w debian/go || true
|
||||
rm -rf debian/.debhelper debian/.gocache debian/go debian/$(PROG) debian/files debian/*.substvars debian/debhelper-build-stamp
|
||||
rm -f ../$(PROG)_*.deb ../$(PROG)_*.changes ../$(PROG)_*.buildinfo
|
||||
|
||||
# Sync version from debian/changelog to main.go
|
||||
sync-version:
|
||||
@echo "Syncing version from debian/changelog to main.go..."
|
||||
@VERSION=$$(head -1 debian/changelog | sed -n 's/.*(\([^)]*\)).*/\1/p'); \
|
||||
sed -i 's/^const Version = ".*"/const Version = "'"$$VERSION"'"/' src/main.go; \
|
||||
echo "Updated Version const to: $$VERSION"
|
||||
|
||||
# Build Debian package
|
||||
pkg-deb: sync-version
|
||||
fakeroot dpkg-buildpackage -us -uc -b
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
# Build one govpp-snmp-agentx .deb for one architecture.
|
||||
# Usage: build-deb.sh <package> <amd64|arm64> <version>
|
||||
#
|
||||
# The version is also baked into the binary at link time (see Makefile
|
||||
# LDFLAGS), so `govpp-snmp-agentx --version` is the source of truth for
|
||||
# "which build". The .deb itself only carries the release version.
|
||||
set -euo pipefail
|
||||
|
||||
PACKAGE="${1:?usage: build-deb.sh <package> <amd64|arm64> <version>}"
|
||||
ARCH="${2:?usage: build-deb.sh <package> <amd64|arm64> <version>}"
|
||||
VERSION="${3:?usage: build-deb.sh <package> <amd64|arm64> <version>}"
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
PKG="${PACKAGE}_${VERSION}_${ARCH}"
|
||||
STAGING="$(mktemp -d)"
|
||||
trap 'rm -rf "$STAGING"' EXIT
|
||||
|
||||
echo "Building ${PKG}.deb"
|
||||
|
||||
install -d "$STAGING/DEBIAN"
|
||||
install -d "$STAGING/usr/sbin"
|
||||
install -d "$STAGING/usr/share/man/man1"
|
||||
install -d "$STAGING/lib/systemd/system"
|
||||
install -d "$STAGING/etc/default"
|
||||
|
||||
install -m 755 "$REPO_ROOT/build/${ARCH}/${PACKAGE}" "$STAGING/usr/sbin/${PACKAGE}"
|
||||
install -m 644 "$REPO_ROOT/${PACKAGE}.service" "$STAGING/lib/systemd/system/${PACKAGE}.service"
|
||||
install -m 644 "$REPO_ROOT/${PACKAGE}.default" "$STAGING/etc/default/${PACKAGE}"
|
||||
gzip -9 -c "$REPO_ROOT/docs/${PACKAGE}.1" > "$STAGING/usr/share/man/man1/${PACKAGE}.1.gz"
|
||||
|
||||
sed "s/@VERSION@/${VERSION}/;s/@ARCH@/${ARCH}/" \
|
||||
"$REPO_ROOT/debian/${PACKAGE}.control.in" > "$STAGING/DEBIAN/control"
|
||||
install -m 644 "$REPO_ROOT/debian/${PACKAGE}.conffiles" "$STAGING/DEBIAN/conffiles"
|
||||
install -m 755 "$REPO_ROOT/debian/${PACKAGE}.postinst" "$STAGING/DEBIAN/postinst"
|
||||
install -m 755 "$REPO_ROOT/debian/${PACKAGE}.prerm" "$STAGING/DEBIAN/prerm"
|
||||
|
||||
mkdir -p "$REPO_ROOT/build"
|
||||
OUT="$REPO_ROOT/build/${PKG}.deb"
|
||||
dpkg-deb --build --root-owner-group "$STAGING" "$OUT"
|
||||
echo "Built: $OUT"
|
||||
Vendored
+25
@@ -1,3 +1,28 @@
|
||||
govpp-snmp-agentx (1.3.1-1) bookworm; urgency=medium
|
||||
|
||||
* Fix startup race that left every ifSpeed/ifHighSpeed row stuck at
|
||||
1Gbps until restart. The stats routine could rebuild the MIB before
|
||||
the interface-event routine had pushed any details, locking the
|
||||
static fields at their "unknown" default; the rebuild was only
|
||||
re-triggered on interface-set changes, so the wrong values were
|
||||
never corrected. The stats path now pushes the details it already
|
||||
fetches into the MIB, and a dirty flag forces a rebuild on the
|
||||
next poll whenever Speed/MAC/MTU/admin/oper actually change.
|
||||
|
||||
-- Pim van Pelt <pim@ipng.ch> Tue, 06 May 2026 12:00:00 +0000
|
||||
|
||||
govpp-snmp-agentx (1.3.0-1) bookworm; urgency=medium
|
||||
|
||||
* Fix ifSpeed for >2.5Gbps interfaces (10G/25G/100G): the row was
|
||||
silently skipped, which let monitoring stacks fall back to a
|
||||
hard-coded 1Gbps. Always emit ifSpeed and cap at uint32 max per
|
||||
RFC 2863; ifHighSpeed continues to carry the real Mbps value.
|
||||
* Switch the build system to cross-compiled, CGO-free amd64+arm64
|
||||
.deb packages produced by debian/build-deb.sh; inject the version
|
||||
at link time via -ldflags.
|
||||
|
||||
-- Pim van Pelt <pim@ipng.ch> Tue, 06 May 2026 00:00:00 +0000
|
||||
|
||||
govpp-snmp-agentx (1.2.3-1) bookworm; urgency=medium
|
||||
|
||||
* Fix VPP stats filtering to exclude deleted interfaces
|
||||
|
||||
Vendored
-23
@@ -1,23 +0,0 @@
|
||||
Source: govpp-snmp-agentx
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Pim van Pelt <pim@ipng.ch>
|
||||
Build-Depends: debhelper-compat (= 13), golang-go (>= 1.23.8)
|
||||
Standards-Version: 4.6.2
|
||||
Homepage: https://git.ipng.ch/ipng/govpp-agentx-snmp
|
||||
Vcs-Git: https://git.ipng.ch/ipng/govpp-agentx-snmp
|
||||
Vcs-Browser: https://git.ipng.ch/ipng/govpp-agentx-snmp
|
||||
|
||||
Package: govpp-snmp-agentx
|
||||
Architecture: any
|
||||
Depends: ${misc:Depends}, ${shlibs:Depends}, snmpd
|
||||
Description: GoVPP SNMP AgentX Daemon
|
||||
A SNMP AgentX daemon that provides SNMP access to VPP (Vector Packet Processing)
|
||||
statistics and interface information. This daemon acts as a subagent that
|
||||
connects to the main SNMP daemon via the AgentX protocol.
|
||||
.
|
||||
Features:
|
||||
- Interface MIB support
|
||||
- VPP statistics exposure
|
||||
- AgentX protocol implementation
|
||||
- Systemd integration
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
/etc/default/govpp-snmp-agentx
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
Package: govpp-snmp-agentx
|
||||
Version: @VERSION@
|
||||
Architecture: @ARCH@
|
||||
Maintainer: Pim van Pelt <pim@ipng.ch>
|
||||
Section: net
|
||||
Priority: optional
|
||||
Depends: snmpd, adduser
|
||||
Homepage: https://git.ipng.ch/ipng/govpp-snmp-agentx
|
||||
Description: SNMP AgentX subagent that exposes VPP interface statistics
|
||||
govpp-snmp-agentx is a long-running daemon that connects to snmpd via
|
||||
the AgentX protocol and serves the standard IF-MIB (ifTable, ifXTable)
|
||||
from the VPP stats segment. It tracks interface lifecycle events and
|
||||
keeps counters for live interfaces only, using the VPP binary API for
|
||||
metadata and the stats shared memory for fast counter updates.
|
||||
.
|
||||
The daemon runs unprivileged as Debian-snmp:vpp; the systemd unit
|
||||
prepares /var/agentx for the AgentX socket. Configuration of the
|
||||
command-line flags happens in /etc/default/govpp-snmp-agentx.
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
case "$1" in
|
||||
configure)
|
||||
systemctl daemon-reload || true
|
||||
systemctl enable govpp-snmp-agentx.service || true
|
||||
;;
|
||||
esac
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
# Automatically added by dh_installsystemd/13.24.2
|
||||
if [ "$1" = remove ] && [ -d /run/systemd/system ] ; then
|
||||
systemctl --system daemon-reload >/dev/null || true
|
||||
fi
|
||||
# End automatically added section
|
||||
# Automatically added by dh_installsystemd/13.24.2
|
||||
if [ "$1" = "purge" ]; then
|
||||
if [ -x "/usr/bin/deb-systemd-helper" ]; then
|
||||
deb-systemd-helper purge 'govpp-snmp-agentx.service' >/dev/null || true
|
||||
fi
|
||||
fi
|
||||
# End automatically added section
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
case "$1" in
|
||||
remove|purge)
|
||||
systemctl stop govpp-snmp-agentx.service || true
|
||||
systemctl disable govpp-snmp-agentx.service || true
|
||||
;;
|
||||
esac
|
||||
Vendored
-23
@@ -1,23 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
# Enable and start the service
|
||||
systemctl daemon-reload
|
||||
systemctl enable govpp-snmp-agentx.service
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
Vendored
-22
@@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
remove|upgrade|deconfigure)
|
||||
systemctl stop govpp-snmp-agentx.service || true
|
||||
systemctl disable govpp-snmp-agentx.service || true
|
||||
;;
|
||||
|
||||
failed-upgrade)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "prerm called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
Vendored
-30
@@ -1,30 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
export DH_VERBOSE = 1
|
||||
export GO111MODULE = on
|
||||
export GOPROXY = direct
|
||||
export GOCACHE = $(CURDIR)/debian/.gocache
|
||||
export GOPATH = $(CURDIR)/debian/go
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
override_dh_auto_build:
|
||||
cd src && go build -v -ldflags="-s -w" -o ../govpp-snmp-agentx .
|
||||
|
||||
override_dh_auto_install:
|
||||
install -D -m 0755 govpp-snmp-agentx debian/govpp-snmp-agentx/usr/sbin/govpp-snmp-agentx
|
||||
install -D -m 0644 govpp-snmp-agentx.service debian/govpp-snmp-agentx/lib/systemd/system/govpp-snmp-agentx.service
|
||||
install -D -m 0644 govpp-snmp-agentx.default debian/govpp-snmp-agentx/etc/default/govpp-snmp-agentx
|
||||
install -D -m 0644 docs/govpp-snmp-agentx.1 debian/govpp-snmp-agentx/usr/share/man/man1/govpp-snmp-agentx.1
|
||||
|
||||
override_dh_auto_configure:
|
||||
# Skip auto configure
|
||||
|
||||
override_dh_auto_test:
|
||||
# Skip tests during packaging
|
||||
|
||||
override_dh_auto_clean:
|
||||
rm -f govpp-snmp-agentx
|
||||
[ -d debian/go ] && chmod -R +w debian/go || true
|
||||
rm -rf debian/.gocache debian/go obj-*
|
||||
+2
-1
@@ -16,7 +16,8 @@ import (
|
||||
"govpp-snmp-agentx/vpp"
|
||||
)
|
||||
|
||||
const Version = "1.2.3-1"
|
||||
// Version is set at link time via -ldflags "-X main.Version=...".
|
||||
var Version = "dev"
|
||||
|
||||
func main() {
|
||||
debug := flag.Bool("debug", false, "Enable debug logging")
|
||||
|
||||
Reference in New Issue
Block a user