mirror of
https://github.com/containers/podman.git
synced 2025-06-22 01:48:54 +08:00
Use SafeChown rather then chown for volumes on NFS
NFS Servers will thrown ENOTSUPP error if you attempt to chown a directory to the same UID and GID as the directory already has. If volumes are stored on NFS directories this throws an ugly error and then works on the next try. Bottom line don't chown directories that already have the correct UID and GID. Fixes: https://github.com/containers/podman/issues/14766 [NO NEW TESTS NEEDED] Difficult to setup an NFS Server in testing. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:

committed by
Matthew Heon

parent
17dbce2fb0
commit
183fdea5f5
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/containers/podman/v4/libpod/events"
|
"github.com/containers/podman/v4/libpod/events"
|
||||||
volplugin "github.com/containers/podman/v4/libpod/plugin"
|
volplugin "github.com/containers/podman/v4/libpod/plugin"
|
||||||
"github.com/containers/storage/drivers/quota"
|
"github.com/containers/storage/drivers/quota"
|
||||||
|
"github.com/containers/storage/pkg/idtools"
|
||||||
"github.com/containers/storage/pkg/stringid"
|
"github.com/containers/storage/pkg/stringid"
|
||||||
pluginapi "github.com/docker/go-plugins-helpers/volume"
|
pluginapi "github.com/docker/go-plugins-helpers/volume"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@ -101,14 +102,14 @@ func (r *Runtime) newVolume(noCreatePluginVolume bool, options ...VolumeCreateOp
|
|||||||
if err := os.MkdirAll(volPathRoot, 0700); err != nil {
|
if err := os.MkdirAll(volPathRoot, 0700); err != nil {
|
||||||
return nil, fmt.Errorf("creating volume directory %q: %w", volPathRoot, err)
|
return nil, fmt.Errorf("creating volume directory %q: %w", volPathRoot, err)
|
||||||
}
|
}
|
||||||
if err := os.Chown(volPathRoot, volume.config.UID, volume.config.GID); err != nil {
|
if err := idtools.SafeChown(volPathRoot, volume.config.UID, volume.config.GID); err != nil {
|
||||||
return nil, fmt.Errorf("chowning volume directory %q to %d:%d: %w", volPathRoot, volume.config.UID, volume.config.GID, err)
|
return nil, fmt.Errorf("chowning volume directory %q to %d:%d: %w", volPathRoot, volume.config.UID, volume.config.GID, err)
|
||||||
}
|
}
|
||||||
fullVolPath := filepath.Join(volPathRoot, "_data")
|
fullVolPath := filepath.Join(volPathRoot, "_data")
|
||||||
if err := os.MkdirAll(fullVolPath, 0755); err != nil {
|
if err := os.MkdirAll(fullVolPath, 0755); err != nil {
|
||||||
return nil, fmt.Errorf("creating volume directory %q: %w", fullVolPath, err)
|
return nil, fmt.Errorf("creating volume directory %q: %w", fullVolPath, err)
|
||||||
}
|
}
|
||||||
if err := os.Chown(fullVolPath, volume.config.UID, volume.config.GID); err != nil {
|
if err := idtools.SafeChown(fullVolPath, volume.config.UID, volume.config.GID); err != nil {
|
||||||
return nil, fmt.Errorf("chowning volume directory %q to %d:%d: %w", fullVolPath, volume.config.UID, volume.config.GID, err)
|
return nil, fmt.Errorf("chowning volume directory %q to %d:%d: %w", fullVolPath, volume.config.UID, volume.config.GID, err)
|
||||||
}
|
}
|
||||||
if err := LabelVolumePath(fullVolPath); err != nil {
|
if err := LabelVolumePath(fullVolPath); err != nil {
|
||||||
|
Reference in New Issue
Block a user