lxc: High level Haskell bindings to LXC (Linux containers).

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.


The library provides Haskell LXC API, wrapping bindings-lxc package.

[Skip to ReadMe]


Versions0.1, 0.1.1, 0.2, 0.3, 0.3.1,,, 0.3.2
Change logCHANGELOG.md
Dependenciesbase (==4.7.*), bindings-lxc (==0.2.*), mtl, transformers (>=0.2) [details]
AuthorNickolay Kudasov
Home pagehttps://github.com/fizruk/lxc
Bug trackerhttps://github.com/fizruk/lxc/issues
Source repositoryhead: git clone https://github.com/fizruk/lxc.git -b master
UploadedFri Oct 10 07:21:32 UTC 2014 by NickolayKudasov




Maintainers' corner

For package maintainers and hackage trustees

Readme for lxc-

[back to package description]


Build Status

High level Haskell bindings to LXC (Linux containers).

The library provides Haskell LXC API, wrapping <http://hackage.haskell.org/package/bindings-lxc bindings-lxc package>.


Before installation make sure you have LXC installed on your system with header files and static library.

On Ubuntu 14.04 LTS (Trusty Tahr):

$ sudo apt-get install lxc-dev

On previous Ubuntu versions (including 12.04 LTS Precise Pangolin) standard repositories do not contain liblxc1 package. You might want to use ppa:ubuntu-lxc/stable repository instead:

$ sudo apt-get install software-properties-common python-software-properties
$ sudo add-apt-repository ppa:ubuntu-lxc/stable
$ sudo apt-get update
$ sudo apt-get install lxc-dev


Get the latest stable version from Hackage:

$ cabal install lxc

or clone this repository:

$ git clone https://github.com/fizruk/lxc.git
$ cd lxc
$ cabal install


Haddock documentation is available at http://fizruk.github.io/lxc/docs/


Most of container-related functions (e.g. start, attach, destroy) perform in a LXC monad. To run LXC a computation you need to specify a container using withContainer function. When working with a single container it might be handy to have an alias like this:

let containerName = withContainer (Container "container-name" configPath)

You can start using Haskell LXC API bindings similar to a command line tool from GHCi:

$ ghci
>>> import System.LXC
>>> let trusty = withContainer (Container "trusty" Nothing)
>>> trusty $ create "download" Nothing Nothing [] ["-d", "ubuntu", "-r", "trusty", "-a", "amd64"]
Using image from local cache
Unpacking the rootfs

You just created an Ubuntu container (release=trusty, arch=amd64, variant=default)
The default username/password is: ubuntu / ubuntu
To gain root privileges, please use sudo.

>>> trusty $ start False []
>>> trusty state
>>> trusty $ attachRunWait defaultAttachOptions "echo" ["echo", "Hello, world!"]
Hello, world!
Just ExitSuccess
>>> trusty stop
>>> Just trustySnapC <- trusty $ clone (Just "trusty-snap") Nothing [CloneSnapshot] Nothing Nothing Nothing []
>>> let trustySnap = withContainer trustySnapC
>>> trustySnap $ start False []
>>> trustySnap getInterfaces
>>> trustySnap $ getIPs "eth0" "inet" 0
>>> trustySnap $ shutdown (-1)
>>> trustySnap state

For more examples, please see examples/ folder.


Contributions and bug reports are welcome!

Please feel free to contact me via GitHub or on the #haskell IRC channel on irc.freenode.net.

-Nickolay Kudasov