From 937eb8413c24392e6c2d5818bfa2ddddf8e84b95 Mon Sep 17 00:00:00 2001
From: Giuseppe Scrivano <gscrivan@redhat.com>
Date: Tue, 13 Nov 2018 09:57:46 +0100
Subject: rootless: create storage.conf when it doesn't exist

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
---
 pkg/util/utils.go | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'pkg/util')

diff --git a/pkg/util/utils.go b/pkg/util/utils.go
index 3b43489b2..c5ba38b9f 100644
--- a/pkg/util/utils.go
+++ b/pkg/util/utils.go
@@ -9,6 +9,7 @@ import (
 	"strings"
 	"syscall"
 
+	"github.com/BurntSushi/toml"
 	"github.com/containers/image/types"
 	"github.com/containers/libpod/pkg/rootless"
 	"github.com/containers/storage"
@@ -296,6 +297,18 @@ func GetDefaultStoreOptions() (storage.StoreOptions, error) {
 		storageConf := filepath.Join(os.Getenv("HOME"), ".config/containers/storage.conf")
 		if _, err := os.Stat(storageConf); err == nil {
 			storage.ReloadConfigurationFile(storageConf, &storageOpts)
+		} else if os.IsNotExist(err) {
+			os.MkdirAll(filepath.Dir(storageConf), 0755)
+			file, err := os.OpenFile(storageConf, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
+			if err != nil {
+				return storageOpts, errors.Wrapf(err, "cannot open %s", storageConf)
+			}
+
+			defer file.Close()
+			enc := toml.NewEncoder(file)
+			if err := enc.Encode(storageOpts); err != nil {
+				os.Remove(storageConf)
+			}
 		}
 	}
 	return storageOpts, nil
-- 
cgit v1.2.3-54-g00ecf