From e3f2a97d1f837049fc1482947d16758cca3439df Mon Sep 17 00:00:00 2001 From: Doug Rabson Date: Tue, 15 Nov 2022 15:02:05 +0000 Subject: [PATCH] cmd/podman/system: add API server support on FreeBSD This adds the 'system service' command to the build on FreeBSD and suppresses the call to servicereaper.Start which is only needed to support slirp4netns on Linux. A stub for compat.StatsContainer is also added - stats are still supported via the libpod.StatsContainer API call. [NO NEW TESTS NEEDED] Signed-off-by: Doug Rabson --- cmd/podman/system/service.go | 5 +++-- cmd/podman/system/service_abi.go | 8 ++++---- cmd/podman/system/service_abi_common.go | 7 +++++++ cmd/podman/system/service_abi_linux.go | 12 ++++++++++++ .../handlers/compat/containers_stats_freebsd.go | 15 +++++++++++++++ ...tainers_stats.go => containers_stats_linux.go} | 0 6 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 cmd/podman/system/service_abi_common.go create mode 100644 cmd/podman/system/service_abi_linux.go create mode 100644 pkg/api/handlers/compat/containers_stats_freebsd.go rename pkg/api/handlers/compat/{containers_stats.go => containers_stats_linux.go} (100%) diff --git a/cmd/podman/system/service.go b/cmd/podman/system/service.go index bb8156d4c5..53572234a8 100644 --- a/cmd/podman/system/service.go +++ b/cmd/podman/system/service.go @@ -1,5 +1,6 @@ -//go:build linux && !remote -// +build linux,!remote +//go:build (linux || freebsd) && !remote +// +build linux freebsd +// +build !remote package system diff --git a/cmd/podman/system/service_abi.go b/cmd/podman/system/service_abi.go index 5c57a5df2c..f5ae6fd509 100644 --- a/cmd/podman/system/service_abi.go +++ b/cmd/podman/system/service_abi.go @@ -1,5 +1,6 @@ -//go:build linux && !remote -// +build linux,!remote +//go:build (linux || freebsd) && !remote +// +build linux freebsd +// +build !remote package system @@ -12,7 +13,6 @@ import ( "path/filepath" "github.com/containers/common/pkg/cgroups" - "github.com/containers/common/pkg/servicereaper" "github.com/containers/podman/v4/cmd/podman/registry" api "github.com/containers/podman/v4/pkg/api/server" "github.com/containers/podman/v4/pkg/domain/entities" @@ -119,7 +119,7 @@ func restService(flags *pflag.FlagSet, cfg *entities.PodmanConfig, opts entities logrus.Debugf("Could not move to subcgroup: %v", err) } - servicereaper.Start() + maybeStartServiceReaper() infra.StartWatcher(libpodRuntime) server, err := api.NewServerWithSettings(libpodRuntime, listener, opts) if err != nil { diff --git a/cmd/podman/system/service_abi_common.go b/cmd/podman/system/service_abi_common.go new file mode 100644 index 0000000000..999f90fbe9 --- /dev/null +++ b/cmd/podman/system/service_abi_common.go @@ -0,0 +1,7 @@ +//go:build !linux && !remote + +package system + +// Currently, we only need servicereaper on Linux to support slirp4netns. +func maybeStartServiceReaper() { +} diff --git a/cmd/podman/system/service_abi_linux.go b/cmd/podman/system/service_abi_linux.go new file mode 100644 index 0000000000..d0da1594ad --- /dev/null +++ b/cmd/podman/system/service_abi_linux.go @@ -0,0 +1,12 @@ +//go:build linux && !remote + +package system + +import ( + "github.com/containers/common/pkg/servicereaper" +) + +// Currently, we only need servicereaper on Linux to support slirp4netns. +func maybeStartServiceReaper() { + servicereaper.Start() +} diff --git a/pkg/api/handlers/compat/containers_stats_freebsd.go b/pkg/api/handlers/compat/containers_stats_freebsd.go new file mode 100644 index 0000000000..5745547691 --- /dev/null +++ b/pkg/api/handlers/compat/containers_stats_freebsd.go @@ -0,0 +1,15 @@ +package compat + +import ( + "fmt" + "net/http" + "time" + + "github.com/containers/podman/v4/pkg/api/handlers/utils" +) + +const DefaultStatsPeriod = 5 * time.Second + +func StatsContainer(w http.ResponseWriter, r *http.Request) { + utils.Error(w, http.StatusBadRequest, fmt.Errorf("compat.StatsContainer not supported on FreeBSD")) +} diff --git a/pkg/api/handlers/compat/containers_stats.go b/pkg/api/handlers/compat/containers_stats_linux.go similarity index 100% rename from pkg/api/handlers/compat/containers_stats.go rename to pkg/api/handlers/compat/containers_stats_linux.go