mirror of
https://github.com/containers/podman.git
synced 2025-05-17 15:18:43 +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:
105
libpod/info.go
105
libpod/info.go
@ -11,7 +11,6 @@ import (
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -19,16 +18,12 @@ import (
|
||||
"time"
|
||||
|
||||
"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/podman/v4/libpod/define"
|
||||
"github.com/containers/podman/v4/libpod/linkmode"
|
||||
"github.com/containers/podman/v4/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/pkg/system"
|
||||
"github.com/opencontainers/selinux/go-selinux"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@ -104,94 +99,30 @@ func (r *Runtime) hostInfo() (*define.HostInfo, error) {
|
||||
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()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
info := define.HostInfo{
|
||||
Arch: runtime.GOARCH,
|
||||
BuildahVersion: buildah.Version,
|
||||
CgroupManager: r.config.Engine.CgroupManager,
|
||||
CgroupControllers: availableControllers,
|
||||
Linkmode: linkmode.Linkmode(),
|
||||
CPUs: runtime.NumCPU(),
|
||||
CPUUtilization: cpuUtil,
|
||||
Distribution: hostDistributionInfo,
|
||||
LogDriver: r.config.Containers.LogDriver,
|
||||
EventLogger: r.eventer.String(),
|
||||
Hostname: host,
|
||||
IDMappings: define.IDMappings{},
|
||||
Kernel: kv,
|
||||
MemFree: mi.MemFree,
|
||||
MemTotal: mi.MemTotal,
|
||||
NetworkBackend: r.config.Network.NetworkBackend,
|
||||
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,
|
||||
SwapTotal: mi.SwapTotal,
|
||||
Arch: runtime.GOARCH,
|
||||
BuildahVersion: buildah.Version,
|
||||
Linkmode: linkmode.Linkmode(),
|
||||
CPUs: runtime.NumCPU(),
|
||||
CPUUtilization: cpuUtil,
|
||||
Distribution: hostDistributionInfo,
|
||||
LogDriver: r.config.Containers.LogDriver,
|
||||
EventLogger: r.eventer.String(),
|
||||
Hostname: host,
|
||||
Kernel: kv,
|
||||
MemFree: mi.MemFree,
|
||||
MemTotal: mi.MemTotal,
|
||||
NetworkBackend: r.config.Network.NetworkBackend,
|
||||
OS: runtime.GOOS,
|
||||
SwapFree: mi.SwapFree,
|
||||
SwapTotal: mi.SwapTotal,
|
||||
}
|
||||
|
||||
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 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
|
||||
if err := r.setPlatformHostInfo(&info); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
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