Skip to content

guillon/zoostrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[![Build Status](https://api.travis-ci.org/guillon/zoostrap.png?branch=master)](https://travis-ci.org/guillon/zoostrap/branches)

# Synopsis

The zoostrap utility is a simple tool for bootstrapping a Linux host
distribution and running command in an unprivileged container.

Actually this tool proceeds in three steps:
- download a reference distribution archive an extract into the specified
rootfs directory
- execute installation of additional packages into this rootfs with `PRoot`
- execute actual commands into this rootfs with `ckains`

The list of available x86_64 distributions is currently:
- Ubuntu 12.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=12.04`)
- Ubuntu 14.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=14.04`)
- Ubuntu 16.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=16.04`)
- Ubuntu 18.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=18.04`)
- Ubuntu 20.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=20.04`)
- CentOS 5 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=5`)
- CentOS 6 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=6`)
- CentOS 7 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=7`)
- Fedora 20/21/22/23 (`ZS_DISTRIB_ID=fedora ZS_DISTRIB_RELEASE=20/21/22/23`)

Some x86 distributions are also available with the `ZS_DISTRIB_ARCH=i686`
parameter:
- Ubuntu 12.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=12.04 ZS_DISTRIB_ARCH=i686`)
- Ubuntu 14.04 (`ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=14.04 ZS_DISTRIB_ARCH=i686`)
- CentOS 5 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=5 ZS_DISTRIB_ARCH=i686`)
- CentOS 6 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=6 ZS_DISTRIB_ARCH=i686`)
- Fedora 20 (`ZS_DISTRIB_ID=centos ZS_DISTRIB_RELEASE=20 ZS_DISTRIB_ARCH=i686`)

This tool is still a prototype and as of now configuration is passed through
the environment, refer to the TODO file for next steps.

Note that this tool requires a kernel >= 3.11.x in order to execute
unprivileged containers.
In particular if you have this kind of error:
`ERROR: unshare failed with error Invalid argument`. The host distribution
kernel is probably too old.

The tool uses 3 companions tools as backend:
- PRoot for installation of packages,
- ckains for execution of the container,
- bcache for cacheing of images.

See references section.


# Download

Download a specific release from the release page:
https://github.com/guillon/zoostrap/releases

Or download the last stable version from there:
https://raw.githubusercontent.com/guillon/zoostrap/master/zoostrap

For instance:

    $ wget -O ~/bin/zoostrap https://raw.githubusercontent.com/guillon/zoostrap/master/zoostrap
    $ chmod +x ~/bin/zoostrap

The first command gets the zoostrap tool and the second command sets execution bit.

# Examples

A typical usage is to bootstrap for instance a CentOS or Ubuntu distribution and then
execute a build command into the installed distribution root tree.

For instance, assuming  zoostrap is available in the path:

    $ env ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=12.04 \
      ZS_DISTRIB_PACKAGES="wget" \
      zoostrap rootfs
    $ rootfs/.zoostrap/run wget https://raw.githubusercontent.com/guillon/zoostrap/master/zoostrap
    ...

The first command installs a Ubuntu 12.04 core root tree in the rootfs/
directory and install the wget package.

The second command executes a wget command in the just installed distro.

One can also do this with a single command, passing the command to execute as parameter:

    $ env ZS_DISTRIB_ID=ubuntu ZS_DISTRIB_RELEASE=12.04 \
      ZS_DISTRIB_PACKAGES="wget" \
      zoostrap rootfs wget https://raw.githubusercontent.com/guillon/zoostrap/master/zoostrap
    ...
# Parameters

zoostrap gets parameters from the environment except for the rootfs directory
to create which is passed as argument.

The available parameters are:

* `ZS_DISTRIB_ID="<distro>"`: one of the known distribution listed above.
* `ZS_DISTRIB_RELEASE="<release>"`: one of the known distro release listed above.
* `ZS_DISTRIB_ARCH="<uname-m>"`: the requested architecture for the
  guest as may be provided by `uname -m` for instance. The default is the same
  as the host architecture. It may be x86_64, amd64 (64 bits) or x86,
  i[3456]86 (32 bits).
* `ZS_DISTRIB_PACKAGES="<packages list>"`: space separated list of packages to
  install, note that package names are specific to distributions. It is up to
  the user to give actual packages names as expected by the requested
  distribution.
* `ZS_WGET="<wget command>"`: override default wget command and options.
  The default wget command is: `wget --no-check-certificate --tries 3`.
  Note that you may use `--no-check-certificate` without compromising
  security as all downloaded files are checked against there known
  content hash (a sha1sum).
* `ZS_BCACHE=false|true`: activates caching of installed images, defaults to
  `false`. If `true` Images are cached after after  download and packages
  installation. The cached installed images are
  used on further zoostrap installations if the image identifiers and installed
  packages are the same. Cached images are stored into a local `ZS_BCACHE_DIR`.
  The `ZS_BCACHE_ID` variable can be used to discriminate images optionally,
  and have a guarantee that an image is stable (the actual base distro
  archives may indeed vary over time), though this is not used generally.
  Thus the actual identification of a unique cache entry is done at least with
  the tuple (ZS_DISTRIB_ID, ZS_DISTRIB_RELEASE, ZS_DISTRIB_ARCH,
  ZS_BCACHE_ID). This option uses the `bcache` tool.
* `ZS_BCACHE_DIR=<cache_dir>`: set location of cache when `ZS_BCACHE=true`,
  defaults to `$HOME/.bcache`. Note that this location holds installed images
  which may require some amout of disk space (generally 500Mb par installed
  images with a reasonable number of user packegs). There is no management
  of space provided by the tool, this location can be cleaned manually.
  Note that the startup is much faster if this location is on the same
  partition than the instelled root FSs.
* `ZS_BCACHE_ID=<any_stiing>`: optional discriminent for cached images. Ref to
  `ZS_BCACHE` notes.
* `ZS_UPDATE=true|false`: run packages list update before installing packages,
   defaults to ` true`. This should normally always be active as base distros
   images do not have latest packages versions list.
* `ZS_UPGRADE=false|true`: run packages upgrade before installing packages,
   defaults to `false`. This has an effect only for Ubuntu images and runs
   an `apt-get upgrade` if `true`. This is normally not required, provided
   just as an option. Note that if this is `true`, caching through `ZS_BCACHE`
   is deactivated.
* `ZS_PACKAGES_STRICT/ZS_UPDATE_STRICT/ZS_UPGRADE_STRICT=true|false`: these
  three variables control the error management on respectively packages
  installation, packages update, packages upgrade. There are cases where
  packages installation fail due to limitation of the non-privileged PRoot
  backend. For instace some packages installation may try to restart damons or
  create device nodes, which is not supported. If actually the installation is
  correct even when such errors are reported, one may use
  `ZS_PACKAGES_STRICT=false` to work-around the problem.


# Build and Install

This script requires bash and wget packages and should work on any Linux
distribution for x86_64 architecture with a kernel >= 3.0.

The script can be used directly without installation.

A makefile is provided for completion and testing purpose.

Build with:

    $ make all # a no-op actually

Run unit tests with:

    $ make check

Install with, for instance:

    $ make install PREFIX=$HOME/local  # Default is PREFIX=/usr/local


# References

Refer to the project home page at:
http://guillon.github.com/zoostrap

Refer to the current build and validation status at:
https://travis-ci.org/guillon/zoostrap?branches

Fill issues and enhancement request at:
https://github.com/guillon/zoostrap/issues

Refer to the TODO file for future work:
https://github.com/guillon/zoostrap/blob/master/TODO

Refer to ckains at: https://github.com/mickael-guene/ckains

Refer to PRoot at: http://proot.me

Refer to bcache at: https://guillon.github.com/bcache/

# License

Refer to the COPYING file: https://github.com/guillon/zoostrap/blob/master/COPYING
Refer to the COPYRIGHT file: https://github.com/guillon/zoostrap/blob/master/COPYRIGHT

About

Simple distro container bootstrap tool

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •