-
Notifications
You must be signed in to change notification settings - Fork 1
Simple distro container bootstrap tool
License
guillon/zoostrap
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
[](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 0
No packages published