diff options
| author | Joey Hess <joeyh@joeyh.name> | 2017-07-21 16:05:50 -0400 |
|---|---|---|
| committer | Joey Hess <joeyh@joeyh.name> | 2017-07-21 16:05:50 -0400 |
| commit | 5bd4c6e679ed605f1b37c201affb27096662c29f (patch) | |
| tree | d4eba0149eaeb6e2522ce79d396b14007eb9bdbe /src/Propellor/Property/DiskImage/PartSpec.hs | |
| parent | 1fecbbd450b973018fc059ffc166e927698890cd (diff) | |
calcPartTable using PartSpec DSL
* Generalized the PartSpec DSL, so it can be used for both
disk image partitioning, and disk device partitioning, with
different partition sizing methods as appropriate for the different
uses. (minor API change)
* Propellor.Property.Parted: Added calcPartTable function which uses
PartSpec DiskPart, and a useDiskSpace combinator.
This commit was sponsored by Thomas Hochstein on Patreon.
Diffstat (limited to 'src/Propellor/Property/DiskImage/PartSpec.hs')
| -rw-r--r-- | src/Propellor/Property/DiskImage/PartSpec.hs | 84 |
1 files changed, 12 insertions, 72 deletions
diff --git a/src/Propellor/Property/DiskImage/PartSpec.hs b/src/Propellor/Property/DiskImage/PartSpec.hs index 2b14baa0..6a29af4e 100644 --- a/src/Propellor/Property/DiskImage/PartSpec.hs +++ b/src/Propellor/Property/DiskImage/PartSpec.hs @@ -1,32 +1,24 @@ -- | Disk image partition specification and combinators. +-- Partitions in disk images default to being sized large enough to hold +-- the files that appear in the directory where the partition is to be +-- mounted. Plus a fudge factor, since filesystems have some space +-- overhead. + module Propellor.Property.DiskImage.PartSpec ( + module Propellor.Types.PartSpec, module Propellor.Property.DiskImage.PartSpec, - Partition, - PartSize(..), - PartFlag(..), - TableType(..), - Fs(..), - MountPoint, ) where import Propellor.Base import Propellor.Property.Parted -import Propellor.Property.Mount - --- | Specifies a mount point, mount options, and a constructor for a Partition. --- --- The size that is eventually provided is the amount of space needed to --- hold the files that appear in the directory where the partition is to be --- mounted. Plus a fudge factor, since filesystems have some space --- overhead. -type PartSpec = (Maybe MountPoint, MountOpts, PartSize -> Partition) +import Propellor.Types.PartSpec --- | Partitions that are not to be mounted (ie, LinuxSwap), or that have --- no corresponding directory in the chroot will have 128 MegaBytes --- provided as a default size. -defSz :: PartSize -defSz = MegaBytes 128 +-- | Adds additional free space to the partition. +addFreeSpace :: PartSpec t -> PartSize -> PartSpec t +addFreeSpace (mp, o, p, t) freesz = (mp, o, p', t) + where + p' = \sz -> p (sz <> freesz) -- | Add 2% for filesystem overhead. Rationalle for picking 2%: -- A filesystem with 1% overhead might just sneak by as acceptable. @@ -35,55 +27,3 @@ defSz = MegaBytes 128 -- Add an additional 200 mb for temp files, journals, etc. fudge :: PartSize -> PartSize fudge (MegaBytes n) = MegaBytes (n + n `div` 100 * 2 + 3 + 200) - --- | Specifies a swap partition of a given size. -swapPartition :: PartSize -> PartSpec -swapPartition sz = (Nothing, mempty, const (mkPartition LinuxSwap sz)) - --- | Specifies a partition with a given filesystem. --- --- The partition is not mounted anywhere by default; use the combinators --- below to configure it. -partition :: Fs -> PartSpec -partition fs = (Nothing, mempty, mkPartition fs) - --- | Specifies where to mount a partition. -mountedAt :: PartSpec -> FilePath -> PartSpec -mountedAt (_, o, p) mp = (Just mp, o, p) - --- | Specifies a mount option, such as "noexec" -mountOpt :: ToMountOpts o => PartSpec -> o -> PartSpec -mountOpt (mp, o, p) o' = (mp, o <> toMountOpts o', p) - --- | Mount option to make a partition be remounted readonly when there's an --- error accessing it. -errorReadonly :: MountOpts -errorReadonly = toMountOpts "errors=remount-ro" - --- | Adds additional free space to the partition. -addFreeSpace :: PartSpec -> PartSize -> PartSpec -addFreeSpace (mp, o, p) freesz = (mp, o, \sz -> p (sz <> freesz)) - --- | Forced a partition to be a specific size, instead of scaling to the --- size needed for the files in the chroot. -setSize :: PartSpec -> PartSize -> PartSpec -setSize (mp, o, p) sz = (mp, o, const (p sz)) - --- | Sets the percent of the filesystem blocks reserved for the super-user. --- --- The default is 5% for ext2 and ext4. Some filesystems may not support --- this. -reservedSpacePercentage :: PartSpec -> Int -> PartSpec -reservedSpacePercentage s percent = adjustp s $ \p -> - p { partMkFsOpts = ("-m"):show percent:partMkFsOpts p } - --- | Sets a flag on the partition. -setFlag :: PartSpec -> PartFlag -> PartSpec -setFlag s f = adjustp s $ \p -> p { partFlags = (f, True):partFlags p } - --- | Makes a MSDOS partition be Extended, rather than Primary. -extended :: PartSpec -> PartSpec -extended s = adjustp s $ \p -> p { partType = Extended } - -adjustp :: PartSpec -> (Partition -> Partition) -> PartSpec -adjustp (mp, o, p) f = (mp, o, f . p) |
