Fabian Vogt
f139a7c83c
- Make the priority for picking the storage driver configurable (bsc#1197093) (backport of https://github.com/containers/storage/pull/1460) - add patch: 0002-Make-the-priority-for-picking-the-storage-driver-con.patch OBS-URL: https://build.opensuse.org/request/show/1058234 OBS-URL: https://build.opensuse.org/package/show/devel:microos/podman?expand=0&rev=12
265 lines
10 KiB
Diff
265 lines
10 KiB
Diff
From 575166520c8f7e9c46b63bc2b47721512613614b Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
|
|
Date: Tue, 3 Jan 2023 16:34:25 +0100
|
|
Subject: [PATCH 1/2] Make the priority for picking the storage driver
|
|
configurable
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This fixes https://github.com/containers/storage/issues/1457
|
|
|
|
Co-authored-by: Valentin Rothberg <vrothberg@redhat.com>
|
|
Signed-off-by: Dan Čermák <dcermak@suse.com>
|
|
---
|
|
.../containers/storage/drivers/driver.go | 18 +++-
|
|
vendor/github.com/containers/storage/store.go | 89 ++++++++++---------
|
|
.../containers/storage/types/options.go | 14 ++-
|
|
3 files changed, 71 insertions(+), 50 deletions(-)
|
|
|
|
diff --git a/vendor/github.com/containers/storage/drivers/driver.go b/vendor/github.com/containers/storage/drivers/driver.go
|
|
index 7d96ebe54..68d1956b8 100644
|
|
--- a/vendor/github.com/containers/storage/drivers/driver.go
|
|
+++ b/vendor/github.com/containers/storage/drivers/driver.go
|
|
@@ -312,6 +312,7 @@ func getBuiltinDriver(name, home string, options Options) (Driver, error) {
|
|
type Options struct {
|
|
Root string
|
|
RunRoot string
|
|
+ DriverPriority []string
|
|
DriverOptions []string
|
|
UIDMaps []idtools.IDMap
|
|
GIDMaps []idtools.IDMap
|
|
@@ -327,9 +328,18 @@ func New(name string, config Options) (Driver, error) {
|
|
|
|
// Guess for prior driver
|
|
driversMap := scanPriorDrivers(config.Root)
|
|
- for _, name := range priority {
|
|
- if name == "vfs" {
|
|
- // don't use vfs even if there is state present.
|
|
+
|
|
+ // use the supplied priority list unless it is empty
|
|
+ prioList := config.DriverPriority
|
|
+ if len(prioList) == 0 {
|
|
+ prioList = priority
|
|
+ }
|
|
+
|
|
+ for _, name := range prioList {
|
|
+ if name == "vfs" && len(config.DriverPriority) == 0 {
|
|
+ // don't use vfs even if there is state present and vfs
|
|
+ // has not been explicitly added to the override driver
|
|
+ // priority list
|
|
continue
|
|
}
|
|
if _, prior := driversMap[name]; prior {
|
|
@@ -362,7 +372,7 @@ func New(name string, config Options) (Driver, error) {
|
|
}
|
|
|
|
// Check for priority drivers first
|
|
- for _, name := range priority {
|
|
+ for _, name := range prioList {
|
|
driver, err := getBuiltinDriver(name, config.Root, config)
|
|
if err != nil {
|
|
if isDriverNotSupported(err) {
|
|
diff --git a/vendor/github.com/containers/storage/store.go b/vendor/github.com/containers/storage/store.go
|
|
index fb1faaa13..7dc8df948 100644
|
|
--- a/vendor/github.com/containers/storage/store.go
|
|
+++ b/vendor/github.com/containers/storage/store.go
|
|
@@ -606,29 +606,30 @@ type ContainerOptions struct {
|
|
}
|
|
|
|
type store struct {
|
|
- lastLoaded time.Time
|
|
- runRoot string
|
|
- graphLock Locker
|
|
- usernsLock Locker
|
|
- graphRoot string
|
|
- graphDriverName string
|
|
- graphOptions []string
|
|
- pullOptions map[string]string
|
|
- uidMap []idtools.IDMap
|
|
- gidMap []idtools.IDMap
|
|
- autoUsernsUser string
|
|
- additionalUIDs *idSet // Set by getAvailableIDs()
|
|
- additionalGIDs *idSet // Set by getAvailableIDs()
|
|
- autoNsMinSize uint32
|
|
- autoNsMaxSize uint32
|
|
- graphDriver drivers.Driver
|
|
- layerStore LayerStore
|
|
- roLayerStores []ROLayerStore
|
|
- imageStore ImageStore
|
|
- roImageStores []ROImageStore
|
|
- containerStore ContainerStore
|
|
- digestLockRoot string
|
|
- disableVolatile bool
|
|
+ lastLoaded time.Time
|
|
+ runRoot string
|
|
+ graphLock Locker
|
|
+ usernsLock Locker
|
|
+ graphRoot string
|
|
+ graphDriverName string
|
|
+ graphOptions []string
|
|
+ graphDriverPriority []string
|
|
+ pullOptions map[string]string
|
|
+ uidMap []idtools.IDMap
|
|
+ gidMap []idtools.IDMap
|
|
+ autoUsernsUser string
|
|
+ additionalUIDs *idSet // Set by getAvailableIDs()
|
|
+ additionalGIDs *idSet // Set by getAvailableIDs()
|
|
+ autoNsMinSize uint32
|
|
+ autoNsMaxSize uint32
|
|
+ graphDriver drivers.Driver
|
|
+ layerStore LayerStore
|
|
+ roLayerStores []ROLayerStore
|
|
+ imageStore ImageStore
|
|
+ roImageStores []ROImageStore
|
|
+ containerStore ContainerStore
|
|
+ digestLockRoot string
|
|
+ disableVolatile bool
|
|
}
|
|
|
|
// GetStore attempts to find an already-created Store object matching the
|
|
@@ -724,21 +725,22 @@ func GetStore(options types.StoreOptions) (Store, error) {
|
|
autoNsMaxSize = AutoUserNsMaxSize
|
|
}
|
|
s := &store{
|
|
- runRoot: options.RunRoot,
|
|
- graphLock: graphLock,
|
|
- graphRoot: options.GraphRoot,
|
|
- graphDriverName: options.GraphDriverName,
|
|
- graphOptions: options.GraphDriverOptions,
|
|
- uidMap: copyIDMap(options.UIDMap),
|
|
- gidMap: copyIDMap(options.GIDMap),
|
|
- autoUsernsUser: options.RootAutoNsUser,
|
|
- autoNsMinSize: autoNsMinSize,
|
|
- autoNsMaxSize: autoNsMaxSize,
|
|
- additionalUIDs: nil,
|
|
- additionalGIDs: nil,
|
|
- usernsLock: usernsLock,
|
|
- disableVolatile: options.DisableVolatile,
|
|
- pullOptions: options.PullOptions,
|
|
+ runRoot: options.RunRoot,
|
|
+ graphLock: graphLock,
|
|
+ graphRoot: options.GraphRoot,
|
|
+ graphDriverName: options.GraphDriverName,
|
|
+ graphDriverPriority: options.GraphDriverPriority,
|
|
+ graphOptions: options.GraphDriverOptions,
|
|
+ uidMap: copyIDMap(options.UIDMap),
|
|
+ gidMap: copyIDMap(options.GIDMap),
|
|
+ autoUsernsUser: options.RootAutoNsUser,
|
|
+ autoNsMinSize: autoNsMinSize,
|
|
+ autoNsMaxSize: autoNsMaxSize,
|
|
+ additionalUIDs: nil,
|
|
+ additionalGIDs: nil,
|
|
+ usernsLock: usernsLock,
|
|
+ disableVolatile: options.DisableVolatile,
|
|
+ pullOptions: options.PullOptions,
|
|
}
|
|
if err := s.load(); err != nil {
|
|
return nil, err
|
|
@@ -868,11 +870,12 @@ func (s *store) getGraphDriver() (drivers.Driver, error) {
|
|
return s.graphDriver, nil
|
|
}
|
|
config := drivers.Options{
|
|
- Root: s.graphRoot,
|
|
- RunRoot: s.runRoot,
|
|
- DriverOptions: s.graphOptions,
|
|
- UIDMaps: s.uidMap,
|
|
- GIDMaps: s.gidMap,
|
|
+ Root: s.graphRoot,
|
|
+ RunRoot: s.runRoot,
|
|
+ DriverOptions: s.graphOptions,
|
|
+ DriverPriority: s.graphDriverPriority,
|
|
+ UIDMaps: s.uidMap,
|
|
+ GIDMaps: s.gidMap,
|
|
}
|
|
driver, err := drivers.New(s.graphDriverName, config)
|
|
if err != nil {
|
|
diff --git a/vendor/github.com/containers/storage/types/options.go b/vendor/github.com/containers/storage/types/options.go
|
|
index 4c873b45f..4fbe512a9 100644
|
|
--- a/vendor/github.com/containers/storage/types/options.go
|
|
+++ b/vendor/github.com/containers/storage/types/options.go
|
|
@@ -19,6 +19,7 @@ import (
|
|
type TomlConfig struct {
|
|
Storage struct {
|
|
Driver string `toml:"driver,omitempty"`
|
|
+ DriverPriority []string `toml:"driver_priority,omitempty"`
|
|
RunRoot string `toml:"runroot,omitempty"`
|
|
GraphRoot string `toml:"graphroot,omitempty"`
|
|
RootlessStoragePath string `toml:"rootless_storage_path,omitempty"`
|
|
@@ -189,10 +190,16 @@ type StoreOptions struct {
|
|
// RootlessStoragePath is the storage path for rootless users
|
|
// default $HOME/.local/share/containers/storage
|
|
RootlessStoragePath string `toml:"rootless_storage_path"`
|
|
- // GraphDriverName is the underlying storage driver that we'll be
|
|
- // using. It only needs to be specified the first time a Store is
|
|
- // initialized for a given RunRoot and GraphRoot.
|
|
+ // If the driver is not specified, the best suited driver will be picked
|
|
+ // either from GraphDriverPriority, if specified, or from the platform
|
|
+ // dependent priority list (in that order).
|
|
GraphDriverName string `json:"driver,omitempty"`
|
|
+ // GraphDriverPriority is a list of storage drivers that will be tried
|
|
+ // to initialize the Store for a given RunRoot and GraphRoot unless a
|
|
+ // GraphDriverName is set.
|
|
+ // This list can be used to define a custom order in which the drivers
|
|
+ // will be tried.
|
|
+ GraphDriverPriority []string `json:"driver-priority,omitempty"`
|
|
// GraphDriverOptions are driver-specific options.
|
|
GraphDriverOptions []string `json:"driver-options,omitempty"`
|
|
// UIDMap and GIDMap are used for setting up a container's root filesystem
|
|
@@ -357,6 +364,7 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) erro
|
|
if storeOptions.GraphDriverName == "" {
|
|
logrus.Errorf("The storage 'driver' option must be set in %s to guarantee proper operation", configFile)
|
|
}
|
|
+ storeOptions.GraphDriverPriority = config.Storage.DriverPriority
|
|
if config.Storage.RunRoot != "" {
|
|
storeOptions.RunRoot = config.Storage.RunRoot
|
|
}
|
|
--
|
|
2.39.0
|
|
|
|
|
|
From de3c3805b23abf90ce1300cf78686411abc57644 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
|
|
Date: Fri, 6 Jan 2023 08:22:57 +0100
|
|
Subject: [PATCH 2/2] Only warn about 'driver' not being set if the priority
|
|
list is unset
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Currently we would display an error when the user does not specify a `driver` in
|
|
their config file. This has been present for historical reasons mostly to
|
|
prevent users from accidentally getting the vfs
|
|
driver (https://github.com/containers/storage/pull/1460#issuecomment-1370866271). Now
|
|
that most systems support the overlay driver natively, we can reduce this to a
|
|
warning and only warn about it if the driver_priority list is unset. If it is
|
|
provided, then clearly the user or the distribution wanted for c/storage to pick
|
|
a driver itself and the warning would be only confusing to users.
|
|
|
|
Signed-off-by: Dan Čermák <dcermak@suse.com>
|
|
---
|
|
vendor/github.com/containers/storage/types/options.go | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/vendor/github.com/containers/storage/types/options.go b/vendor/github.com/containers/storage/types/options.go
|
|
index 4fbe512a9..e87f458cc 100644
|
|
--- a/vendor/github.com/containers/storage/types/options.go
|
|
+++ b/vendor/github.com/containers/storage/types/options.go
|
|
@@ -361,10 +361,10 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) erro
|
|
logrus.Warnf("Switching default driver from overlay2 to the equivalent overlay driver")
|
|
storeOptions.GraphDriverName = overlayDriver
|
|
}
|
|
- if storeOptions.GraphDriverName == "" {
|
|
- logrus.Errorf("The storage 'driver' option must be set in %s to guarantee proper operation", configFile)
|
|
- }
|
|
storeOptions.GraphDriverPriority = config.Storage.DriverPriority
|
|
+ if storeOptions.GraphDriverName == "" && len(storeOptions.GraphDriverPriority) == 0 {
|
|
+ logrus.Warnf("The storage 'driver' option should be set in %s. A driver was picked automatically.", configFile)
|
|
+ }
|
|
if config.Storage.RunRoot != "" {
|
|
storeOptions.RunRoot = config.Storage.RunRoot
|
|
}
|
|
--
|
|
2.39.0
|
|
|