diff options
author | Andrew Cady <d@jerkface.net> | 2018-07-09 19:32:57 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2018-07-09 19:33:06 -0400 |
commit | 93745db66c1295b10a7917120b2cc121f5b0c9ae (patch) | |
tree | 7b60cbf0482716d1d126e6e361811a1e0463379b /fsmgr.hs | |
parent | 233641f7601c35ccc932435742f52d3b99a4d2f0 (diff) |
add support for installing from .deb files
also misc. improvements
Diffstat (limited to 'fsmgr.hs')
-rw-r--r-- | fsmgr.hs | 43 |
1 files changed, 24 insertions, 19 deletions
@@ -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 #-} | ||
11 | module Main where | 9 | module Main where |
12 | import Rebase.Prelude hiding (bool, hash, (<.>)) | 10 | import 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 | ||
119 | partitionPackages :: [String] -> ([String], [String]) | ||
120 | partitionPackages = partition (elem '/') | ||
121 | |||
112 | consWhen :: a -> Bool -> [a] -> [a] | 122 | consWhen :: a -> Bool -> [a] -> [a] |
113 | a `consWhen` c = if c then (a:) else id | 123 | a `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 () | ||