Skip to content

Commit

Permalink
Merge pull request containers#8556 from mheon/fix_8539
Browse files Browse the repository at this point in the history
Use Libpod tmpdir for pause path
  • Loading branch information
openshift-merge-robot authored Dec 2, 2020
2 parents e74072e + ab88632 commit 7984842
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 11 deletions.
2 changes: 1 addition & 1 deletion libpod/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (r *Runtime) Reset(ctx context.Context) error {
}
}

if err := stopPauseProcess(); err != nil {
if err := r.stopPauseProcess(); err != nil {
logrus.Errorf("Error stopping pause process: %v", err)
}

Expand Down
11 changes: 10 additions & 1 deletion libpod/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (retErr error) {
// we will need to access the storage.
if os.Geteuid() != 0 {
aliveLock.Unlock() // Unlock to avoid deadlock as BecomeRootInUserNS will reexec.
pausePid, err := util.GetRootlessPauseProcessPidPath()
pausePid, err := util.GetRootlessPauseProcessPidPathGivenDir(runtime.config.Engine.TmpDir)
if err != nil {
return errors.Wrapf(err, "could not get pause process pid file path")
}
Expand Down Expand Up @@ -538,6 +538,15 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (retErr error) {
return nil
}

// TmpDir gets the current Libpod temporary files directory.
func (r *Runtime) TmpDir() (string, error) {
if !r.valid {
return "", define.ErrRuntimeStopped
}

return r.config.Engine.TmpDir, nil
}

// GetConfig returns a copy of the configuration used by the runtime
func (r *Runtime) GetConfig() (*config.Config, error) {
r.lock.RLock()
Expand Down
6 changes: 3 additions & 3 deletions libpod/runtime_migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ import (
"github.com/sirupsen/logrus"
)

func stopPauseProcess() error {
func (r *Runtime) stopPauseProcess() error {
if rootless.IsRootless() {
pausePidPath, err := util.GetRootlessPauseProcessPidPath()
pausePidPath, err := util.GetRootlessPauseProcessPidPathGivenDir(r.config.Engine.TmpDir)
if err != nil {
return errors.Wrapf(err, "could not get pause process pid file path")
}
Expand Down Expand Up @@ -98,5 +98,5 @@ func (r *Runtime) migrate(ctx context.Context) error {
}
}

return stopPauseProcess()
return r.stopPauseProcess()
}
2 changes: 1 addition & 1 deletion libpod/runtime_migrate_unsupported.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ func (r *Runtime) migrate(ctx context.Context) error {
return nil
}

func stopPauseProcess() error {
func (r *Runtime) stopPauseProcess() error {
return nil
}
17 changes: 13 additions & 4 deletions pkg/domain/infra/abi/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"strings"

"github.com/containers/common/pkg/config"
"github.com/containers/podman/v2/libpod"
"github.com/containers/podman/v2/libpod/define"
"github.com/containers/podman/v2/pkg/cgroups"
"github.com/containers/podman/v2/pkg/domain/entities"
Expand Down Expand Up @@ -86,7 +87,11 @@ func (ic *ContainerEngine) SetupRootless(_ context.Context, cmd *cobra.Command)
return nil
}

pausePidPath, err := util.GetRootlessPauseProcessPidPath()
tmpDir, err := ic.Libpod.TmpDir()
if err != nil {
return err
}
pausePidPath, err := util.GetRootlessPauseProcessPidPathGivenDir(tmpDir)
if err != nil {
return errors.Wrapf(err, "could not get pause process pid file path")
}
Expand All @@ -112,7 +117,7 @@ func (ic *ContainerEngine) SetupRootless(_ context.Context, cmd *cobra.Command)
}

became, ret, err = rootless.TryJoinFromFilePaths(pausePidPath, true, paths)
if err := movePauseProcessToScope(); err != nil {
if err := movePauseProcessToScope(ic.Libpod); err != nil {
conf, err := ic.Config(context.Background())
if err != nil {
return err
Expand All @@ -133,8 +138,12 @@ func (ic *ContainerEngine) SetupRootless(_ context.Context, cmd *cobra.Command)
return nil
}

func movePauseProcessToScope() error {
pausePidPath, err := util.GetRootlessPauseProcessPidPath()
func movePauseProcessToScope(r *libpod.Runtime) error {
tmpDir, err := r.TmpDir()
if err != nil {
return err
}
pausePidPath, err := util.GetRootlessPauseProcessPidPathGivenDir(tmpDir)
if err != nil {
return errors.Wrapf(err, "could not get pause process pid file path")
}
Expand Down
13 changes: 12 additions & 1 deletion pkg/util/utils_supported.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,22 @@ func GetRootlessConfigHomeDir() (string, error) {
}

// GetRootlessPauseProcessPidPath returns the path to the file that holds the pid for
// the pause process
// the pause process.
// DEPRECATED - switch to GetRootlessPauseProcessPidPathGivenDir
func GetRootlessPauseProcessPidPath() (string, error) {
runtimeDir, err := GetRuntimeDir()
if err != nil {
return "", err
}
return filepath.Join(runtimeDir, "libpod", "pause.pid"), nil
}

// GetRootlessPauseProcessPidPathGivenDir returns the path to the file that
// holds the PID of the pause process, given the location of Libpod's temporary
// files.
func GetRootlessPauseProcessPidPathGivenDir(libpodTmpDir string) (string, error) {
if libpodTmpDir == "" {
return "", errors.Errorf("must provide non-empty tmporary directory")
}
return filepath.Join(libpodTmpDir, "pause.pid"), nil
}
6 changes: 6 additions & 0 deletions pkg/util/utils_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ func GetRootlessPauseProcessPidPath() (string, error) {
return "", errors.Wrap(errNotImplemented, "GetRootlessPauseProcessPidPath")
}

// GetRootlessPauseProcessPidPath returns the path to the file that holds the pid for
// the pause process
func GetRootlessPauseProcessPidPathGivenDir(unused string) (string, error) {
return "", errors.Wrap(errNotImplemented, "GetRootlessPauseProcessPidPath")
}

// GetRuntimeDir returns the runtime directory
func GetRuntimeDir() (string, error) {
return "", errors.New("this function is not implemented for windows")
Expand Down

0 comments on commit 7984842

Please sign in to comment.