propellor-5.17: property-based host configuration management in haskell
Safe HaskellSafe-Inferred
LanguageHaskell2010

Propellor.Property.Chroot

Contents

Synopsis

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.

If the DebootstrapConfig does not include a DebootstrapMirror, any mirror property of the chroot will configure debootstrap. Same for DebootstrapProxy and proxy.

 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.

Like debootstrapped, if the ChrootBootstrapper is Debootstrapped, this property respects the Chroot's proxy and mirror properties.

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 

class ChrootBootstrapper b where Source #

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

Methods

buildchroot Source #

Arguments

:: b 
-> Info

info of the Properties of the chroot

-> FilePath

where to bootstrap the chroot

-> Either String (Property Linux) 

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

data Debootstrapped Source #

Use this to bootstrap a chroot with debootstrap.

Instances

Instances details
ChrootBootstrapper Debootstrapped Source # 
Instance details

Defined in Propellor.Property.Chroot

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

Instances details
ChrootBootstrapper ChrootTarball Source # 
Instance details

Defined in Propellor.Property.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.

useHostProxy :: Host -> Property DebianLike Source #

Ensure that a chroot uses the host's Apt proxy.

This property is often used for built chroots, when the host has useLocalCacher.

Internal use

propagateChrootInfo :: InfoPropagator Source #

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

Propellor is run inside the chroot to provision it.

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