From be7e755858e700aebb11f7533b8bd362e7a77656 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Fri, 29 May 2020 21:50:50 -0400 Subject: track devices in multi-device btrfs images, in file *.btrfs.devices.txt --- fsmgr.hs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'fsmgr.hs') diff --git a/fsmgr.hs b/fsmgr.hs index 257b56c..2f3e0f5 100644 --- a/fsmgr.hs +++ b/fsmgr.hs @@ -25,6 +25,7 @@ import qualified Options.Applicative as Opt import ConfigFile import String +import System.Directory as IO import System.Directory (createDirectoryIfMissing, getCurrentDirectory) import System.Posix.Process (getProcessID) @@ -126,6 +127,11 @@ getHomeDir = do Stdout homeDir <- cmd "sh -c" ["if [ \"$SUDO_USER\" ]; then getent passwd \"$SUDO_USER\" | cut -d: -f6; else printf \"%s\n\" \"$HOME\"; fi"] return homeDir +readFileOptional :: FilePath -> IO (String) +readFileOptional f = IO.doesFileExist f >>= \case + True -> readFile f + False -> return "" + buildInitialImage :: DiskImageConfig -> FilePath -> FilePath -> Action () buildInitialImage DiskImageConfig{..} mountpoint out = do case initialImage of @@ -135,12 +141,17 @@ buildInitialImage DiskImageConfig{..} mountpoint out = do cmd_ "cp --reflink" [parent, out] cmd_ "btrfstune -f -S0" [out] cmd_ "mkdir -p" [mountpoint] + cmd_ "sh -c" ["if [ -e \"$0\" ]; then cp \"$0\" \"$1\"; fi", parent <.> "devices.txt", out -<.> "devices.txt"] + cmd_ "mount -t btrfs" [out] mountpoint SeededImage n f -> do let parent = "_build" f -<.> "btrfs" need [parent] + devices <- either (const []) lines . readEither <$> liftIO (readFileOptional (parent <.> "devices.txt")) + writeFile' (out -<.> "devices.txt") (unlines $ parent:devices) + -- allocate new image file cmd_ "rm -f" [out] cmd_ "truncate -s" [show n, out] -- cgit v1.2.3