summaryrefslogtreecommitdiff
path: root/fsmgr.hs
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2018-07-09 19:32:57 -0400
committerAndrew Cady <d@jerkface.net>2018-07-09 19:33:06 -0400
commit93745db66c1295b10a7917120b2cc121f5b0c9ae (patch)
tree7b60cbf0482716d1d126e6e361811a1e0463379b /fsmgr.hs
parent233641f7601c35ccc932435742f52d3b99a4d2f0 (diff)
add support for installing from .deb files
also misc. improvements
Diffstat (limited to 'fsmgr.hs')
-rw-r--r--fsmgr.hs43
1 files changed, 24 insertions, 19 deletions
diff --git a/fsmgr.hs b/fsmgr.hs
index 0c4bfe2..f144e0f 100644
--- a/fsmgr.hs
+++ b/fsmgr.hs
@@ -1,13 +1,11 @@
1{-# LANGUAGE ScopedTypeVariables #-}
2{-# OPTIONS_GHC -fno-warn-type-defaults #-} 1{-# OPTIONS_GHC -fno-warn-type-defaults #-}
3{-# LANGUAGE ExtendedDefaultRules #-} 2{-# LANGUAGE ExtendedDefaultRules #-}
4{-# LANGUAGE InstanceSigs #-} 3{-# LANGUAGE NamedFieldPuns #-}
5{-# LANGUAGE NamedFieldPuns #-} 4{-# LANGUAGE NoImplicitPrelude #-}
6{-# LANGUAGE NoImplicitPrelude #-} 5{-# LANGUAGE OverloadedStrings #-}
7{-# LANGUAGE OverloadedStrings #-} 6{-# LANGUAGE RecordWildCards #-}
8{-# LANGUAGE PartialTypeSignatures #-} 7{-# LANGUAGE ScopedTypeVariables #-}
9{-# LANGUAGE RecordWildCards #-} 8
10{-# LANGUAGE TypeApplications #-}
11module Main where 9module Main where
12import Rebase.Prelude hiding (bool, hash, (<.>)) 10import Rebase.Prelude hiding (bool, hash, (<.>))
13 11
@@ -101,14 +99,26 @@ buildRoot DiskImageConfig{..} finalOut = do
101 cmd_ "mkfs.btrfs" [out] 99 cmd_ "mkfs.btrfs" [out]
102 cmd_ "mkdir -p" [mountpoint] 100 cmd_ "mkdir -p" [mountpoint]
103 cmd_ "mount -t btrfs" [out] mountpoint 101 cmd_ "mount -t btrfs" [out] mountpoint
102
103 -- create new default subvolume, and then remount with it
104 createDefaultSubvolume mountpoint 104 createDefaultSubvolume mountpoint
105 cmd_ (Cwd mountpoint) "mkdir -p root/var/cache/apt" 105 cmd_ "umount" [mountpoint]
106 cmd_ (Cwd mountpoint) "btrfs subvolume create root/var/cache/apt/archives" 106 cmd_ "mount -t btrfs" [out, mountpoint]
107
108 cmd_ (Cwd mountpoint) "mkdir -p var/cache/apt"
109 cmd_ (Cwd mountpoint) "btrfs subvolume create var/cache/apt/archives"
110
107 -- TODO: catch errors and umount, rmdir mountpoint 111 -- TODO: catch errors and umount, rmdir mountpoint
112 let (debs, packageNames) = partitionPackages $ unpack . coerce <$> toList packages
108 cmd_ "selfstrap --skip-update" 113 cmd_ "selfstrap --skip-update"
109 (("--unpack" `consWhen` unpackOnly) ["-t", mountpoint]) (unpack . coerce <$> toList packages) 114 (("--unpack" `consWhen` unpackOnly) ["-t", mountpoint]) packageNames
115 forM_ debs $ \pkg -> do
116 cmd_ "dpkg -i --root" [mountpoint, pkg]
110 cmd_ "mv" [out, finalOut] 117 cmd_ "mv" [out, finalOut]
111 118
119partitionPackages :: [String] -> ([String], [String])
120partitionPackages = partition (elem '/')
121
112consWhen :: a -> Bool -> [a] -> [a] 122consWhen :: a -> Bool -> [a] -> [a]
113a `consWhen` c = if c then (a:) else id 123a `consWhen` c = if c then (a:) else id
114 124
@@ -161,10 +171,5 @@ shakeRules = do
161 buildRoot cfg out 171 buildRoot cfg out
162 172
163 "*.btrfs" %> \out -> do 173 "*.btrfs" %> \out -> do
164 orderOnly ["_build/" ++ out] 174 orderOnly ["_build" </> out]
165 cmd_ "cp --reflink=always -i" ["_build/" ++ out, out] 175 cmd_ "cp --reflink=always -i" ["_build" </> out, out]
166
167
168 -- "_build/" ++ targetFilename %> \out -> do
169 -- needParent targetConfig
170 -- return ()