aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-09-05 17:30:35 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-09-05 17:47:11 -0400
commit3a09956dff0d475e8b7e988a6fdcda59e242d297 (patch)
tree44c02a2c51a4d553c92c68412b9e32df852f6b5e
parentcef5bec06b200ffa5caed46db296e55fb7d72376 (diff)
downloadpodman-3a09956dff0d475e8b7e988a6fdcda59e242d297.tar.gz
podman-3a09956dff0d475e8b7e988a6fdcda59e242d297.tar.bz2
podman-3a09956dff0d475e8b7e988a6fdcda59e242d297.zip
Ensure good defaults on blank c/storage configuration
If c/storage paths are explicitly set to "" (the empty string) it will use compiled-in defaults. However, it won't tell us this via `storage.GetDefaultStoreOptions()` - we just get the empty string (which can put our defaults, some of which are relative to c/storage, in a bad spot). Hardcode a sane default for cases like this. Furthermore, add some sanity checks to paths, to ensure we don't use relative paths for core parts of libpod. Fixes #3952 Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r--libpod/runtime.go25
1 files changed, 23 insertions, 2 deletions
diff --git a/libpod/runtime.go b/libpod/runtime.go
index 28774773e..323a46266 100644
--- a/libpod/runtime.go
+++ b/libpod/runtime.go
@@ -281,10 +281,17 @@ func defaultRuntimeConfig() (RuntimeConfig, error) {
if err != nil {
return RuntimeConfig{}, err
}
+ graphRoot := storeOpts.GraphRoot
+ if graphRoot == "" {
+ logrus.Warnf("Storage configuration is unset - using hardcoded default paths")
+ graphRoot = "/var/lib/containers/storage"
+ }
+ volumePath := filepath.Join(graphRoot, "volumes")
+ staticDir := filepath.Join(graphRoot, "libpod")
return RuntimeConfig{
// Leave this empty so containers/storage will use its defaults
StorageConfig: storage.StoreOptions{},
- VolumePath: filepath.Join(storeOpts.GraphRoot, "volumes"),
+ VolumePath: volumePath,
ImageDefaultTransport: DefaultTransport,
StateType: BoltDBStateStore,
OCIRuntime: "runc",
@@ -314,7 +321,7 @@ func defaultRuntimeConfig() (RuntimeConfig, error) {
},
InitPath: define.DefaultInitPath,
CgroupManager: SystemdCgroupsManager,
- StaticDir: filepath.Join(storeOpts.GraphRoot, "libpod"),
+ StaticDir: staticDir,
TmpDir: "",
MaxLogSize: -1,
NoPivotRoot: false,
@@ -789,6 +796,20 @@ func probeConmon(conmonBinary string) error {
// Make a new runtime based on the given configuration
// Sets up containers/storage, state store, OCI runtime
func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
+ // Let's sanity-check some paths first.
+ // Relative paths can cause nasty bugs, because core paths we use could
+ // shift between runs (or even parts of the program - the OCI runtime
+ // uses a different working directory than we do, for example.
+ if !filepath.IsAbs(runtime.config.StaticDir) {
+ return errors.Wrapf(define.ErrInvalidArg, "static directory must be an absolute path - instead got %q", runtime.config.StaticDir)
+ }
+ if !filepath.IsAbs(runtime.config.TmpDir) {
+ return errors.Wrapf(define.ErrInvalidArg, "temporary directory must be an absolute path - instead got %q", runtime.config.TmpDir)
+ }
+ if !filepath.IsAbs(runtime.config.VolumePath) {
+ return errors.Wrapf(define.ErrInvalidArg, "volume path must be an absolute path - instead got %q", runtime.config.VolumePath)
+ }
+
// Find a working conmon binary
foundConmon := false
foundOutdatedConmon := false