Add README
parent
4b40194c86
commit
b87d637951
|
@ -0,0 +1,115 @@
|
||||||
|
.. vim: set ft=rst :
|
||||||
|
|
||||||
|
====
|
||||||
|
mkvm
|
||||||
|
====
|
||||||
|
|
||||||
|
``mkvm`` is a command-line tool and Python (3.x) API for creating Gentoo-based
|
||||||
|
*libvirt*/KVM virtual machines.
|
||||||
|
|
||||||
|
The ``mkvm`` command creates reproducible Gentoo system installations from
|
||||||
|
declarative configuration descriptions. Its goal is to produce a minimum
|
||||||
|
working environment that can then be managed by a configuration management
|
||||||
|
package such as `Ansible`_.
|
||||||
|
|
||||||
|
|
||||||
|
Features
|
||||||
|
========
|
||||||
|
|
||||||
|
* Reads virtual machine descriptions from YAML documents
|
||||||
|
* Supports installing Gentoo onto LVM volumes and image files
|
||||||
|
* Can fetch the latest stage3 tarball from a Gentoo mirror
|
||||||
|
* Partitions virtual machine disks using GPT and/or LVM
|
||||||
|
* Performs initial system configuration (e.g. filesystem mount configuration,
|
||||||
|
SSH host key generation, etc.)
|
||||||
|
* Allows execution of custom scripts inside target system environments
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
============
|
||||||
|
|
||||||
|
* `Python`_ 3.3+
|
||||||
|
* `setuptools`_
|
||||||
|
* `libvirt-python`_
|
||||||
|
* `pygpgme`_
|
||||||
|
* `pyudev`_
|
||||||
|
* `PyYAML`_
|
||||||
|
|
||||||
|
|
||||||
|
Additionally, the following commands/packages may be needed:
|
||||||
|
|
||||||
|
|
||||||
|
* ``losetup`` – Used to build raw file images
|
||||||
|
* ``qemu-nbd`` – Used to build file images in *qcow2*, *vmdk*, etc.format
|
||||||
|
* ``lvm2`` – Used to support logical volumes, either inside the target
|
||||||
|
system or on the host
|
||||||
|
* ``sgdisk`` – Used to partition virtual disks with `GPT`_
|
||||||
|
* ``wget`` – Used to fetch Gentoo stage3 tarballs
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
=======
|
||||||
|
|
||||||
|
Virtual machine description, in YAML format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
name: TestVM
|
||||||
|
fqdn: testvm.example.org
|
||||||
|
ram: 512M
|
||||||
|
vcpus: 2
|
||||||
|
net_ifaces:
|
||||||
|
- bridge: br0
|
||||||
|
mac: 52:54:00:40:5b:1c
|
||||||
|
image_format: qcow2
|
||||||
|
disk_size: 5G
|
||||||
|
disk_label: null
|
||||||
|
volumes:
|
||||||
|
- name: root
|
||||||
|
size: 3G
|
||||||
|
fstype: ext4
|
||||||
|
fsopts: ro,noatime,discard
|
||||||
|
mountpoint: /
|
||||||
|
- name: var
|
||||||
|
size: 1G
|
||||||
|
fstype: ext4
|
||||||
|
fsopts: noatime
|
||||||
|
mountpoint: /var
|
||||||
|
- name: var-log
|
||||||
|
size: 512M
|
||||||
|
fstype: ext4
|
||||||
|
fsopts: noatime
|
||||||
|
mountpoint: /var/log
|
||||||
|
kernel: /var/lib/libvirt/images/vmlinuz-3.18.12-gentoo.vm
|
||||||
|
initrd: /var/lib/libvirt/images/initramfs-genkernel-x86_64-3.18.12-gentoo.vm
|
||||||
|
kcmdline: >-
|
||||||
|
root=/dev/testvm/root ro dolvm rootfstype=ext4 nodetect fastboot quiet
|
||||||
|
boot:
|
||||||
|
- kernel
|
||||||
|
timezone: America/Chicago
|
||||||
|
customize: |
|
||||||
|
ln -s net.lo /etc/init.d/net.eth0
|
||||||
|
ln -s /etc/init.d/net.eth0 /etc/runlevels/default/
|
||||||
|
echo config_eth0="dhcp" > /etc/conf.d/net
|
||||||
|
|
||||||
|
The following command will fetch the latest Gentoo stage3 tarball and create a
|
||||||
|
machine using the above description:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
mkvm --latest testvm.yml
|
||||||
|
|
||||||
|
|
||||||
|
.. note:: ``mkvm`` likely needs to be run as root in order to set up loopback
|
||||||
|
devices, create filesystems, etc. Future versions may use privilege
|
||||||
|
separation techniques to allow normal users to create virtual machines.
|
||||||
|
|
||||||
|
|
||||||
|
.. _Ansible: http://www.ansible.com/
|
||||||
|
.. _Python: http://www.python.org/
|
||||||
|
.. _setuptools: https://pythonhosted.org/setuptools/
|
||||||
|
.. _libvirt-python: http://www.libvirt.org/
|
||||||
|
.. _pygpgme: https://pypi.python.org/pypi/pygpgme
|
||||||
|
.. _pyudev: https://pypi.python.org/pypi/pyudev
|
||||||
|
.. _PyYAML: http://pyyaml.org/
|
||||||
|
.. _GPT: https://en.wikipedia.org/wiki/GUID_Partition_Table
|
Loading…
Reference in New Issue