summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--examples/lexmark.yaml6
-rw-r--r--examples/minbase.yaml1
-rw-r--r--fsmgr.hs43
4 files changed, 33 insertions, 19 deletions
diff --git a/.gitignore b/.gitignore
index 3a5b475..044262e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
1.stack-work/ 1.stack-work/
2/_build
3*.btrfs
diff --git a/examples/lexmark.yaml b/examples/lexmark.yaml
new file mode 100644
index 0000000..08e2427
--- /dev/null
+++ b/examples/lexmark.yaml
@@ -0,0 +1,6 @@
1parent: minbase
2packages:
3- cups
4- "../lexmark/lexmark-printer-utility-1.0-2.amd64.deb"
5- "../lexmark/lexmark-inkjet-legacy-1.0-1.amd64.deb"
6binaries: []
diff --git a/examples/minbase.yaml b/examples/minbase.yaml
new file mode 100644
index 0000000..a7dfdca
--- /dev/null
+++ b/examples/minbase.yaml
@@ -0,0 +1 @@
parent: 10000000000
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 ()