From 486fb62abd0ac5a87a85ca18beb939d21323fad1 Mon Sep 17 00:00:00 2001 From: Gordon GECOS Date: Wed, 22 Nov 2023 14:30:15 -0500 Subject: support for separate _filesystem build dir --- fsmgr.hs | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/fsmgr.hs b/fsmgr.hs index d2c7100..862a5bf 100644 --- a/fsmgr.hs +++ b/fsmgr.hs @@ -296,7 +296,7 @@ buildInitialImage DiskImageConfig{..} mountpoint out = do cmd_ "mount -t btrfs" [out] mountpoint SeededImage n f -> do - let parent = f -<.> "seed.btrfs" + let parent = "_filesystem" f -<.> "seed.btrfs" need [parent] copyParentDevices parent out @@ -514,39 +514,26 @@ needSubvolume path = ioUnless (IO.doesDirectoryExist path) $ do shakeRules :: Rules () shakeRules = do - "_build/*.yaml.canon" %> \out -> do + ["_build/*.yaml.canon", "_filesystem/*.yaml.canon"] |%> \out -> do needSubvolume "_build" let yaml = dropDirectory1 $ dropExtension out need [yaml] cfg <- readCfg yaml writeFileChanged out (show cfg) - "_build/*.btrfs" %> \out -> do + ["_build/*.btrfs", "_filesystem/*.patch.btrfs"] |%> \out -> do needSubvolume "_build" let cfgFile = (out -<.> "yaml.canon") need [cfgFile] cfg <- readEither <$> readFile' cfgFile either (error . (("Error parsing file: " ++ cfgFile ++ ": ") ++)) (flip buildRoot out) cfg - priority 2 $ "*.seed.btrfs" %> \out -> do - needSubvolume "_build" + priority 2 $ "_filesystem/*.seed.btrfs" %> \out -> do needSubvolume "_filesystem" - let inp = dropExtension out -<.> ".btrfs" - fso = "_filesystem" out - tmp = fso <.> "tmp" + let inp = ("_build" ) $ dropDirectory1 $ dropExtension out -<.> ".btrfs" + tmp = out <.> "tmp" need [inp] cmd_ "cp --reflink=always" [inp, tmp] setupLoopDevices ("_build" inp <.> "btrfs") cmd_ "btrfs-shrink" [tmp] cmd_ "btrfstune -f -S1" [tmp] - cmd_ (WithStderr False) "mv -i" [tmp, fso] - cmd_ (WithStderr False) "ln -s -i" [fso, out] - - priority 1 $ "*.btrfs" %> \out -> do - needSubvolume "_build" - needSubvolume "_filesystem" - let b = "_build" out - f = "_filesystem" out - need [b] - -- WithStderr False needed for `cp` to interact with the tty - cmd_ (WithStderr False) "cp --reflink=always -i" [b, f] - cmd_ (WithStderr False) "ln -s -i" [f, out] + cmd_ (WithStderr False) "mv -i" [tmp, out] -- cgit v1.2.3