propellor-5.3.3: property-based host configuration management in haskell

Safe Haskell | None
Language | Haskell98

Propellor.Property.Chroot

Contents

- Internal use

Synopsis

- debootstrapped :: DebootstrapConfig -> FilePath -> Props metatypes -> Chroot
- bootstrapped :: ChrootBootstrapper b => b -> FilePath -> Props metatypes -> Chroot
- provisioned :: Chroot -> RevertableProperty (HasInfo + Linux) Linux
- hostChroot :: ChrootBootstrapper bootstrapper => Host -> bootstrapper -> FilePath -> Chroot
- data Chroot where
  - Chroot :: ChrootBootstrapper b => FilePath -> b -> InfoPropagator -> Host -> Chroot
- class ChrootBootstrapper b where
- data Debootstrapped = Debootstrapped DebootstrapConfig
- data ChrootTarball = ChrootTarball FilePath
- inChroot :: Propellor Bool
- exposeTrueLocaldir :: (FilePath -> Propellor a) -> Propellor a
- provisioned' :: Chroot -> Bool -> RevertableProperty (HasInfo + Linux) Linux
- propagateChrootInfo :: InfoPropagator
- propellChroot :: Chroot -> ([String] -> IO (CreateProcess, IO ())) -> Bool -> Property UnixLike
- chain :: [Host] -> CmdLine -> IO ()
- chrootSystem :: Chroot -> Maybe System

# Documentation

debootstrapped :: DebootstrapConfig -> FilePath -> Props metatypes -> Chroot Source #

Defines a Chroot at the given location, built with debootstrap.

Properties can be added to configure the Chroot. At a minimum, add a property such as `osDebian` to specify the operating system to bootstrap.

     debootstrapped Debootstrap.BuildD "/srv/chroot/ghc-dev" $ props
    	& osDebian Unstable X86_64
    	& Apt.installed ["ghc", "haskell-platform"]
    	& ...

bootstrapped :: ChrootBootstrapper b => b -> FilePath -> Props metatypes -> Chroot Source #

Defines a Chroot at the given location, bootstrapped with the specified ChrootBootstrapper.

provisioned :: Chroot -> RevertableProperty (HasInfo + Linux) Linux Source #

Ensures that the chroot exists and is provisioned according to its properties.

Reverting this property removes the chroot. Anything mounted inside it is first unmounted. Note that it does not ensure that any processes that might be running inside the chroot are stopped.

hostChroot :: ChrootBootstrapper bootstrapper => Host -> bootstrapper -> FilePath -> Chroot Source #

Generates a Chroot that has all the properties of a Host.

Note that it's possible to create loops using this, where a host contains a Chroot containing itself etc. Such loops will be detected at runtime.

data Chroot where Source #

Specification of a chroot. Normally you'll use `debootstrapped` or `bootstrapped` or `hostChroot` to construct a Chroot value.

Constructors

Chroot :: ChrootBootstrapper b => FilePath -> b -> InfoPropagator -> Host -> Chroot |

Instances

Show Chroot Source # |
Methods showsPrec :: Int -> Chroot -> ShowS show :: Chroot -> String showList :: [Chroot] -> ShowS
IsContainer Chroot Source # |
Methods containerProperties :: Chroot -> [ChildProperty] Source # containerInfo :: Chroot -> Info Source # setContainerProperties :: Chroot -> [ChildProperty] -> Chroot Source #

class ChrootBootstrapper b where Source #

Class of things that can do initial bootstrapping of an operating System in a chroot.

Minimal complete definition

buildchroot

Methods

buildchroot :: b -> Maybe System -> FilePath -> Either String (Property Linux) Source #

Do initial bootstrapping of an operating system in a chroot. If the operating System is not supported, return Left error message.

Instances

ChrootBootstrapper Debootstrapped Source # |
Methods buildchroot :: Debootstrapped -> Maybe System -> FilePath -> Either String (Property Linux) Source #
ChrootBootstrapper ChrootTarball Source # |
Methods buildchroot :: ChrootTarball -> Maybe System -> FilePath -> Either String (Property Linux) Source #

data Debootstrapped Source #

Use this to bootstrap a chroot with debootstrap.

Constructors

Debootstrapped DebootstrapConfig |

Instances

ChrootBootstrapper Debootstrapped Source # |
Methods buildchroot :: Debootstrapped -> Maybe System -> FilePath -> Either String (Property Linux) Source #

data ChrootTarball Source #

Use this to bootstrap a chroot by extracting a tarball.

The tarball is expected to contain a root directory (no top-level directory, also known as a "tarbomb"). It may be optionally compressed with any format `tar` knows how to detect automatically.

Constructors

ChrootTarball FilePath |

Instances

ChrootBootstrapper ChrootTarball Source # |
Methods buildchroot :: ChrootTarball -> Maybe System -> FilePath -> Either String (Property Linux) Source #

inChroot :: Propellor Bool Source #

Check if propellor is currently running within a chroot.

This allows properties to check and avoid performing actions that should not be done in a chroot.

exposeTrueLocaldir :: (FilePath -> Propellor a) -> Propellor a Source #

Runs an action with the true localdir exposed, not the one bind-mounted into a chroot. The action is passed the path containing the contents of the localdir outside the chroot.

In a chroot, this is accomplished by temporily bind mounting the localdir to a temp directory, to preserve access to the original bind mount. Then we unmount the localdir to expose the true localdir. Finally, to cleanup, the temp directory is bind mounted back to the localdir.

# Internal use

provisioned' :: Chroot -> Bool -> RevertableProperty (HasInfo + Linux) Linux Source #

propagateChrootInfo :: InfoPropagator Source #

propellChroot :: Chroot -> ([String] -> IO (CreateProcess, IO ())) -> Bool -> Property UnixLike Source #

Propellor is run inside the chroot to provision it.

chain :: [Host] -> CmdLine -> IO () Source #

chrootSystem :: Chroot -> Maybe System Source #