mirror of
https://github.com/containers/podman.git
synced 2025-10-19 20:23:08 +08:00
libpod: Split out platform-specific code from hostInfo
[NO NEW TESTS NEEDED] Signed-off-by: Doug Rabson <dfr@rabson.org>
This commit is contained in:
@ -11,7 +11,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -19,16 +18,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containers/buildah"
|
"github.com/containers/buildah"
|
||||||
"github.com/containers/common/pkg/apparmor"
|
|
||||||
"github.com/containers/common/pkg/cgroups"
|
|
||||||
"github.com/containers/common/pkg/seccomp"
|
|
||||||
"github.com/containers/image/v5/pkg/sysregistriesv2"
|
"github.com/containers/image/v5/pkg/sysregistriesv2"
|
||||||
"github.com/containers/podman/v4/libpod/define"
|
"github.com/containers/podman/v4/libpod/define"
|
||||||
"github.com/containers/podman/v4/libpod/linkmode"
|
"github.com/containers/podman/v4/libpod/linkmode"
|
||||||
"github.com/containers/podman/v4/pkg/rootless"
|
"github.com/containers/podman/v4/pkg/rootless"
|
||||||
"github.com/containers/storage"
|
"github.com/containers/storage"
|
||||||
"github.com/containers/storage/pkg/system"
|
"github.com/containers/storage/pkg/system"
|
||||||
"github.com/opencontainers/selinux/go-selinux"
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -104,22 +99,6 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) {
|
|||||||
return nil, fmt.Errorf("error getting hostname: %w", err)
|
return nil, fmt.Errorf("error getting hostname: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
seccompProfilePath, err := DefaultSeccompPath()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error getting Seccomp profile path: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cgroups version
|
|
||||||
unified, err := cgroups.IsCgroup2UnifiedMode()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error reading cgroups mode: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get Map of all available controllers
|
|
||||||
availableControllers, err := cgroups.GetAvailableControllers(nil, unified)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error getting available cgroup controllers: %w", err)
|
|
||||||
}
|
|
||||||
cpuUtil, err := getCPUUtilization()
|
cpuUtil, err := getCPUUtilization()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -127,8 +106,6 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) {
|
|||||||
info := define.HostInfo{
|
info := define.HostInfo{
|
||||||
Arch: runtime.GOARCH,
|
Arch: runtime.GOARCH,
|
||||||
BuildahVersion: buildah.Version,
|
BuildahVersion: buildah.Version,
|
||||||
CgroupManager: r.config.Engine.CgroupManager,
|
|
||||||
CgroupControllers: availableControllers,
|
|
||||||
Linkmode: linkmode.Linkmode(),
|
Linkmode: linkmode.Linkmode(),
|
||||||
CPUs: runtime.NumCPU(),
|
CPUs: runtime.NumCPU(),
|
||||||
CPUUtilization: cpuUtil,
|
CPUUtilization: cpuUtil,
|
||||||
@ -136,62 +113,16 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) {
|
|||||||
LogDriver: r.config.Containers.LogDriver,
|
LogDriver: r.config.Containers.LogDriver,
|
||||||
EventLogger: r.eventer.String(),
|
EventLogger: r.eventer.String(),
|
||||||
Hostname: host,
|
Hostname: host,
|
||||||
IDMappings: define.IDMappings{},
|
|
||||||
Kernel: kv,
|
Kernel: kv,
|
||||||
MemFree: mi.MemFree,
|
MemFree: mi.MemFree,
|
||||||
MemTotal: mi.MemTotal,
|
MemTotal: mi.MemTotal,
|
||||||
NetworkBackend: r.config.Network.NetworkBackend,
|
NetworkBackend: r.config.Network.NetworkBackend,
|
||||||
OS: runtime.GOOS,
|
OS: runtime.GOOS,
|
||||||
Security: define.SecurityInfo{
|
|
||||||
AppArmorEnabled: apparmor.IsEnabled(),
|
|
||||||
DefaultCapabilities: strings.Join(r.config.Containers.DefaultCapabilities, ","),
|
|
||||||
Rootless: rootless.IsRootless(),
|
|
||||||
SECCOMPEnabled: seccomp.IsEnabled(),
|
|
||||||
SECCOMPProfilePath: seccompProfilePath,
|
|
||||||
SELinuxEnabled: selinux.GetEnabled(),
|
|
||||||
},
|
|
||||||
Slirp4NetNS: define.SlirpInfo{},
|
|
||||||
SwapFree: mi.SwapFree,
|
SwapFree: mi.SwapFree,
|
||||||
SwapTotal: mi.SwapTotal,
|
SwapTotal: mi.SwapTotal,
|
||||||
}
|
}
|
||||||
|
if err := r.setPlatformHostInfo(&info); err != nil {
|
||||||
cgroupVersion := "v1"
|
return nil, err
|
||||||
if unified {
|
|
||||||
cgroupVersion = "v2"
|
|
||||||
}
|
|
||||||
info.CgroupsVersion = cgroupVersion
|
|
||||||
|
|
||||||
slirp4netnsPath := r.config.Engine.NetworkCmdPath
|
|
||||||
if slirp4netnsPath == "" {
|
|
||||||
slirp4netnsPath, _ = exec.LookPath("slirp4netns")
|
|
||||||
}
|
|
||||||
if slirp4netnsPath != "" {
|
|
||||||
version, err := programVersion(slirp4netnsPath)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Warnf("Failed to retrieve program version for %s: %v", slirp4netnsPath, err)
|
|
||||||
}
|
|
||||||
program := define.SlirpInfo{
|
|
||||||
Executable: slirp4netnsPath,
|
|
||||||
Package: packageVersion(slirp4netnsPath),
|
|
||||||
Version: version,
|
|
||||||
}
|
|
||||||
info.Slirp4NetNS = program
|
|
||||||
}
|
|
||||||
|
|
||||||
if rootless.IsRootless() {
|
|
||||||
uidmappings, err := rootless.ReadMappingsProc("/proc/self/uid_map")
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error reading uid mappings: %w", err)
|
|
||||||
}
|
|
||||||
gidmappings, err := rootless.ReadMappingsProc("/proc/self/gid_map")
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error reading gid mappings: %w", err)
|
|
||||||
}
|
|
||||||
idmappings := define.IDMappings{
|
|
||||||
GIDMap: gidmappings,
|
|
||||||
UIDMap: uidmappings,
|
|
||||||
}
|
|
||||||
info.IDMappings = idmappings
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conmonInfo, ociruntimeInfo, err := r.defaultOCIRuntime.RuntimeInfo()
|
conmonInfo, ociruntimeInfo, err := r.defaultOCIRuntime.RuntimeInfo()
|
||||||
|
88
libpod/info_linux.go
Normal file
88
libpod/info_linux.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package libpod
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/containers/common/pkg/apparmor"
|
||||||
|
"github.com/containers/common/pkg/cgroups"
|
||||||
|
"github.com/containers/common/pkg/seccomp"
|
||||||
|
"github.com/containers/podman/v4/libpod/define"
|
||||||
|
"github.com/containers/podman/v4/pkg/rootless"
|
||||||
|
"github.com/opencontainers/selinux/go-selinux"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r *Runtime) setPlatformHostInfo(info *define.HostInfo) error {
|
||||||
|
seccompProfilePath, err := DefaultSeccompPath()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error getting Seccomp profile path: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cgroups version
|
||||||
|
unified, err := cgroups.IsCgroup2UnifiedMode()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading cgroups mode: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get Map of all available controllers
|
||||||
|
availableControllers, err := cgroups.GetAvailableControllers(nil, unified)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error getting available cgroup controllers: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
info.CgroupManager = r.config.Engine.CgroupManager
|
||||||
|
info.CgroupControllers = availableControllers
|
||||||
|
info.IDMappings = define.IDMappings{}
|
||||||
|
info.Security = define.SecurityInfo{
|
||||||
|
AppArmorEnabled: apparmor.IsEnabled(),
|
||||||
|
DefaultCapabilities: strings.Join(r.config.Containers.DefaultCapabilities, ","),
|
||||||
|
Rootless: rootless.IsRootless(),
|
||||||
|
SECCOMPEnabled: seccomp.IsEnabled(),
|
||||||
|
SECCOMPProfilePath: seccompProfilePath,
|
||||||
|
SELinuxEnabled: selinux.GetEnabled(),
|
||||||
|
}
|
||||||
|
info.Slirp4NetNS = define.SlirpInfo{}
|
||||||
|
|
||||||
|
cgroupVersion := "v1"
|
||||||
|
if unified {
|
||||||
|
cgroupVersion = "v2"
|
||||||
|
}
|
||||||
|
info.CgroupsVersion = cgroupVersion
|
||||||
|
|
||||||
|
slirp4netnsPath := r.config.Engine.NetworkCmdPath
|
||||||
|
if slirp4netnsPath == "" {
|
||||||
|
slirp4netnsPath, _ = exec.LookPath("slirp4netns")
|
||||||
|
}
|
||||||
|
if slirp4netnsPath != "" {
|
||||||
|
version, err := programVersion(slirp4netnsPath)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Warnf("Failed to retrieve program version for %s: %v", slirp4netnsPath, err)
|
||||||
|
}
|
||||||
|
program := define.SlirpInfo{
|
||||||
|
Executable: slirp4netnsPath,
|
||||||
|
Package: packageVersion(slirp4netnsPath),
|
||||||
|
Version: version,
|
||||||
|
}
|
||||||
|
info.Slirp4NetNS = program
|
||||||
|
}
|
||||||
|
|
||||||
|
if rootless.IsRootless() {
|
||||||
|
uidmappings, err := rootless.ReadMappingsProc("/proc/self/uid_map")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading uid mappings: %w", err)
|
||||||
|
}
|
||||||
|
gidmappings, err := rootless.ReadMappingsProc("/proc/self/gid_map")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading gid mappings: %w", err)
|
||||||
|
}
|
||||||
|
idmappings := define.IDMappings{
|
||||||
|
GIDMap: gidmappings,
|
||||||
|
UIDMap: uidmappings,
|
||||||
|
}
|
||||||
|
info.IDMappings = idmappings
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Reference in New Issue
Block a user