summaryrefslogtreecommitdiff
path: root/vendor/github.com/containers/buildah/pkg/overlay
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2023-07-14 07:19:56 -0400
committerDaniel J Walsh <dwalsh@redhat.com>2023-07-14 07:19:56 -0400
commit13a9500166a83989c60e2155d767fc2100773ad2 (patch)
tree4c3cea2d3cbc7c6cedc8865f3aff35120fed5d19 /vendor/github.com/containers/buildah/pkg/overlay
parentbb72016f58d4e99bdfafba0ae6c7af61ca28b3e6 (diff)
Update vendor containers/(common, buildah, image, storage)
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Diffstat (limited to 'vendor/github.com/containers/buildah/pkg/overlay')
-rw-r--r--vendor/github.com/containers/buildah/pkg/overlay/overlay.go69
-rw-r--r--vendor/github.com/containers/buildah/pkg/overlay/overlay_freebsd.go31
-rw-r--r--vendor/github.com/containers/buildah/pkg/overlay/overlay_linux.go80
3 files changed, 111 insertions, 69 deletions
diff --git a/vendor/github.com/containers/buildah/pkg/overlay/overlay.go b/vendor/github.com/containers/buildah/pkg/overlay/overlay.go
index 81810d28d..e416ecd78 100644
--- a/vendor/github.com/containers/buildah/pkg/overlay/overlay.go
+++ b/vendor/github.com/containers/buildah/pkg/overlay/overlay.go
@@ -6,7 +6,6 @@ import (
"os/exec"
"path/filepath"
"strings"
- "syscall"
"errors"
@@ -146,74 +145,6 @@ func mountWithMountProgram(mountProgram, overlayOptions, mergeDir string) error
return nil
}
-// MountWithOptions creates a subdir of the contentDir based on the source directory
-// from the source system. It then mounts up the source directory on to the
-// generated mount point and returns the mount point to the caller.
-// But allows api to set custom workdir, upperdir and other overlay options
-// Following API is being used by podman at the moment
-func MountWithOptions(contentDir, source, dest string, opts *Options) (mount specs.Mount, Err error) {
- mergeDir := filepath.Join(contentDir, "merge")
-
- // Create overlay mount options for rw/ro.
- var overlayOptions string
- if opts.ReadOnly {
- // Read-only overlay mounts require two lower layer.
- lowerTwo := filepath.Join(contentDir, "lower")
- if err := os.Mkdir(lowerTwo, 0755); err != nil {
- return mount, err
- }
- overlayOptions = fmt.Sprintf("lowerdir=%s:%s,private", escapeColon(source), lowerTwo)
- } else {
- // Read-write overlay mounts want a lower, upper and a work layer.
- workDir := filepath.Join(contentDir, "work")
- upperDir := filepath.Join(contentDir, "upper")
-
- if opts.WorkDirOptionFragment != "" && opts.UpperDirOptionFragment != "" {
- workDir = opts.WorkDirOptionFragment
- upperDir = opts.UpperDirOptionFragment
- }
-
- st, err := os.Stat(source)
- if err != nil {
- return mount, err
- }
- if err := os.Chmod(upperDir, st.Mode()); err != nil {
- return mount, err
- }
- if stat, ok := st.Sys().(*syscall.Stat_t); ok {
- if err := os.Chown(upperDir, int(stat.Uid), int(stat.Gid)); err != nil {
- return mount, err
- }
- }
- overlayOptions = fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s,private", escapeColon(source), upperDir, workDir)
- }
-
- mountProgram := findMountProgram(opts.GraphOpts)
- if mountProgram != "" {
- if err := mountWithMountProgram(mountProgram, overlayOptions, mergeDir); err != nil {
- return mount, err
- }
-
- mount.Source = mergeDir
- mount.Destination = dest
- mount.Type = "bind"
- mount.Options = []string{"bind", "slave"}
- return mount, nil
- }
-
- if unshare.IsRootless() {
- /* If a mount_program is not specified, fallback to try mounting native overlay. */
- overlayOptions = fmt.Sprintf("%s,userxattr", overlayOptions)
- }
-
- mount.Source = mergeDir
- mount.Destination = dest
- mount.Type = "overlay"
- mount.Options = strings.Split(overlayOptions, ",")
-
- return mount, nil
-}
-
// Convert ":" to "\:", the path which will be overlay mounted need to be escaped
func escapeColon(source string) string {
return strings.ReplaceAll(source, ":", "\\:")
diff --git a/vendor/github.com/containers/buildah/pkg/overlay/overlay_freebsd.go b/vendor/github.com/containers/buildah/pkg/overlay/overlay_freebsd.go
new file mode 100644
index 000000000..e814a327c
--- /dev/null
+++ b/vendor/github.com/containers/buildah/pkg/overlay/overlay_freebsd.go
@@ -0,0 +1,31 @@
+package overlay
+
+import (
+ //"fmt"
+ //"os"
+ //"path/filepath"
+ //"strings"
+ //"syscall"
+ "errors"
+
+ //"github.com/containers/storage/pkg/unshare"
+ "github.com/opencontainers/runtime-spec/specs-go"
+)
+
+// MountWithOptions creates a subdir of the contentDir based on the source directory
+// from the source system. It then mounts up the source directory on to the
+// generated mount point and returns the mount point to the caller.
+// But allows api to set custom workdir, upperdir and other overlay options
+// Following API is being used by podman at the moment
+func MountWithOptions(contentDir, source, dest string, opts *Options) (mount specs.Mount, Err error) {
+ if opts.ReadOnly {
+ // Read-only overlay mounts can be simulated with nullfs
+ mount.Source = source
+ mount.Destination = dest
+ mount.Type = "nullfs"
+ mount.Options = []string{"ro"}
+ return mount, nil
+ } else {
+ return mount, errors.New("read/write overlay mounts not supported on freebsd")
+ }
+}
diff --git a/vendor/github.com/containers/buildah/pkg/overlay/overlay_linux.go b/vendor/github.com/containers/buildah/pkg/overlay/overlay_linux.go
new file mode 100644
index 000000000..9bd72bc24
--- /dev/null
+++ b/vendor/github.com/containers/buildah/pkg/overlay/overlay_linux.go
@@ -0,0 +1,80 @@
+package overlay
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+ "syscall"
+
+ "github.com/containers/storage/pkg/unshare"
+ "github.com/opencontainers/runtime-spec/specs-go"
+)
+
+// MountWithOptions creates a subdir of the contentDir based on the source directory
+// from the source system. It then mounts up the source directory on to the
+// generated mount point and returns the mount point to the caller.
+// But allows api to set custom workdir, upperdir and other overlay options
+// Following API is being used by podman at the moment
+func MountWithOptions(contentDir, source, dest string, opts *Options) (mount specs.Mount, Err error) {
+ mergeDir := filepath.Join(contentDir, "merge")
+
+ // Create overlay mount options for rw/ro.
+ var overlayOptions string
+ if opts.ReadOnly {
+ // Read-only overlay mounts require two lower layer.
+ lowerTwo := filepath.Join(contentDir, "lower")
+ if err := os.Mkdir(lowerTwo, 0755); err != nil {
+ return mount, err
+ }
+ overlayOptions = fmt.Sprintf("lowerdir=%s:%s,private", escapeColon(source), lowerTwo)
+ } else {
+ // Read-write overlay mounts want a lower, upper and a work layer.
+ workDir := filepath.Join(contentDir, "work")
+ upperDir := filepath.Join(contentDir, "upper")
+
+ if opts.WorkDirOptionFragment != "" && opts.UpperDirOptionFragment != "" {
+ workDir = opts.WorkDirOptionFragment
+ upperDir = opts.UpperDirOptionFragment
+ }
+
+ st, err := os.Stat(source)
+ if err != nil {
+ return mount, err
+ }
+ if err := os.Chmod(upperDir, st.Mode()); err != nil {
+ return mount, err
+ }
+ if stat, ok := st.Sys().(*syscall.Stat_t); ok {
+ if err := os.Chown(upperDir, int(stat.Uid), int(stat.Gid)); err != nil {
+ return mount, err
+ }
+ }
+ overlayOptions = fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s,private", escapeColon(source), upperDir, workDir)
+ }
+
+ mountProgram := findMountProgram(opts.GraphOpts)
+ if mountProgram != "" {
+ if err := mountWithMountProgram(mountProgram, overlayOptions, mergeDir); err != nil {
+ return mount, err
+ }
+
+ mount.Source = mergeDir
+ mount.Destination = dest
+ mount.Type = "bind"
+ mount.Options = []string{"bind", "slave"}
+ return mount, nil
+ }
+
+ if unshare.IsRootless() {
+ /* If a mount_program is not specified, fallback to try mounting native overlay. */
+ overlayOptions = fmt.Sprintf("%s,userxattr", overlayOptions)
+ }
+
+ mount.Source = mergeDir
+ mount.Destination = dest
+ mount.Type = "overlay"
+ mount.Options = strings.Split(overlayOptions, ",")
+
+ return mount, nil
+}