Building Vagrant box images
***************************

This document describes how to build vagrant box images for the
FreeIPA workshop.


Requirements
============

* Install packer (http://packer.io/)

* Install Vagrant, libvirt and VirtualBox

* Clone the Fedora kickstarts repo (https://pagure.io/fedora-
  kickstarts)


Packer template
===============

Packer template "packer-template-fedora.json" requires Fedora 34
kickstart file used by Fedora to build vagrant images:

* Clone the repo and checkout latest Fedora release branch:

     $ git clone https://pagure.io/fedora-kickstarts.git
     $ cd fedora-kickstarts
     $ git checkout f34

* Install "pykickstart" package which provides "ksflatten" tool:

     $ sudo dnf install pykickstart

* Generate the "anaconda-ks.cfg" file needed by flattening vagrant
  kickstart files and putting it onto the same folder as the packer
  template file:

     $ ksflatten -c $FEDORA_KICKSTARTS_REPO/fedora-cloud-base-vagrant.ks > $FREEIPA_REPO/doc/workshop/anaconda-ks.cfg


Building the vagrant images
===========================

Build the images:

   $ cd $FREEIPA_REPO/doc/workshop
   $ BIN_PACKER build packer-template-fedora.json


Uploading boxes to Vagrant Cloud
================================

Vagrant by default looks for boxes in a directory called *Vagrant
Cloud*. Therefore is is good to make images available there, so that
people can easily download them as part of workshop preparation.

1. Log into https://app.vagrantup.com/.

2. Create or edit the *freeipa-workshop* box.

3. Create a new *version* of the box (left-hand menu).  Each version
   can include images for multiple *providers*.

4. *Create new provider* for ***virtualbox*** and upload the
   corresponding ".box" file.

5. *Create new provider* for ***libvirt*** and upload the
   corresponding ".box" file.  *libvirt* may not appear as an
   autocomplete option but type it in anyway.

6. *Release* the new version (this makes it available for Vagrant to
   download).  *Edit* the version, then click *Release version*.
