mirror of
https://github.com/containers/podman.git
synced 2025-12-03 03:39:44 +08:00
vendor latest c/{buildah,common,image,storage}
Make sure everything passes for rc2. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
90
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
90
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
@@ -8,6 +8,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
@@ -35,17 +36,18 @@ import (
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/common/pkg/hooks"
|
||||
hooksExec "github.com/containers/common/pkg/hooks/exec"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
"github.com/containers/storage/pkg/ioutils"
|
||||
"github.com/containers/storage/pkg/lockfile"
|
||||
"github.com/containers/storage/pkg/mount"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
"github.com/containers/storage/pkg/unshare"
|
||||
"github.com/docker/go-units"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
"github.com/sirupsen/logrus"
|
||||
"golang.org/x/exp/slices"
|
||||
"golang.org/x/sys/unix"
|
||||
"tags.cncf.io/container-device-interface/pkg/cdi"
|
||||
"tags.cncf.io/container-device-interface/pkg/parser"
|
||||
@@ -165,6 +167,24 @@ func separateDevicesFromRuntimeSpec(g *generate.Generator) define.ContainerDevic
|
||||
|
||||
// Run runs the specified command in the container's root filesystem.
|
||||
func (b *Builder) Run(command []string, options RunOptions) error {
|
||||
var runArtifacts *runMountArtifacts
|
||||
if len(options.ExternalImageMounts) > 0 {
|
||||
defer func() {
|
||||
if runArtifacts == nil {
|
||||
// we didn't add ExternalImageMounts to the
|
||||
// list of images that we're going to unmount
|
||||
// yet and make a deferred call that cleans
|
||||
// them up, but the caller is expecting us to
|
||||
// unmount these for them because we offered to
|
||||
for _, image := range options.ExternalImageMounts {
|
||||
if _, err := b.store.UnmountImage(image, false); err != nil {
|
||||
logrus.Debugf("umounting image %q: %v", image, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if os.Getenv("container") != "" {
|
||||
os, arch, variant, err := parse.Platform("")
|
||||
if err != nil {
|
||||
@@ -328,7 +348,7 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
||||
}
|
||||
}
|
||||
|
||||
setupMaskedPaths(g)
|
||||
setupMaskedPaths(g, b.CommonBuildOpts)
|
||||
setupReadOnlyPaths(g)
|
||||
|
||||
setupTerminal(g, options.Terminal, options.TerminalSize)
|
||||
@@ -498,7 +518,7 @@ rootless=%d
|
||||
SystemContext: options.SystemContext,
|
||||
}
|
||||
|
||||
runArtifacts, err := b.setupMounts(mountPoint, spec, path, options.Mounts, bindFiles, volumes, options.CompatBuiltinVolumes, b.CommonBuildOpts.Volumes, options.RunMounts, runMountInfo)
|
||||
runArtifacts, err = b.setupMounts(mountPoint, spec, path, options.Mounts, bindFiles, volumes, options.CompatBuiltinVolumes, b.CommonBuildOpts.Volumes, options.RunMounts, runMountInfo)
|
||||
if err != nil {
|
||||
return fmt.Errorf("resolving mountpoints for container %q: %w", b.ContainerID, err)
|
||||
}
|
||||
@@ -515,7 +535,7 @@ rootless=%d
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := b.cleanupRunMounts(options.SystemContext, mountPoint, runArtifacts); err != nil {
|
||||
if err := b.cleanupRunMounts(mountPoint, runArtifacts); err != nil {
|
||||
options.Logger.Errorf("unable to cleanup run mounts %v", err)
|
||||
}
|
||||
}()
|
||||
@@ -531,7 +551,7 @@ rootless=%d
|
||||
err = b.runUsingRuntimeSubproc(isolation, options, configureNetwork, networkString, moreCreateArgs, spec,
|
||||
mountPoint, path, define.Package+"-"+filepath.Base(path), b.Container, hostsFile, resolvFile)
|
||||
case IsolationChroot:
|
||||
err = chroot.RunUsingChroot(spec, path, homeDir, options.Stdin, options.Stdout, options.Stderr)
|
||||
err = chroot.RunUsingChroot(spec, path, homeDir, options.Stdin, options.Stdout, options.Stderr, options.NoPivot)
|
||||
case IsolationOCIRootless:
|
||||
moreCreateArgs := []string{"--no-new-keyring"}
|
||||
if options.NoPivot {
|
||||
@@ -1141,7 +1161,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
||||
RootGID: idMaps.rootGID,
|
||||
UpperDirOptionFragment: upperDir,
|
||||
WorkDirOptionFragment: workDir,
|
||||
GraphOpts: b.store.GraphOptions(),
|
||||
GraphOpts: slices.Clone(b.store.GraphOptions()),
|
||||
}
|
||||
|
||||
overlayMount, err := overlay.MountWithOptions(contentDir, host, container, &overlayOpts)
|
||||
@@ -1150,7 +1170,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
||||
}
|
||||
|
||||
// If chown true, add correct ownership to the overlay temp directories.
|
||||
if foundU {
|
||||
if err == nil && foundU {
|
||||
if err := chown.ChangeHostPathOwnership(contentDir, true, idMaps.processUID, idMaps.processGID); err != nil {
|
||||
return specs.Mount{}, err
|
||||
}
|
||||
@@ -1199,8 +1219,14 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
||||
return mounts, nil
|
||||
}
|
||||
|
||||
func setupMaskedPaths(g *generate.Generator) {
|
||||
for _, mp := range config.DefaultMaskedPaths {
|
||||
func setupMaskedPaths(g *generate.Generator, opts *define.CommonBuildOptions) {
|
||||
if slices.Contains(opts.Unmasks, "all") {
|
||||
return
|
||||
}
|
||||
for _, mp := range append(config.DefaultMaskedPaths, opts.Masks...) {
|
||||
if slices.Contains(opts.Unmasks, mp) {
|
||||
continue
|
||||
}
|
||||
g.AddLinuxMaskedPaths(mp)
|
||||
}
|
||||
}
|
||||
@@ -1402,24 +1428,52 @@ func checkIDsGreaterThan5(ids []specs.LinuxIDMapping) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// If this function succeeds and returns a non-nil *lockfile.LockFile, the caller must unlock it (when??).
|
||||
func (b *Builder) getCacheMount(tokens []string, stageMountPoints map[string]internal.StageMountDetails, idMaps IDMaps, workDir string) (*specs.Mount, *lockfile.LockFile, error) {
|
||||
// Returns a Mount to add to the runtime spec's list of mounts, the ID of an
|
||||
// image, the path to a mounted filesystem, and the path to an overlay
|
||||
// filesystem, and an optional lock, or an error.
|
||||
//
|
||||
// The caller is expected to, after the command which uses the mount exits,
|
||||
// clean up the overlay filesystem (if we returned one), unmount the mounted
|
||||
// filesystem (if we provided the path to its mountpoint) and remove its
|
||||
// mountpoint, unmount the image (if we mounted one), and release the lock (if
|
||||
// we took one).
|
||||
func (b *Builder) getCacheMount(tokens []string, sys *types.SystemContext, stageMountPoints map[string]internal.StageMountDetails, idMaps IDMaps, workDir, tmpDir string) (*specs.Mount, string, string, string, *lockfile.LockFile, error) {
|
||||
var optionMounts []specs.Mount
|
||||
mount, targetLock, err := volumes.GetCacheMount(tokens, b.store, b.MountLabel, stageMountPoints, workDir)
|
||||
optionMount, mountedImage, intermediateMount, overlayMount, targetLock, err := volumes.GetCacheMount(sys, tokens, b.store, b.MountLabel, stageMountPoints, idMaps.uidmap, idMaps.gidmap, workDir, tmpDir)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, "", "", "", nil, err
|
||||
}
|
||||
succeeded := false
|
||||
defer func() {
|
||||
if !succeeded && targetLock != nil {
|
||||
targetLock.Unlock()
|
||||
if !succeeded {
|
||||
if overlayMount != "" {
|
||||
if err := overlay.RemoveTemp(overlayMount); err != nil {
|
||||
b.Logger.Debug(err.Error())
|
||||
}
|
||||
}
|
||||
if intermediateMount != "" {
|
||||
if err := mount.Unmount(intermediateMount); err != nil {
|
||||
b.Logger.Debugf("unmounting %q: %v", intermediateMount, err)
|
||||
}
|
||||
if err := os.Remove(intermediateMount); err != nil {
|
||||
b.Logger.Debugf("removing should-be-empty directory %q: %v", intermediateMount, err)
|
||||
}
|
||||
}
|
||||
if mountedImage != "" {
|
||||
if _, err := b.store.UnmountImage(mountedImage, false); err != nil {
|
||||
b.Logger.Debugf("unmounting image %q: %v", mountedImage, err)
|
||||
}
|
||||
}
|
||||
if targetLock != nil {
|
||||
targetLock.Unlock()
|
||||
}
|
||||
}
|
||||
}()
|
||||
optionMounts = append(optionMounts, mount)
|
||||
optionMounts = append(optionMounts, optionMount)
|
||||
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, idMaps)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, "", "", "", nil, err
|
||||
}
|
||||
succeeded = true
|
||||
return &volumes[0], targetLock, nil
|
||||
return &volumes[0], mountedImage, intermediateMount, overlayMount, targetLock, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user