flores/lib/libpod/root.go
2025-04-18 17:40:44 +08:00

75 lines
2.7 KiB
Go

package libpod
import (
"github.com/containers/podman/v5/pkg/parallel"
"os"
"runtime"
"strings"
"github.com/containers/podman/v5/cmd/podman/registry"
"github.com/containers/podman/v5/pkg/domain/entities"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
var (
defaultLogLevel = "warn"
logLevel = defaultLogLevel
dockerConfig = ""
debug bool
noStdout = false
useStdout = ""
)
func persistentPreRunE(cmd *cobra.Command, args []string) error {
logrus.Infof("Called %s.PersistentPreRunE(%s)", cmd.Name(), strings.Join(os.Args, " "))
podmanConfig := registry.PodmanConfig()
c := &cobra.Command{}
if _, err := registry.NewImageEngine(c, args); err != nil {
return err
}
if _, err := registry.NewContainerEngine(c, args); err != nil {
return err
}
if _, ok := os.LookupEnv("TMPDIR"); !ok {
if tmpdir, err := podmanConfig.ContainersConfDefaultsRO.ImageCopyTmpDir(); err != nil {
logrus.Warnf("Failed to retrieve default tmp dir: %s", err.Error())
} else {
os.Setenv("TMPDIR", tmpdir)
}
}
_, found := c.Annotations[registry.ParentNSRequired]
if !registry.IsRemote() && !found {
cgroupMode := ""
_, noMoveProcess := c.Annotations[registry.NoMoveProcess]
if flag := c.LocalFlags().Lookup("cgroups"); flag != nil {
cgroupMode = flag.Value.String()
}
err := registry.ContainerEngine().SetupRootless(registry.Context(), noMoveProcess, cgroupMode)
if err != nil {
return err
}
}
return nil
}
func setupRuntime(podmanConfig *entities.PodmanConfig) {
podmanConfig.ContainersConf.Engine.DBBackend = podmanConfig.ContainersConfDefaultsRO.Engine.DBBackend
podmanConfig.ContainersConf.Engine.CgroupManager = podmanConfig.ContainersConfDefaultsRO.Engine.CgroupManager
podmanConfig.ContainersConf.Engine.NetworkCmdPath = podmanConfig.ContainersConfDefaultsRO.Engine.NetworkCmdPath
podmanConfig.ContainersConf.Network.NetworkConfigDir = podmanConfig.ContainersConfDefaultsRO.Network.NetworkConfigDir
podmanConfig.ContainersConf.Containers.DefaultMountsFile = podmanConfig.ContainersConfDefaultsRO.Containers.DefaultMountsFile
podmanConfig.ContainersConf.Engine.EventsLogger = podmanConfig.ContainersConfDefaultsRO.Engine.EventsLogger
podmanConfig.MaxWorks = (runtime.NumCPU() * 3) + 1
podmanConfig.ContainersConf.Engine.Namespace = podmanConfig.ContainersConfDefaultsRO.Engine.Namespace
podmanConfig.ContainersConf.Network.NetworkBackend = podmanConfig.ContainersConfDefaultsRO.Network.NetworkBackend
podmanConfig.RuntimePath = "youki"
podmanConfig.ContainersConf.Engine.TmpDir = podmanConfig.ContainersConfDefaultsRO.Engine.TmpDir
podmanConfig.Trace = true
podmanConfig.ContainersConf.Engine.VolumePath = podmanConfig.ContainersConfDefaultsRO.Engine.VolumePath
parallel.SetMaxThreads(uint(podmanConfig.MaxWorks))
}