From b760b0bcfa4d36db7dc100f4c4f774f66fa31feb Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Thu, 5 Dec 2024 23:05:19 -0500 Subject: [PATCH] Add BuildOrigin field to podman info BuiltOrigin is a field that can be set at build time by packagers. This helps us trace how and where the binary was built and installed from, allowing us to see if the issue is due to a specfic installation or a general podman bug. This field shows up in podman version and in podman info when populated. Automatically set the BuildOrigin field when building the macOS pkginstaller to pkginstaller. Usage: make podman-remote BUILD_ORIGIN="mypackaging" Signed-off-by: Ashley Cui --- Makefile | 1 + cmd/podman/client.go | 14 +++++++------ cmd/podman/system/version.go | 2 ++ contrib/pkginstaller/package.sh | 3 ++- libpod/define/version.go | 37 +++++++++++++++++++-------------- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index a17270fe78..e56748d1ce 100644 --- a/Makefile +++ b/Makefile @@ -119,6 +119,7 @@ GOFLAGS ?= -trimpath LDFLAGS_PODMAN ?= \ $(if $(GIT_COMMIT),-X $(LIBPOD)/define.gitCommit=$(GIT_COMMIT),) \ $(if $(BUILD_INFO),-X $(LIBPOD)/define.buildInfo=$(BUILD_INFO),) \ + $(if $(BUILD_ORIGIN),-X $(LIBPOD)/define.buildOrigin=$(BUILD_ORIGIN),) \ -X $(LIBPOD)/config._installPrefix=$(PREFIX) \ -X $(LIBPOD)/config._etcDir=$(ETCDIR) \ -X $(PROJECT)/v5/pkg/systemd/quadlet._binDir=$(BINDIR) \ diff --git a/cmd/podman/client.go b/cmd/podman/client.go index b42a43520d..46c889b955 100644 --- a/cmd/podman/client.go +++ b/cmd/podman/client.go @@ -3,9 +3,10 @@ package main import "github.com/containers/podman/v5/libpod/define" type clientInfo struct { - OSArch string `json:"OS"` - Provider string `json:"provider"` - Version string `json:"version"` + OSArch string `json:"OS"` + Provider string `json:"provider"` + Version string `json:"version"` + BuildOrigin string `json:"buildOrigin,omitempty" yaml:",omitempty"` } func getClientInfo() (*clientInfo, error) { @@ -18,8 +19,9 @@ func getClientInfo() (*clientInfo, error) { return nil, err } return &clientInfo{ - OSArch: vinfo.OsArch, - Provider: p, - Version: vinfo.Version, + OSArch: vinfo.OsArch, + Provider: p, + Version: vinfo.Version, + BuildOrigin: vinfo.BuildOrigin, }, nil } diff --git a/cmd/podman/system/version.go b/cmd/podman/system/version.go index 48ea151135..5499cd4822 100644 --- a/cmd/podman/system/version.go +++ b/cmd/podman/system/version.go @@ -97,6 +97,7 @@ API Version:\t{{.APIVersion}} Go Version:\t{{.GoVersion}} {{if .GitCommit -}}Git Commit:\t{{.GitCommit}}\n{{end -}} Built:\t{{.BuiltTime}} +{{if .BuildOrigin -}}Build Origin:\t{{.BuildOrigin}}\n{{end -}} OS/Arch:\t{{.OsArch}} {{- end}} @@ -108,6 +109,7 @@ API Version:\t{{.APIVersion}} Go Version:\t{{.GoVersion}} {{if .GitCommit -}}Git Commit:\t{{.GitCommit}}\n{{end -}} Built:\t{{.BuiltTime}} +{{if .BuildOrigin -}}Built Origin:\t{{.BuildOrigin}}\n{{end -}} OS/Arch:\t{{.OsArch}} {{- end}}{{- end}} ` diff --git a/contrib/pkginstaller/package.sh b/contrib/pkginstaller/package.sh index 4d2cd7cd48..1be35d8a7b 100755 --- a/contrib/pkginstaller/package.sh +++ b/contrib/pkginstaller/package.sh @@ -9,6 +9,7 @@ PRODUCTSIGN_IDENTITY=${PRODUCTSIGN_IDENTITY:-mock} NO_CODESIGN=${NO_CODESIGN:-0} HELPER_BINARIES_DIR="/opt/podman/bin" MACHINE_POLICY_JSON_DIR="/opt/podman/config" +BUILD_ORIGIN="pkginstaller" tmpBin="contrib/pkginstaller/tmp-bin" @@ -42,7 +43,7 @@ function build_podman() { } function build_podman_arch(){ - make -B GOARCH="$1" podman-remote HELPER_BINARIES_DIR="${HELPER_BINARIES_DIR}" + make -B GOARCH="$1" podman-remote HELPER_BINARIES_DIR="${HELPER_BINARIES_DIR}" BUILD_ORIGIN="${BUILD_ORIGIN}" make -B GOARCH="$1" podman-mac-helper mkdir -p "${tmpBin}" cp bin/darwin/podman "${tmpBin}/podman-$1" diff --git a/libpod/define/version.go b/libpod/define/version.go index 13a8fdb778..6832aeac38 100644 --- a/libpod/define/version.go +++ b/libpod/define/version.go @@ -16,18 +16,22 @@ var ( // BuildInfo is the time at which the binary was built // It will be populated by the Makefile. buildInfo string + // BuildOrigin is the packager of the binary. + // It will be populated at build-time. + buildOrigin string ) // Version is an output struct for API type Version struct { - APIVersion string - Version string - GoVersion string - GitCommit string - BuiltTime string - Built int64 - OsArch string - Os string + APIVersion string + Version string + GoVersion string + GitCommit string + BuiltTime string + Built int64 + BuildOrigin string `json:",omitempty" yaml:",omitempty"` + OsArch string + Os string } // GetVersion returns a VersionOutput struct for API and podman @@ -43,13 +47,14 @@ func GetVersion() (Version, error) { } } return Version{ - APIVersion: version.APIVersion[version.Libpod][version.CurrentAPI].String(), - Version: version.Version.String(), - GoVersion: runtime.Version(), - GitCommit: gitCommit, - BuiltTime: time.Unix(buildTime, 0).Format(time.ANSIC), - Built: buildTime, - OsArch: runtime.GOOS + "/" + runtime.GOARCH, - Os: runtime.GOOS, + APIVersion: version.APIVersion[version.Libpod][version.CurrentAPI].String(), + Version: version.Version.String(), + GoVersion: runtime.Version(), + GitCommit: gitCommit, + BuiltTime: time.Unix(buildTime, 0).Format(time.ANSIC), + Built: buildTime, + BuildOrigin: buildOrigin, + OsArch: runtime.GOOS + "/" + runtime.GOARCH, + Os: runtime.GOOS, }, nil }