From 59b28e322eaef12b2f9f86f6b97f4ccc7f17032d Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 27 Sep 2018 14:51:44 +0300 Subject: Drop: obsolete start of manual --- doc/Makefile | 10 --- doc/en/000.mdwn | 217 -------------------------------------------------------- doc/format-html | 15 ---- doc/format-pdf | 19 ----- doc/vmdb2.css | 79 --------------------- 5 files changed, 340 deletions(-) delete mode 100644 doc/Makefile delete mode 100644 doc/en/000.mdwn delete mode 100755 doc/format-html delete mode 100755 doc/format-pdf delete mode 100644 doc/vmdb2.css diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 04e9486..0000000 --- a/doc/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -formats: vmdb2.en.html vmdb2.en.pdf -en_srcs = $(wildcard en/*) - -all: $(formats) - -vmdb2.en.html: $(en_srcs) vmdb2.css - ./format-html "$@" ${en_srcs} - -vmdb2.en.pdf: $(en_srcs) - ./format-pdf "$@" ${en_srcs} diff --git a/doc/en/000.mdwn b/doc/en/000.mdwn deleted file mode 100644 index 87d7e76..0000000 --- a/doc/en/000.mdwn +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: Building Debian system images with vmdb2 -author: Lars Wirzenius -date: work-in-progress -... - -# Introduction - -`vmdb2` installes [Debian][] **system images**. The image may be in a -disk image file or a block device, such as a real hard disk, a -partition, a logical volume, or similar. - -Other similar software exists, such as `vmdebootstrap`, an earlier -attempt by the same author. - -[Debian]: https://www.debian.org - -## Why vmdb2 given vmdebootstrap already existed - -`vmdebootstrap` was the first attempt by Lars Wirzenius to write a -tool to build system images. It turned out to not be well designed. -Specifically, it was not easily extensible to be as flexible as a tool -of this sort should be. - -## Why vmdb2 given other tools already exist - -Lars likes to write tools for himself and had some free time. He -sometimes prefers to write his own tools rather than spend time and -energy evaluating existing tools. - -Also, he felt ashamed of how messy `vmdebootstrap` turned out to be. - -If nobody else likes `vmdb2`, that just means Lars had some fun on his -own. - -# Installation - -You can install `vmdb2` from a .deb package on [code.liw.fi/debian][], -Lars's personal APT repository. You can also get the source code with -git from [vmdb2 git][], and run `./vmdb2` from the source tree: the -program doesn't need to be installed anywhere. - -[code.liw.fi/debian]: http://code.liw.fi/debian/ -[vmdb2 git]: http://git.liw.fi/vmdb2 - -# Quick start - -- sample .vmdb2 -- command to run vmdb2 and produce an image -- command to run vm using image - -`vmdb2` requires an **image specification file** as input. Here is a -small example: - -~~~ -steps: - - mkimg: "{{ output }}" - size: 4G - - - mklabel: msdos - device: "{{ output }}" - - - mkpart: primary - device: "{{ output }}" - start: 0% - end: 100% - part-tag: root-part - - - mkfs: ext4 - partition: root-part - - - mount: root-part - fs-tag: root-fs - - - unpack-rootfs: root-fs - - - debootstrap: stretch - mirror: http://deb.debian.org/debian - target: root-fs - unless: rootfs_unpacked - - - apt: linux-image-amd64 - fs-tag: root-fs - unless: rootfs_unpacked - - - cache-rootfs: root-fs - unless: rootfs_unpacked - - - chroot: root-fs - shell: | - apt -y install python - - - shell: | - printf '[pc]\n%s hostname=pc\n' "$ROOT" > pc.inventory - ansible-playbook -i pc.inventory -c chroot pc.yml - root-fs: root-fs - - - grub: bios - root-fs: root-fs - root-part: root-part - device: "{{ output }}" -~~~ - -It's a bit of a mouthful, and needs to be unpacked to be understood, -though every part is really quite simple. First of all, the file is in -[YAML][] format, which is a standard format not specific to `vmdb2` at -all. The top level is the `steps` key, which has as its value a list -of **steps**. The steps instruct `vmdb2` what it should do, and in -which order, to build the image. - -[YAML]: https://en.wikipedia.org/wiki/YAML - -The previous `vmdebootstrap` program hard coded the sequence of steps -to build an image, and provided command line options to vary the steps -in minor ways. The `vmdb2` approach gives more flexibility with less -complexity, and is more easily testable. - -Each step consists of a set of key/value pairs. For example, the first -step creates a disk image file: - - - mkimg: "{{ output }}" - size: 4G - -`mkimg` identifies the step. The value is a [Jinja2][] template. In -this case, the template expands to the value of the `output` variable, -which contains the value of the `--output` command line option, -meaning the name of the output file. Jinja2 is a powerful templating -engine, and `vmdb2` uses it, amongst other reasons, to avoid -implementing a custom language for using variables. - -[Jinja2]: http://jinja.pocoo.org/ - -The `size` key specifies the size of the disk image file that gets -created. `vmdb2` uses the `qemu-img` tool to create the image file and -the size value can be anything that `qemu-img` accepts. - -The rest of the steps create a partition table (`mklabel`), a -partition (`mkpart`), and a filesystem (`mkfs`), as well as mount the -filesystem as the root filesystem. Partitions and mount points get -assigned **tags**, which allow later steps to refer to them, without -having to hardcode a directory or device name. Those tend to be a bit -random and vary from run to run, so hardcoding wouldn't work anyway. - -The `debootstrap` step runs `debootstrap`, i.e., actually installs -Debian into the image. This can take a while, so `vmdb2` provides a -caching mechanism, to speed up iterations (unlike you, Lars never gets -things right the first one). This caching is done by using the -`--rootfs-tarball` command line option and the `unpack-rootfs` step, -and the `unless: rootfs_unpacked` key/value pair in selected steps. -Caching works like this: the filename given to `--rootfs-tarball` is -the cache filename. The `unpack-rootfs` looks for the cache file; if -it exists, it unpacks it, and sets the `rootfs_unpacked` variable to a -Boolean true value. Any other step can be tagged with `unless`, and if -the named value is true, the step is skipped. Thus, if the cache file -exists, the `debootstrap` step is skipped. Finally, the `cache-rootfs` -step creates a compressed tar archive of the filesystem, and that step -is also skipped if the `unless` tells `vmdb2` to skip it. - -At the end, the `grub` step installs the GRUB bootloader. The example -installs a version compatible with traditional PC BIOS systems, which -works fine with virtual machine providers. A variabnt to support UEFI -systems is also available. - -To run `vmdb2` with the above example, run a command like this: - - vmdb2 pc.vmdb --output foo.img --rootfs-tarball foo.tar.gz - -This tells `vmdb2` to read the image specification file from -`pc.vmdb`, place the output in `foo.img` and use `foo.tar.gz` as the -cache tar archive. - - -# Configuration - -- command line options, list them and give summary of use -- cliapp config files, ini and yaml, and the fact that a long - option is always an acceptable variable in a config file - -`vmdb2` has a number of command line options. Run `vmdb2 --help` to -see them all, or look at the manual page (`man vmdb2`). - -Each long option (`--output` for example) can be a **configuration -variable** in a configuration file. The program looks up and reads -several configration files, such as `~/.config/vmdb2/*.conf` and -`*.yaml` in the same directory. `.yaml` files use a YAML syntax, -everything else uses INI file syntax. - -Example: Store the following as `~/.config/vmdb2/vmdb2.yaml`: - - config: - output: /tmp/vmdb2.img - log: /tmp/vmdb2.log - rootfs-tarball: /tmp/vmdb2.tar.gz - -This is equivalent of running `vmdb2--output=/tmp/vmdb2.img ---log=/tmp/vmdb2.log --rootfs-tarball=/tmp/vmdb2.tar.gz`. - -See **cliapp**(5) for more detailed information about configuration -files. cliapp is a Python library that `vmdb2` uses for command line -handling, configuration files, and such things. - -# List of available steps and their configuration - -- list each step -- what is the step for? examples of how it could be used -- what mandatory and optional key/value pairs does it - understand? examples of their use -- the tag concept - -# Examples - -- various spec files, explained in detail -- simple image to run under kvm, qemu, or similar, boots with - normal grub (bios) -- same but with uefi boot -- same but software installed with ansible -- an LVM enabled image with encrypted / but cleartext /boot diff --git a/doc/format-html b/doc/format-html deleted file mode 100755 index 88147e8..0000000 --- a/doc/format-html +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -set -eu - -output="$1" -shift - -pandoc -H vmdb2.css\ - --smart \ - --toc \ - --chapters \ - --number-sections \ - --standalone \ - --self-contained \ - -o "$output" "$@" diff --git a/doc/format-pdf b/doc/format-pdf deleted file mode 100755 index 6915245..0000000 --- a/doc/format-pdf +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -set -eu - -output="$1" -shift - -pandoc --smart \ - --toc \ - --chapters \ - --number-sections \ - -Vdocumentclass:report \ - -Vgeometry:a4paper \ - -Vfontsize:12pt \ - -Vmainfont:FreeSans \ - -Vsansfont:FreeSans \ - -Vmonofont:FreeMonoBold \ - --latex-engine=xelatex \ - -o "$output" "$@" diff --git a/doc/vmdb2.css b/doc/vmdb2.css deleted file mode 100644 index 78cd374..0000000 --- a/doc/vmdb2.css +++ /dev/null @@ -1,79 +0,0 @@ - -- cgit v1.2.1