about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/build.cc2
-rw-r--r--src/libstore/local-store.cc21
2 files changed, 17 insertions, 6 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 81a776e4fdf3..cd3dddab6cca 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -467,6 +467,8 @@ void UserLock::acquire()
         if (!pw)
             throw Error(format("the user `%1%' in the group `%2%' does not exist")
                 % *i % buildUsersGroup);
+
+        createDirs(nixStateDir + "/userpool");
         
         fnUserLock = (format("%1%/userpool/%2%") % nixStateDir % pw->pw_uid).str();
 
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 704bb1a06602..e91a2559b168 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -47,8 +47,21 @@ LocalStore::LocalStore()
     
     if (readOnlyMode) return;
 
+    /* Create missing state directories if they don't already exist. */
     createDirs(nixStore);
-    
+    createDirs(nixDBPath + "/info");
+    createDirs(nixDBPath + "/referrer");
+    createDirs(nixDBPath + "/failed");
+    Path profilesDir = nixStateDir + "/profiles";
+    createDirs(nixStateDir + "/profiles");
+    createDirs(nixStateDir + "/temproots");
+    Path gcRootsDir = nixStateDir + "/gcroots";
+    if (!pathExists(gcRootsDir)) {
+        createDirs(gcRootsDir);
+        if (symlink(profilesDir.c_str(), (gcRootsDir + "/profiles").c_str()) == -1)
+            throw SysError(format("creating symlink to `%1%'") % profilesDir);
+    }
+  
     checkStoreNotSymlink();
 
     try {
@@ -64,11 +77,7 @@ LocalStore::LocalStore()
         printMsg(lvlError, "waiting for the big Nix store lock...");
         lockFile(globalLock, ltRead, true);
     }
-
-    createDirs(nixDBPath + "/info");
-    createDirs(nixDBPath + "/referrer");
-    createDirs(nixDBPath + "/failed");
-
+    
     int curSchema = getSchema();
     if (curSchema > nixSchemaVersion)
         throw Error(format("current Nix store schema is version %1%, but I only support %2%")