go.mod: update osbuild/images to v0.168.0
tag v0.165.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.165.0 ---------------- * distro: move rhel9 into a generic distro (osbuild/images#1645) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * Revert "distro: drop `ImageType.BasePartitionTable()`" (osbuild/images#1691) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * Update dependencies 2025-07-20 (osbuild/images#1675) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * defs: add missing `bootstrap_containers` (osbuild/images#1679) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * disk: handle adding `PReP` partition on PPC64/s390x (HMS-8884) (osbuild/images#1681) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro: bring per-distro checkOptions back (osbuild/images#1678) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: cleanups in the pkg/distro/generic area (osbuild/images#1686) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro: move rhel8 into a generic distro (osbuild/images#1643) * Author: Michael Vogt, Reviewers: Nobody * distro: small followups for PR#1682 (osbuild/images#1689) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza * distro: unify transform/match into a single concept (osbuild/images#1682) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Tomáš Hozza * distros: de-duplicate runner build packages for centos10 (osbuild/images#1680) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * github: disable Go dep updates through dependabot (osbuild/images#1683) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * repos: include almalinux 9.6 (osbuild/images#1677) * Author: Simon de Vlieger, Reviewers: Lukáš Zapletal, Tomáš Hozza * rhel9: wsl distribution config (osbuild/images#1694) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Sanne Raymaekers * test/manifests/all-customizations: don't embed local file via URI (osbuild/images#1684) * Author: Tomáš Hozza, Reviewers: Achilleas Koutsou, Brian C. Lane — Somewhere on the Internet, 2025-07-28 --- tag v0.166.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.166.0 ---------------- * customizations/subscription: conditionally enable semanage call (HMS-8866) (osbuild/images#1673) * Author: Sanne Raymaekers, Reviewers: Achilleas Koutsou, Michael Vogt * distro/rhel-10: versionlock shim-x64 in the azure-cvm image (osbuild/images#1697) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Simon de Vlieger * manifestmock: move container/pkg/commit mocks into helper (osbuild/images#1700) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * rhel9: `vagrant-libvirt`, `vagrant-virtualbox` (osbuild/images#1693) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Sanne Raymaekers * rhel{9,10}: centos WSL refinement (HMS-8922) (osbuild/images#1690) * Author: Simon de Vlieger, Reviewers: Ondřej Budai, Sanne Raymaekers, Tomáš Hozza — Somewhere on the Internet, 2025-07-29 --- tag v0.167.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.167.0 ---------------- * RHEL/Azure: drop obsolete WAAgentConfig keys [RHEL-93894] and remove loglevel kernel option [RHEL-102372] (osbuild/images#1611) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Ondřej Budai, Sanne Raymaekers * Update dependencies 2025-07-27 (osbuild/images#1699) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro/rhel9: set default_kernel to kernel-uki-virt (osbuild/images#1704) * Author: Achilleas Koutsou, Reviewers: Ondřej Budai, Simon de Vlieger * distro: drop legacy loaders and update tests (osbuild/images#1687) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Tomáš Hozza * distro: fix issues with yaml distro definitions and enable yaml checks (osbuild/images#1702) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Ondřej Budai, Simon de Vlieger — Somewhere on the Internet, 2025-07-30 --- tag v0.168.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.168.0 ---------------- * distro: fix bug in variable substitution for static distros (osbuild/images#1710) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * rhel{9,10}: azure for non-RHEL (HMS-8949) (osbuild/images#1707) * Author: Simon de Vlieger, Reviewers: Achilleas Koutsou, Michael Vogt — Somewhere on the Internet, 2025-07-30 ---
This commit is contained in:
parent
fad3b35d49
commit
6497b7520d
856 changed files with 72834 additions and 136836 deletions
16
vendor/github.com/containers/storage/drivers/aufs/aufs.go
generated
vendored
16
vendor/github.com/containers/storage/drivers/aufs/aufs.go
generated
vendored
|
|
@ -36,6 +36,7 @@ import (
|
|||
"time"
|
||||
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/chrootarchive"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
|
|
@ -772,8 +773,8 @@ func (a *Driver) UpdateLayerIDMap(id string, toContainer, toHost *idtools.IDMapp
|
|||
return fmt.Errorf("aufs doesn't support changing ID mappings")
|
||||
}
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in an userNS
|
||||
func (a *Driver) SupportsShifting() bool {
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs to the provided mapping in an userNS
|
||||
func (a *Driver) SupportsShifting(uidmap, gidmap []idtools.IDMap) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
@ -781,3 +782,14 @@ func (a *Driver) SupportsShifting() bool {
|
|||
func (a *Driver) Dedup(req graphdriver.DedupArgs) (graphdriver.DedupResult, error) {
|
||||
return graphdriver.DedupResult{}, nil
|
||||
}
|
||||
|
||||
// DeferredRemove is not implemented.
|
||||
// It calls Remove directly.
|
||||
func (a *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
return nil, a.Remove(id)
|
||||
}
|
||||
|
||||
// GetTempDirRootDirs is not implemented.
|
||||
func (a *Driver) GetTempDirRootDirs() []string {
|
||||
return []string{}
|
||||
}
|
||||
|
|
|
|||
12
vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
generated
vendored
12
vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
generated
vendored
|
|
@ -30,6 +30,7 @@ import (
|
|||
"unsafe"
|
||||
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
|
|
@ -678,3 +679,14 @@ func (d *Driver) AdditionalImageStores() []string {
|
|||
func (d *Driver) Dedup(req graphdriver.DedupArgs) (graphdriver.DedupResult, error) {
|
||||
return graphdriver.DedupResult{}, nil
|
||||
}
|
||||
|
||||
// DeferredRemove is not implemented.
|
||||
// It calls Remove directly.
|
||||
func (d *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
return nil, d.Remove(id)
|
||||
}
|
||||
|
||||
// GetTempDirRootDirs is not implemented.
|
||||
func (d *Driver) GetTempDirRootDirs() []string {
|
||||
return []string{}
|
||||
}
|
||||
|
|
|
|||
4
vendor/github.com/containers/storage/drivers/chown.go
generated
vendored
4
vendor/github.com/containers/storage/drivers/chown.go
generated
vendored
|
|
@ -131,7 +131,7 @@ func (n *naiveLayerIDMapUpdater) UpdateLayerIDMap(id string, toContainer, toHost
|
|||
return ChownPathByMaps(layerFs, toContainer, toHost)
|
||||
}
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in an userNS
|
||||
func (n *naiveLayerIDMapUpdater) SupportsShifting() bool {
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs to the provided mapping in an userNS
|
||||
func (n *naiveLayerIDMapUpdater) SupportsShifting(uidmap, gidmap []idtools.IDMap) bool {
|
||||
return false
|
||||
}
|
||||
|
|
|
|||
23
vendor/github.com/containers/storage/drivers/driver.go
generated
vendored
23
vendor/github.com/containers/storage/drivers/driver.go
generated
vendored
|
|
@ -9,6 +9,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/containers/storage/internal/dedup"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
|
@ -123,7 +124,17 @@ type ProtoDriver interface {
|
|||
// and parent, with contents identical to the specified template layer.
|
||||
CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *CreateOpts, readWrite bool) error
|
||||
// Remove attempts to remove the filesystem layer with this id.
|
||||
// This is soft-deprecated and should not get any new callers; use DeferredRemove.
|
||||
Remove(id string) error
|
||||
// DeferredRemove is used to remove the filesystem layer with this id.
|
||||
// This removal happen immediately (the layer is no longer usable),
|
||||
// but physically deleting the files may be deferred.
|
||||
// Caller MUST call returned Cleanup function EVEN IF the function returns an error.
|
||||
DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error)
|
||||
// GetTempDirRootDirs returns the root directories for temporary directories.
|
||||
// Multiple directories may be returned when drivers support different filesystems
|
||||
// for layers (e.g., overlay with imageStore vs home directory).
|
||||
GetTempDirRootDirs() []string
|
||||
// Get returns the mountpoint for the layered filesystem referred
|
||||
// to by this id. You can optionally specify a mountLabel or "".
|
||||
// Optionally it gets the mappings used to create the layer.
|
||||
|
|
@ -193,8 +204,9 @@ type LayerIDMapUpdater interface {
|
|||
UpdateLayerIDMap(id string, toContainer, toHost *idtools.IDMappings, mountLabel string) error
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in a
|
||||
// image and it is not required to Chown the files when running in an user namespace.
|
||||
SupportsShifting() bool
|
||||
// image to the provided mapping and it is not required to Chown the files when running in
|
||||
// an user namespace.
|
||||
SupportsShifting(uidmap, gidmap []idtools.IDMap) bool
|
||||
}
|
||||
|
||||
// Driver is the interface for layered/snapshot file system drivers.
|
||||
|
|
@ -216,8 +228,10 @@ type DriverWithDifferOutput struct {
|
|||
CompressedDigest digest.Digest
|
||||
Metadata string
|
||||
BigData map[string][]byte
|
||||
TarSplit []byte // nil if not available
|
||||
TOCDigest digest.Digest
|
||||
// TarSplit is owned by the [DriverWithDifferOutput], and must be closed by calling one of
|
||||
// [Store.ApplyStagedLayer]/[Store.CleanupStagedLayer]. It is nil if not available.
|
||||
TarSplit *os.File
|
||||
TOCDigest digest.Digest
|
||||
// RootDirMode is the mode of the root directory of the layer, if specified.
|
||||
RootDirMode *os.FileMode
|
||||
// Artifacts is a collection of additional artifacts
|
||||
|
|
@ -267,6 +281,7 @@ type DifferOptions struct {
|
|||
// This API is experimental and can be changed without bumping the major version number.
|
||||
type Differ interface {
|
||||
ApplyDiff(dest string, options *archive.TarOptions, differOpts *DifferOptions) (DriverWithDifferOutput, error)
|
||||
Close() error
|
||||
}
|
||||
|
||||
// DriverWithDiffer is the interface for direct diff access.
|
||||
|
|
|
|||
129
vendor/github.com/containers/storage/drivers/overlay/overlay.go
generated
vendored
129
vendor/github.com/containers/storage/drivers/overlay/overlay.go
generated
vendored
|
|
@ -23,6 +23,8 @@ import (
|
|||
"github.com/containers/storage/drivers/overlayutils"
|
||||
"github.com/containers/storage/drivers/quota"
|
||||
"github.com/containers/storage/internal/dedup"
|
||||
"github.com/containers/storage/internal/staging_lockfile"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/chrootarchive"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
|
|
@ -30,7 +32,6 @@ import (
|
|||
"github.com/containers/storage/pkg/fsutils"
|
||||
"github.com/containers/storage/pkg/idmap"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
"github.com/containers/storage/pkg/lockfile"
|
||||
"github.com/containers/storage/pkg/mount"
|
||||
"github.com/containers/storage/pkg/parsers"
|
||||
"github.com/containers/storage/pkg/system"
|
||||
|
|
@ -80,10 +81,11 @@ const (
|
|||
// that mounts do not fail due to length.
|
||||
|
||||
const (
|
||||
linkDir = "l"
|
||||
stagingDir = "staging"
|
||||
lowerFile = "lower"
|
||||
maxDepth = 500
|
||||
linkDir = "l"
|
||||
stagingDir = "staging"
|
||||
tempDirName = "tempdirs"
|
||||
lowerFile = "lower"
|
||||
maxDepth = 500
|
||||
|
||||
stagingLockFile = "staging.lock"
|
||||
|
||||
|
|
@ -133,7 +135,7 @@ type Driver struct {
|
|||
stagingDirsLocksMutex sync.Mutex
|
||||
// stagingDirsLocks access is not thread safe, it is required that callers take
|
||||
// stagingDirsLocksMutex on each access to guard against concurrent map writes.
|
||||
stagingDirsLocks map[string]*lockfile.LockFile
|
||||
stagingDirsLocks map[string]*staging_lockfile.StagingLockFile
|
||||
|
||||
supportsIDMappedMounts *bool
|
||||
}
|
||||
|
|
@ -222,7 +224,7 @@ func checkAndRecordIDMappedSupport(home, runhome string) (bool, error) {
|
|||
return supportsIDMappedMounts, err
|
||||
}
|
||||
|
||||
func checkAndRecordOverlaySupport(fsMagic graphdriver.FsMagic, home, runhome string) (bool, error) {
|
||||
func checkAndRecordOverlaySupport(home, runhome string) (bool, error) {
|
||||
var supportsDType bool
|
||||
|
||||
if os.Geteuid() != 0 {
|
||||
|
|
@ -242,7 +244,7 @@ func checkAndRecordOverlaySupport(fsMagic graphdriver.FsMagic, home, runhome str
|
|||
return false, errors.New(overlayCacheText)
|
||||
}
|
||||
} else {
|
||||
supportsDType, err = supportsOverlay(home, fsMagic, 0, 0)
|
||||
supportsDType, err = supportsOverlay(home, 0, 0)
|
||||
if err != nil {
|
||||
os.Remove(filepath.Join(home, linkDir))
|
||||
os.Remove(home)
|
||||
|
|
@ -388,7 +390,7 @@ func Init(home string, options graphdriver.Options) (graphdriver.Driver, error)
|
|||
t := true
|
||||
supportsVolatile = &t
|
||||
} else {
|
||||
supportsDType, err = checkAndRecordOverlaySupport(fsMagic, home, runhome)
|
||||
supportsDType, err = checkAndRecordOverlaySupport(home, runhome)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -442,7 +444,7 @@ func Init(home string, options graphdriver.Options) (graphdriver.Driver, error)
|
|||
usingComposefs: opts.useComposefs,
|
||||
options: *opts,
|
||||
stagingDirsLocksMutex: sync.Mutex{},
|
||||
stagingDirsLocks: make(map[string]*lockfile.LockFile),
|
||||
stagingDirsLocks: make(map[string]*staging_lockfile.StagingLockFile),
|
||||
}
|
||||
|
||||
d.naiveDiff = graphdriver.NewNaiveDiffDriver(d, graphdriver.NewNaiveLayerIDMapUpdater(d))
|
||||
|
|
@ -666,16 +668,11 @@ func SupportsNativeOverlay(home, runhome string) (bool, error) {
|
|||
}
|
||||
}
|
||||
|
||||
fsMagic, err := graphdriver.GetFSMagic(home)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
supportsDType, _ := checkAndRecordOverlaySupport(fsMagic, home, runhome)
|
||||
supportsDType, _ := checkAndRecordOverlaySupport(home, runhome)
|
||||
return supportsDType, nil
|
||||
}
|
||||
|
||||
func supportsOverlay(home string, homeMagic graphdriver.FsMagic, rootUID, rootGID int) (supportsDType bool, err error) {
|
||||
func supportsOverlay(home string, rootUID, rootGID int) (supportsDType bool, err error) {
|
||||
selinuxLabelTest := selinux.PrivContainerMountLabel()
|
||||
|
||||
logLevel := logrus.ErrorLevel
|
||||
|
|
@ -828,7 +825,7 @@ func (d *Driver) Status() [][2]string {
|
|||
{"Supports d_type", strconv.FormatBool(d.supportsDType)},
|
||||
{"Native Overlay Diff", strconv.FormatBool(!d.useNaiveDiff())},
|
||||
{"Using metacopy", strconv.FormatBool(d.usingMetacopy)},
|
||||
{"Supports shifting", strconv.FormatBool(d.SupportsShifting())},
|
||||
{"Supports shifting", strconv.FormatBool(d.SupportsShifting(nil, nil))},
|
||||
{"Supports volatile", strconv.FormatBool(supportsVolatile)},
|
||||
}
|
||||
}
|
||||
|
|
@ -874,7 +871,9 @@ func (d *Driver) Cleanup() error {
|
|||
func (d *Driver) pruneStagingDirectories() bool {
|
||||
d.stagingDirsLocksMutex.Lock()
|
||||
for _, lock := range d.stagingDirsLocks {
|
||||
lock.Unlock()
|
||||
if err := lock.UnlockAndDelete(); err != nil {
|
||||
logrus.Warnf("Failed to unlock and delete staging lock file: %v", err)
|
||||
}
|
||||
}
|
||||
clear(d.stagingDirsLocks)
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
|
|
@ -886,17 +885,15 @@ func (d *Driver) pruneStagingDirectories() bool {
|
|||
if err == nil {
|
||||
for _, dir := range dirs {
|
||||
stagingDirToRemove := filepath.Join(stagingDirBase, dir.Name())
|
||||
lock, err := lockfile.GetLockFile(filepath.Join(stagingDirToRemove, stagingLockFile))
|
||||
lock, err := staging_lockfile.TryLockPath(filepath.Join(stagingDirToRemove, stagingLockFile))
|
||||
if err != nil {
|
||||
anyPresent = true
|
||||
continue
|
||||
}
|
||||
if err := lock.TryLock(); err != nil {
|
||||
anyPresent = true
|
||||
continue
|
||||
}
|
||||
_ = os.RemoveAll(stagingDirToRemove)
|
||||
lock.Unlock()
|
||||
if err := lock.UnlockAndDelete(); err != nil {
|
||||
logrus.Warnf("Failed to unlock and delete staging lock file: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return anyPresent
|
||||
|
|
@ -1310,17 +1307,22 @@ func (d *Driver) optsAppendMappings(opts string, uidMaps, gidMaps []idtools.IDMa
|
|||
|
||||
// Remove cleans the directories that are created for this id.
|
||||
func (d *Driver) Remove(id string) error {
|
||||
return d.removeCommon(id, system.EnsureRemoveAll)
|
||||
}
|
||||
|
||||
func (d *Driver) removeCommon(id string, cleanup func(string) error) error {
|
||||
dir := d.dir(id)
|
||||
lid, err := os.ReadFile(path.Join(dir, "link"))
|
||||
if err == nil {
|
||||
if err := os.RemoveAll(path.Join(d.home, linkDir, string(lid))); err != nil {
|
||||
linkPath := path.Join(d.home, linkDir, string(lid))
|
||||
if err := cleanup(linkPath); err != nil {
|
||||
logrus.Debugf("Failed to remove link: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
d.releaseAdditionalLayerByID(id)
|
||||
|
||||
if err := system.EnsureRemoveAll(dir); err != nil && !os.IsNotExist(err) {
|
||||
if err := cleanup(dir); err != nil && !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
if d.quotaCtl != nil {
|
||||
|
|
@ -1332,6 +1334,41 @@ func (d *Driver) Remove(id string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (d *Driver) GetTempDirRootDirs() []string {
|
||||
tempDirs := []string{filepath.Join(d.home, tempDirName)}
|
||||
// Include imageStore temp directory if it's configured
|
||||
// Writable layers can only be in d.home or d.imageStore, not in additional image stores
|
||||
if d.imageStore != "" {
|
||||
tempDirs = append(tempDirs, filepath.Join(d.imageStore, d.name, tempDirName))
|
||||
}
|
||||
return tempDirs
|
||||
}
|
||||
|
||||
// Determine the correct temp directory root based on where the layer actually exists.
|
||||
func (d *Driver) getTempDirRoot(id string) string {
|
||||
layerDir := d.dir(id)
|
||||
if d.imageStore != "" {
|
||||
expectedLayerDir := path.Join(d.imageStore, d.name, id)
|
||||
if layerDir == expectedLayerDir {
|
||||
return filepath.Join(d.imageStore, d.name, tempDirName)
|
||||
}
|
||||
}
|
||||
return filepath.Join(d.home, tempDirName)
|
||||
}
|
||||
|
||||
func (d *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
tempDirRoot := d.getTempDirRoot(id)
|
||||
t, err := tempdir.NewTempDir(tempDirRoot)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := d.removeCommon(id, t.StageDeletion); err != nil {
|
||||
return t.Cleanup, fmt.Errorf("failed to add to stage directory: %w", err)
|
||||
}
|
||||
return t.Cleanup, nil
|
||||
}
|
||||
|
||||
// recreateSymlinks goes through the driver's home directory and checks if the diff directory
|
||||
// under each layer has a symlink created for it under the linkDir. If the symlink does not
|
||||
// exist, it creates them
|
||||
|
|
@ -1358,8 +1395,8 @@ func (d *Driver) recreateSymlinks() error {
|
|||
// Check that for each layer, there's a link in "l" with the name in
|
||||
// the layer's "link" file that points to the layer's "diff" directory.
|
||||
for _, dir := range dirs {
|
||||
// Skip over the linkDir and anything that is not a directory
|
||||
if dir.Name() == linkDir || !dir.IsDir() {
|
||||
// Skip over the linkDir, stagingDir, tempDirName and anything that is not a directory
|
||||
if dir.Name() == linkDir || dir.Name() == stagingDir || dir.Name() == tempDirName || !dir.IsDir() {
|
||||
continue
|
||||
}
|
||||
// Read the "link" file under each layer to get the name of the symlink
|
||||
|
|
@ -1483,7 +1520,7 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO
|
|||
|
||||
readWrite := !inAdditionalStore
|
||||
|
||||
if !d.SupportsShifting() || options.DisableShifting {
|
||||
if !d.SupportsShifting(options.UidMaps, options.GidMaps) || options.DisableShifting {
|
||||
disableShifting = true
|
||||
}
|
||||
|
||||
|
|
@ -2027,7 +2064,7 @@ func (d *Driver) ListLayers() ([]string, error) {
|
|||
for _, entry := range entries {
|
||||
id := entry.Name()
|
||||
switch id {
|
||||
case linkDir, stagingDir, quota.BackingFsBlockDeviceLink, mountProgramFlagFile:
|
||||
case linkDir, stagingDir, tempDirName, quota.BackingFsBlockDeviceLink, mountProgramFlagFile:
|
||||
// expected, but not a layer. skip it
|
||||
continue
|
||||
default:
|
||||
|
|
@ -2178,7 +2215,10 @@ func (d *Driver) CleanupStagingDirectory(stagingDirectory string) error {
|
|||
d.stagingDirsLocksMutex.Lock()
|
||||
if lock, ok := d.stagingDirsLocks[parentStagingDir]; ok {
|
||||
delete(d.stagingDirsLocks, parentStagingDir)
|
||||
lock.Unlock()
|
||||
if err := lock.UnlockAndDelete(); err != nil {
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
return err
|
||||
}
|
||||
}
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
|
||||
|
|
@ -2233,7 +2273,7 @@ func (d *Driver) ApplyDiffWithDiffer(options *graphdriver.ApplyDiffWithDifferOpt
|
|||
return graphdriver.DriverWithDifferOutput{}, err
|
||||
}
|
||||
|
||||
lock, err := lockfile.GetLockFile(filepath.Join(layerDir, stagingLockFile))
|
||||
lock, err := staging_lockfile.TryLockPath(filepath.Join(layerDir, stagingLockFile))
|
||||
if err != nil {
|
||||
return graphdriver.DriverWithDifferOutput{}, err
|
||||
}
|
||||
|
|
@ -2242,13 +2282,14 @@ func (d *Driver) ApplyDiffWithDiffer(options *graphdriver.ApplyDiffWithDifferOpt
|
|||
d.stagingDirsLocksMutex.Lock()
|
||||
delete(d.stagingDirsLocks, layerDir)
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
lock.Unlock()
|
||||
if err := lock.UnlockAndDelete(); err != nil {
|
||||
errRet = errors.Join(errRet, err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
d.stagingDirsLocksMutex.Lock()
|
||||
d.stagingDirsLocks[layerDir] = lock
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
lock.Lock()
|
||||
|
||||
logrus.Debugf("Applying differ in %s", applyDir)
|
||||
|
||||
|
|
@ -2274,7 +2315,7 @@ func (d *Driver) ApplyDiffWithDiffer(options *graphdriver.ApplyDiffWithDifferOpt
|
|||
}
|
||||
|
||||
// ApplyDiffFromStagingDirectory applies the changes using the specified staging directory.
|
||||
func (d *Driver) ApplyDiffFromStagingDirectory(id, parent string, diffOutput *graphdriver.DriverWithDifferOutput, options *graphdriver.ApplyDiffWithDifferOpts) error {
|
||||
func (d *Driver) ApplyDiffFromStagingDirectory(id, parent string, diffOutput *graphdriver.DriverWithDifferOutput, options *graphdriver.ApplyDiffWithDifferOpts) (errRet error) {
|
||||
stagingDirectory := diffOutput.Target
|
||||
parentStagingDir := filepath.Dir(stagingDirectory)
|
||||
|
||||
|
|
@ -2282,7 +2323,9 @@ func (d *Driver) ApplyDiffFromStagingDirectory(id, parent string, diffOutput *gr
|
|||
d.stagingDirsLocksMutex.Lock()
|
||||
if lock, ok := d.stagingDirsLocks[parentStagingDir]; ok {
|
||||
delete(d.stagingDirsLocks, parentStagingDir)
|
||||
lock.Unlock()
|
||||
if err := lock.UnlockAndDelete(); err != nil {
|
||||
errRet = errors.Join(errRet, err)
|
||||
}
|
||||
}
|
||||
d.stagingDirsLocksMutex.Unlock()
|
||||
}()
|
||||
|
|
@ -2553,12 +2596,20 @@ func (d *Driver) supportsIDmappedMounts() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in an userNS
|
||||
func (d *Driver) SupportsShifting() bool {
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs to the provided mapping in an userNS
|
||||
func (d *Driver) SupportsShifting(uidmap, gidmap []idtools.IDMap) bool {
|
||||
if os.Getenv("_CONTAINERS_OVERLAY_DISABLE_IDMAP") == "yes" {
|
||||
return false
|
||||
}
|
||||
if d.options.mountProgram != "" {
|
||||
// fuse-overlayfs supports only contiguous mappings, since it performs the mapping on the
|
||||
// upper layer too, to avoid https://github.com/containers/podman/issues/10272
|
||||
if !idtools.IsContiguous(uidmap) {
|
||||
return false
|
||||
}
|
||||
if !idtools.IsContiguous(gidmap) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return d.supportsIDmappedMounts()
|
||||
|
|
|
|||
48
vendor/github.com/containers/storage/drivers/vfs/driver.go
generated
vendored
48
vendor/github.com/containers/storage/drivers/vfs/driver.go
generated
vendored
|
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/internal/dedup"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
|
@ -22,7 +23,10 @@ import (
|
|||
"github.com/vbatts/tar-split/tar/storage"
|
||||
)
|
||||
|
||||
const defaultPerms = os.FileMode(0o555)
|
||||
const (
|
||||
defaultPerms = os.FileMode(0o555)
|
||||
tempDirName = "tempdirs"
|
||||
)
|
||||
|
||||
func init() {
|
||||
graphdriver.MustRegister("vfs", Init)
|
||||
|
|
@ -244,6 +248,42 @@ func (d *Driver) Remove(id string) error {
|
|||
return system.EnsureRemoveAll(d.dir(id))
|
||||
}
|
||||
|
||||
func (d *Driver) GetTempDirRootDirs() []string {
|
||||
tempDirs := []string{filepath.Join(d.home, tempDirName)}
|
||||
// Include imageStore temp directory if it's configured
|
||||
// Writable layers can only be in d.home or d.imageStore, not in additionalHomes (which are read-only)
|
||||
if d.imageStore != "" {
|
||||
tempDirs = append(tempDirs, filepath.Join(d.imageStore, d.String(), tempDirName))
|
||||
}
|
||||
return tempDirs
|
||||
}
|
||||
|
||||
// Determine the correct temp directory root based on where the layer actually exists.
|
||||
func (d *Driver) getTempDirRoot(id string) string {
|
||||
layerDir := d.dir(id)
|
||||
if d.imageStore != "" {
|
||||
expectedLayerDir := filepath.Join(d.imageStore, d.String(), "dir", filepath.Base(id))
|
||||
if layerDir == expectedLayerDir {
|
||||
return filepath.Join(d.imageStore, d.String(), tempDirName)
|
||||
}
|
||||
}
|
||||
return filepath.Join(d.home, tempDirName)
|
||||
}
|
||||
|
||||
func (d *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
tempDirRoot := d.getTempDirRoot(id)
|
||||
t, err := tempdir.NewTempDir(tempDirRoot)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
layerDir := d.dir(id)
|
||||
if err := t.StageDeletion(layerDir); err != nil {
|
||||
return t.Cleanup, err
|
||||
}
|
||||
return t.Cleanup, nil
|
||||
}
|
||||
|
||||
// Get returns the directory for the given id.
|
||||
func (d *Driver) Get(id string, options graphdriver.MountOpts) (_ string, retErr error) {
|
||||
dir := d.dir(id)
|
||||
|
|
@ -312,9 +352,9 @@ func (d *Driver) AdditionalImageStores() []string {
|
|||
return nil
|
||||
}
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in an userNS
|
||||
func (d *Driver) SupportsShifting() bool {
|
||||
return d.updater.SupportsShifting()
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs to the provided mapping in an userNS
|
||||
func (d *Driver) SupportsShifting(uidmap, gidmap []idtools.IDMap) bool {
|
||||
return d.updater.SupportsShifting(uidmap, gidmap)
|
||||
}
|
||||
|
||||
// UpdateLayerIDMap updates ID mappings in a from matching the ones specified
|
||||
|
|
|
|||
16
vendor/github.com/containers/storage/drivers/windows/windows.go
generated
vendored
16
vendor/github.com/containers/storage/drivers/windows/windows.go
generated
vendored
|
|
@ -24,6 +24,7 @@ import (
|
|||
"github.com/Microsoft/go-winio/backuptar"
|
||||
"github.com/Microsoft/hcsshim"
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
|
@ -986,8 +987,8 @@ func (d *Driver) UpdateLayerIDMap(id string, toContainer, toHost *idtools.IDMapp
|
|||
return fmt.Errorf("windows doesn't support changing ID mappings")
|
||||
}
|
||||
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs in an userNS
|
||||
func (d *Driver) SupportsShifting() bool {
|
||||
// SupportsShifting tells whether the driver support shifting of the UIDs/GIDs to the provided mapping in an userNS
|
||||
func (d *Driver) SupportsShifting(uidmap, gidmap []idtools.IDMap) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
@ -1014,3 +1015,14 @@ func parseStorageOpt(storageOpt map[string]string) (*storageOptions, error) {
|
|||
}
|
||||
return &options, nil
|
||||
}
|
||||
|
||||
// DeferredRemove is not implemented.
|
||||
// It calls Remove directly.
|
||||
func (d *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
return nil, d.Remove(id)
|
||||
}
|
||||
|
||||
// GetTempDirRootDirs is not implemented.
|
||||
func (d *Driver) GetTempDirRootDirs() []string {
|
||||
return []string{}
|
||||
}
|
||||
|
|
|
|||
12
vendor/github.com/containers/storage/drivers/zfs/zfs.go
generated
vendored
12
vendor/github.com/containers/storage/drivers/zfs/zfs.go
generated
vendored
|
|
@ -13,6 +13,7 @@ import (
|
|||
"time"
|
||||
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/internal/tempdir"
|
||||
"github.com/containers/storage/pkg/directory"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
"github.com/containers/storage/pkg/mount"
|
||||
|
|
@ -406,6 +407,12 @@ func (d *Driver) Remove(id string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// DeferredRemove is not implemented.
|
||||
// It calls Remove directly.
|
||||
func (d *Driver) DeferredRemove(id string) (tempdir.CleanupTempDirFunc, error) {
|
||||
return nil, d.Remove(id)
|
||||
}
|
||||
|
||||
// Get returns the mountpoint for the given id after creating the target directories if necessary.
|
||||
func (d *Driver) Get(id string, options graphdriver.MountOpts) (_ string, retErr error) {
|
||||
mountpoint := d.mountPath(id)
|
||||
|
|
@ -516,3 +523,8 @@ func (d *Driver) AdditionalImageStores() []string {
|
|||
func (d *Driver) Dedup(req graphdriver.DedupArgs) (graphdriver.DedupResult, error) {
|
||||
return graphdriver.DedupResult{}, nil
|
||||
}
|
||||
|
||||
// GetTempDirRootDirs is not implemented.
|
||||
func (d *Driver) GetTempDirRootDirs() []string {
|
||||
return []string{}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue