summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/OS.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Propellor/Property/OS.hs')
-rw-r--r--src/Propellor/Property/OS.hs12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/Propellor/Property/OS.hs b/src/Propellor/Property/OS.hs
index aa304f61..2888800e 100644
--- a/src/Propellor/Property/OS.hs
+++ b/src/Propellor/Property/OS.hs
@@ -75,8 +75,8 @@ cleanInstallOnce confirmation = check (not <$> doesFileExist flagfile) $
debootstrap targetos = ensureProperty $ toProp $
Debootstrap.built newOSDir targetos Debootstrap.DefaultConfig
- umountall = property "all mount points unmounted" $ liftIO $ do
- mnts <- filter (/= "/") <$> mountPoints
+ umountall = property "mount points unmounted" $ liftIO $ do
+ mnts <- filter (`notElem` ["/", "/proc"]) <$> mountPoints
forM_ mnts umountLazy
return $ if null mnts then NoChange else MadeChange
@@ -84,11 +84,13 @@ cleanInstallOnce confirmation = check (not <$> doesFileExist flagfile) $
createDirectoryIfMissing True oldOSDir
rootcontents <- dirContents "/"
forM_ rootcontents $ \d ->
- when (d /= oldOSDir && d /= newOSDir) $
+ when (d `notElem` [oldOSDir, newOSDir, "/proc"]) $
renameDirectory d (oldOSDir ++ d)
newrootcontents <- dirContents newOSDir
- forM_ newrootcontents $ \d ->
- renameDirectory d ("/" ++ takeFileName d)
+ forM_ newrootcontents $ \d -> do
+ let dest = "/" ++ takeFileName d
+ whenM (not <$> doesDirectoryExist dest) $
+ renameDirectory d dest
removeDirectory newOSDir
return MadeChange