Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fabiand/imgbased
Handle image based rootfs
https://github.com/fabiand/imgbased
Last synced: about 2 months ago
JSON representation
Handle image based rootfs
- Host: GitHub
- URL: https://github.com/fabiand/imgbased
- Owner: fabiand
- License: gpl-2.0
- Created: 2014-04-02T22:11:21.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2015-12-01T17:59:11.000Z (about 9 years ago)
- Last Synced: 2023-03-31T17:00:03.907Z (almost 2 years ago)
- Language: Python
- Size: 388 KB
- Stars: 3
- Watchers: 4
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
imgbased
========imgbased provides a specific management method to derive writeable filesystem
layers from read-only base images.
It also takes care that the layer which shall be used can be selected at boot
time.In a nutshell this works by:
* having a boot partition
* and having a default LVM volume group (*HostVG*)
* which has a *thinpool*
* each *base* is kept in a read-only thin logical volume in the *thinpool*
* for each *base* at least one writable *layer*, which is a thin logical
volume, is created in the *thinpool*
* for each *layer* a boot entry is created which can be used to boot in a
specific layerFor more details see below.
Build the tool
--------------[![Build Status](https://travis-ci.org/fabiand/imgbased.svg)](https://travis-ci.org/fabiand/imgbased)
How to build the tools.
sudo yum install -y make autoconf automake python
git clean -fdx
./autogen.sh
make dist
rpmbuild -ta imgbased-*.tar.xzBuild an image
--------------The repository also contains some example kickstarts which create an image with
the correct LVm layout to get started with this tool.> Note: The `imgbase` tool is automatically installe inside the image during
> creation.# Lorax provides livemedia-creator
pkcon install -y qemu-kvm# First create the kickstarts
make dist# Kickoff the image creation
make image-build# Do some automatic sanity testing on the image:
make check# Or run the image yourself
# Default password for root: r
qemu-kvm -hda runtime-layout.img -smp 4 -m 1024 -net user -net nicUsing `imgbase` in the image
--------------------------The `imgbase` tool is installed within the example image from the previous
section.
It can be used to create new *layers* and install new *bases*.# To create the assumed LVM layout
imgbase layout --init# List existing layers and bases
imgbase layout# Add a new base
# The `--size` argument specifies the size of the underlying
# logical volume. It must be at least the size of the filesystem
# contained in `$IMGFILE`.
imgbase base --add --size 1G $IMGFILE# Get the latest base (which will be used for subsequent layers)
imgbase base --latest# Add a new layer on the latest base or latest layer of the latest base
imgbase layer --add# And with more infos
imgbase --debug layer --addThere is also a dry-mode (`imgbase --debug --dry ...`) which just outputs the
commands to run.Purpose
-------Provide a more flexible solution for [oVirt Node](http://www.ovirt.org/Node).
Mainly a way where we can re-use existing technologies like anaconda.High-Level Things
-----------------* Read-Only bases (see also Drawbacks)
* Write-able layers
* Boot into layers
* No inheritance between bases
* *Persistence* between bases
* Copy files between Base-N to Base-(N+1)Features
--------* Based on stable things (LVM, ext4)
* A real filesystem (the *layer*) is modified and is used for boot
* This solves all sort of problems with early boot
* Sparseness everywhere
* LVM with thinpool and thinvolume (frees space on discard operation)
* ext4 FS with discard option (frees space after file removal)
* LiveCD is only the delivery method
* rootfs image is used at runtime
* More distro agnostic than LiveCD
* dracut, lvm (with thin volumes) and ext4 are the requirementsDrawbacks
---------* Not as read-only as LiveCD-everywhere approach
* The rootfs is kept on a ro LV, if this is changed to rw then the original
base lv can be changed.
This wasn't possible when the LiveCD was stored, because the rootfs was
in a (as by limitation) read-only squashfs.
* The persistence is a copy
* When a new base image is installed, the persistence of configuration
(and other) files from the previous base happens by copying the files.
Previously bind mounts were used to achieve this.
* Runtime space requirements are higher compared to LiveCD runtime
* The LiveCD based delivery will be comparable in size.LVM Structure
-------------Assumptions about the host:
+ VG
|
+--+ Config (LV)
|
+--+ Base-0 (LV, ro)
| \
| \
| + Base-0.1 (LV, rw)
| |
| + Base-0.2 (LV, rw)
|
|
+--+ Base-1 (LV, ro)
| \
| \
| + Base-1.1 (LV, rw)
: :With a boot entry for each Base-\* this allows the user to boot into each
Base-LV.
Changes are inherited from each Base-\* and can also be persisted using the
Config LV.LiveCD Payload
--------------The image is the (in future) intended to be also used as a paylod for LiveCD
ISOs and to be deployed via PXE.
Because of this we want to minimize the image even further. For this
[virt-sparsify](http://libguestfs.org/virt-sparsify.1.html) and squashfs
can be used to simulate the size of the image when it is used as a payload.# To get an idea of the minimized size use
make runtime-layout.squashThe LiveCD will be created the livemedia-creator which is part of
[lorax](https://git.fedorahosted.org/cgit/lorax.git/).