Script to automate the management of Arch Linux qemu-based VMs
Find a file
Fabio Manganiello 9daa3907a9 Major refactor
- Project renamed to `vmctl`
- Using a single `vmctl` executable script (it makes the installation
  process trivial)
- Better documentation for `vmctl install`
2022-03-07 22:33:53 +01:00
.gitignore Added Arch Linux installation script 2022-03-07 11:02:15 +01:00
LICENSE Initial commit 2022-03-05 23:08:01 +01:00
README.md Major refactor 2022-03-07 22:33:53 +01:00
vmctl Major refactor 2022-03-07 22:33:53 +01:00

vmctl

vmctl is a script that automates the installation, provisioning and management of Arch Linux virtual machines.

Dependencies

  • qemu
  • curl
  • expect

Installation

Just copy the vmctl script anywhere in your PATH, or clone the repository and create a symbolic link to vmctl in your PATH.

Usage

Install an Arch Linux virtual machine

The vmctl install command can be used to create an Arch Linux virtual machine on the fly, wherever you are. It does the following:

  • It downloads the latest Arch Linux installer ISO image if none was downloaded or a new one is available.
  • It creates a qemu disk file.
  • It boots a new KVM that uses the ISO file as as CDROM and automates the installation of Arch Linux in the virtual machine (no user prompt required).
  • It can install extra packages and run custom post-installation provisioning scripts.
Usage: vmctl install [-o <output-disk-image>] [-a <architecture>] [-s <disk-size>]
        [-m <memory>] [-h <hostname>] [-P <root-password>] [-u <non-root-username>]
        [-p <non-root-user-password>] [-z <timezone>] [-l <locale>] [-M <arch-mirror-url>]

-o      <output-disk-image>             Path of the output disk image (default: ./arch.img)
-a      <architecture>                  Target architecture (default: x86_64)
-s      <disk-size>                     Disk size (default: 8G)
-m      <memory>                        RAM size in KB (default: 2048)
-h      <hostname>                      VM hostname (default: qemu)
-P      <root-password>                 Root password. If not specified it will be prompted
-u      <non-root-username>             Username for the main non-root user
-p      <non-root-user-password>        Password for the non-root user. If not specified it will be prompted
-z      <timezone>                      System timezone (default: UTC)
-l      <locale>                        System locale (default: en_US.UTF-8)
-M      <arch-mirror-url>               Arch Linux download mirror URL (default: http://mirror.cj2.nl/archlinux/iso/latest/)
                                        Consult https://archlinux.org/download/ for a full list of the available download mirrors.

If a required option is not specified on the command line then it will be interactively prompted to the user (defaults are available for most of the options).

Non-interactive example:

vmctl install \
    -h my_vm \
    -a x86_64 \
    -s 16G \
    -m 2048 \
    -P root \
    -u myuser \
    -p password \
    -z Europe/Amsterdam \
    -o arch-base.img

If you want to install an extra list of packages besides the default ones, then specify them in a file named PKGLIST in the same directory as the disk image file.

If you want to run a custom post-installation script after the core system has been installed, then create a custom script named post-install.sh in the same directory as the disk image file.

Notes

The keyring population process may currently (as of March 2022) take a long time. This is a known issue.

Resize an existing image

qemu-img resize "$imgfile" +10G

Create a COW (Copy-On-Write) image on top of a disk image

qemu-img create -o backing_file="$imgfile",backing_fmt=raw -f qcow2 img1.cow

This is particularly useful if you want to have a "base" image and several customized images built on it.

Convert a raw qemu image to a VirtualBox

qemu-img convert -O vdi disk.img disk.vdi