diff --git a/libpod/runtime.go b/libpod/runtime.go index 4c7d06f1f9..73c607ad48 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -369,6 +369,14 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (retErr error) { return fmt.Errorf("creating runtime temporary files directory: %w", err) } + // Create the volume path if needed. + // This is not strictly necessary at this point, but the path not + // existing can cause troubles with DB path validation on OSTree based + // systems. Ref: https://github.com/containers/podman/issues/23515 + if err := os.MkdirAll(runtime.config.Engine.VolumePath, 0700); err != nil { + return fmt.Errorf("creating runtime volume path directory: %w", err) + } + // Set up the state. runtime.state, err = getDBState(runtime) if err != nil { diff --git a/test/system/005-info.bats b/test/system/005-info.bats index baf34a8ece..c4ad5c32f8 100644 --- a/test/system/005-info.bats +++ b/test/system/005-info.bats @@ -194,6 +194,13 @@ host.slirp4netns.executable | $expr_path ln -s /home $new_home + # Remove volume directory. This doesn't break Podman but can cause our DB + # validation to break if Podman misbehaves. Ref: + # https://github.com/containers/podman/issues/23515 + # (Unfortunately, we can't just use a new directory, that will just trip DB + # validation that it doesn't match the path we were using before) + rm -rf $PODMAN_TMPDIR/$HOME/.local/share/containers/storage/volumes + # Just need the command to run cleanly HOME=$PODMAN_TMPDIR/$HOME run_podman info