ruzickap
packer-templates
Shell

Scripts and Templates used for generating Vagrant images

Last updated Jun 17, 2026
455
Stars
108
Forks
0
Issues
0
Stars/day
Attention Score
73
Language breakdown
No language data available.
Files click to expand
README

Packer Templates mainly for the Vagrant [libvirt][libvirt] and [VirtualBox][virtualbox]

⚠️ Outdated repository
>
This GitHub repository is outdated and no longer actively maintained.
Feel free to fork it if needed.
>
Things which may still be handy:
>
* The packer template build process is using Ansible
to configure the Linux/Windows VMs.
* Packer build process is using GitHub Action + MacOS runners
to build the images which are uploaded to Vagrant Cloud.
>
Anyway - I recommend to use some other alternatives...

Customized+Clean/Minimal boxes for [libvirt][libvirt] and [VirtualBox][virtualbox]

[libvirt]: https://github.com/vagrant-libvirt/vagrant-libvirt [virtualbox]: https://www.vagrantup.com/docs/providers/virtualbox

Build Status


GitHub repository for bug reports or feature requests

Vagrant Cloud repository for the images build by these templates

Requirements

Login Credentials

root / Administrator password is vagrant or is not set.

Default login credentials:

  • Username: vagrant
  • Password: vagrant

VM Specifications

Drivers / Devices added for the VMs for specific providers.

Libvirt

  • VirtIO dynamic Hard Disk (up to 50 GiB)
  • VirtIO Network Interface
  • QXL Video Card (SPICE display)
  • Channel Device (com.redhat.spice.0)

VirtualBox

  • SATA Disk

Configuration

Minimal Linux installation

  • en_US.UTF-8
  • keymap for standard US keyboard
  • UTC timezone
  • NTP enabled (default configuration)
  • full-upgrade
  • unattended-upgrades
  • /dev/vda1 mounted on / using ext4/xfs filesystem (all files in one partition)
  • no swap

Customized Linux installation

Some of the images/templates begins with "my" - they are preconfigured with Ansible role:

  • there are usually many customization depends on distribution - all are
described in Ansible playbook. and Debian list or CentOS list
  • mouse disabled in Midnight Commander + other MC customizations
  • preconfigured snmpd, vim, screen
  • logrotate using xz instead of gzip
  • logwatch is running once per week instead of once per day
  • sshd is using only the strong algorithms
  • sysstat (sar) is running every minute instead of every 5 minutes

Minimal Windows installation

  • UTC timezone
  • IEHarden disabled
  • Home Page set to "about:blank"
  • First Run Wizard disabled
  • Firewall allows Remote Desktop connections
  • AutoActivation skipped
  • DoNotOpenInitialConfigurationTasksAtLogon set to true
  • WinRM (SSL) enabled
  • OpenSSH installed and enabled
  • New Network Window turned off
  • Administrator account enabled
  • EnableLUA
  • Windows image was finalized using sysprep: unattended.xml

Customized Windows 10 installation

Additional Drivers installed for libvirt boxes - VirtIO

Installed during installation:

  • NetKVM: VirtIO Network driver
  • qxldod: QXL graphics driver
  • viostor: VirtIO Block driver (VirtIO SCSI controller driver)
Installed components via Ansible playbook win-simple.yml for Windows:
  • vioscsi: Support for VirtIO SCSI pass-through controller
  • Balloon: VirtIO Memory Balloon driver
  • viorng: VirtIO RNG Device driver
  • vioser: VirtIO Serial Driver
  • vioinput: VirtIO Input Driver - support for new QEMU input devices
virtio-keyboard-pci, virtio-mouse-pci, virtio-tablet-pci, virtio-input-host-pci

Additional Drivers installed for VirtualBox boxes

  • VirtualBox Guest Additions

How to build images

If you have necessary software installed+configured on your local machine you can use the following commands to build the images. You can build the images using the build script build.sh or directly with Packer.

  • Ubuntu requirements:
sudo apt update
  sudo apt install -y ansible curl dnsmasq freerdp2-x11 git jq libc6-dev libvirt-daemon-system libvirt-dev python3-winrm qemu-kvm qemu-utils sshpass xorriso unzip virtualbox

PACKERLATESTVERSION="$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version')" curl "https://releases.hashicorp.com/packer/${PACKERLATESTVERSION}/packer${PACKERLATESTVERSION}linuxamd64.zip" --output /tmp/packerlinux_amd64.zip sudo unzip /tmp/packerlinuxamd64.zip -d /usr/local/bin/ rm /tmp/packerlinuxamd64.zip

VAGRANTLATESTVERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/vagrant | jq -r -M '.current_version') curl "https://releases.hashicorp.com/vagrant/${VAGRANTLATESTVERSION}/vagrant${VAGRANTLATESTVERSION}x8664.deb" --output /tmp/vagrantx86_64.deb sudo apt install --no-install-recommends -y /tmp/vagrantx8664.deb rm /tmp/vagrantx8664.deb

sudo gpasswd -a "${USER}" kvm sudo gpasswd -a "${USER}" libvirt sudo gpasswd -a "${USER}" vboxusers

vagrant plugin install vagrant-libvirt

  • Debian 10+ requirements:
VirtualBox is not in Debian 10 or later. If you need it, you will need to figure out a way to install it.
echo 'deb http://deb.debian.org/debian bullseye main contrib non-free' | sudo tee /etc/apt/sources.list.d/bullseye.list
  sudo sed --regexp-extended 's/^([^#].+\s+main)$/\1 contrib non-free/;' --in-place /etc/apt/sources.list ## Ensure required apt components are enabled.
  cat << EOF | sudo tee /etc/apt/preferences.d/bullseye.pref
  Explanation: Just install packages from bullseye if they are not in buster or buster-backports. Do not upgrade. Delete this file when you want to upgrade to bullseye.
  Package: *
  Pin: release o=Debian,n=bullseye
  Pin-Priority: 50
  EOF
  sudo apt update
  sudo apt install -y ansible curl dnsmasq freerdp2-x11 git jq libc6-dev libvirt-daemon-system libvirt-dev python3-winrm qemu-kvm qemu-utils sshpass xorriso unzip packer/bullseye vagrant vagrant-libvirt

sudo gpasswd -a "${USER}" kvm sudo gpasswd -a "${USER}" libvirt sudo gpasswd -a "${USER}" vboxusers ## If you have VirtualBox installed.

  • Fedora requirements:
sudo dnf install "https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm"
  sudo dnf install -y ansible curl freerdp git jq libvirt libvirt-devel qemu-kvm ruby-devel xorriso unzip VirtualBox

PACKERLATESTVERSION="$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version')" curl "https://releases.hashicorp.com/packer/${PACKERLATESTVERSION}/packer${PACKERLATESTVERSION}linuxamd64.zip" --output /tmp/packerlinux_amd64.zip sudo unzip /tmp/packerlinuxamd64.zip -d /usr/local/bin/ rm /tmp/packerlinuxamd64.zip

VAGRANTLATESTVERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/vagrant | jq -r -M '.current_version') sudo dnf install -y "https://releases.hashicorp.com/vagrant/${VAGRANTLATESTVERSION}/vagrant-${VAGRANTLATESTVERSION}-1.x86_64.rpm" C vagrant plugin install vagrant-libvirt

sudo gpasswd -a "${USER}" kvm sudo gpasswd -a "${USER}" libvirt sudo gpasswd -a "${USER}" vboxusers systemctl start libvirtd

Build process with the build.sh script

git clone --recurse-submodules https://github.com/ruzickap/packer-templates.git
cd packer-templates || exit
  • Ubuntu:
# Ubuntu Server
  ./build.sh ubuntu-{20.04,18.04,16.04}-server-amd64-{libvirt,virtualbox}

# Ubuntu Desktop ./build.sh ubuntu-{20.04,18.04}-desktop-amd64-{libvirt,virtualbox}

# Ubuntu Server - customized ./build.sh my_ubuntu-{20.04,18.04,16.04}-server-amd64-{libvirt,virtualbox}

  • Windows:
# Windows Server
  ./build.sh windows-server-2016-standard-x64-eval-{libvirt,virtualbox}
  ./build.sh windows-server-2019-standard-x64-eval-{libvirt,virtualbox}
  ./build.sh windows-server-2022-standard-x64-eval-{libvirt,virtualbox}

# Windows 10 ./build.sh windows-10-enterprise-x64-eval-{libvirt,virtualbox}

# Windows 10 - customized ./build.sh my_windows-10-enterprise-x64-eval-{libvirt,virtualbox}

Build process with the Packer

  • Ubuntu:
export PACKERIMAGESOUTPUT_DIR="/var/tmp/"
  export LOGDIR="/tmp/"

# Ubuntu Server export NAME="ubuntu-20.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="server" packer build - ubuntu-server.json

export NAME="ubuntu-18.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build - ubuntu-server.json

export NAME="ubuntu-16.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build - ubuntu-server.json

# Ubuntu Desktop export NAME="ubuntu-20.04-desktop-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="desktop" packer build - ubuntu-desktop.json

# Ubuntu Server - customized export NAME="my_ubuntu-20.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="server" packer build - my_ubuntu-server.json

export NAME="my_ubuntu-18.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build - my_ubuntu-server.json

export NAME="my_ubuntu-16.04-server-amd64" export UBUNTUIMAGESURL="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build - my_ubuntu-server.json

  • Windows:
export PACKERIMAGESOUTPUT_DIR="/var/tmp/"
  export TMPDIR="/var/tmp"
  export LOGDIR="/tmp/"
  export VIRTIOWINISO_DIR="/var/tmp/virtio-win"

curl -L -o "${TMPDIR}/virtio-win.iso" https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso xorriso -reportabout WARNING -osirrox on -indev "${TMPDIR}/virtio-win.iso" -extract / "${VIRTIOWINISODIR}" find "${VIRTIOWINISO_DIR}" -type d -exec chmod u+rwx {} \;

# Windows Server ## Windows Server 2022 export NAME="windows-server-2022-standard-x64-eval" export WINDOWS_VERSION="2022" export ISOURL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVEREVALx64FREen-us.iso" packer build - windows.json

## Windows Server 2019 export NAME="windows-server-2019-standard-x64-eval" export WINDOWS_VERSION="2019" export ISOURL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66749/17763.3650.221105-1748.rs5releasesvcrefreshSERVEREVALx64FREen-us.iso" packer build - windows.json

## Windows Server 2016 export NAME="windows-server-2016-standard-x64-eval" export WINDOWS_VERSION="2016" export ISOURL="https://software-download.microsoft.com/download/pr/WindowsServer2016DatacenterEVALen-us14393refresh.ISO" packer build - windows.json

# Windows 10 export NAME="windows-10-enterprise-x64-eval" export WINDOWS_VERSION="10" export VIRTIOWINISO_DIR="/var/tmp/virtio-win" export ISOURL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2releasesvcrefreshCLIENTENTERPRISEEVALOEMRETx64FREen-us.iso" export PACKERIMAGESOUTPUT_DIR="/var/tmp/" packer build - windows.json

# Windows 10 - customized export NAME="my_windows-10-enterprise-x64-eval" export WINDOWS_VERSION="10" export VIRTIOWINISO_DIR="/var/tmp/virtio-win" export ISOURL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2releasesvcrefreshCLIENTENTERPRISEEVALOEMRETx64FREen-us.iso" export PACKERIMAGESOUTPUT_DIR="/var/tmp/" packer build - my_windows.json

Helper scripts

  • build.sh - build single image specified on command-line
  • build_all.sh - builds all images
  • buildallremote_ssh.sh - connects to remote Ubuntu server, install
the necessary packages for building images and execute build_all.sh vagrantinitdestroy_boxes.sh - tests all .box images in the current directory using vagrant add/up/ssh/winrm/destroy

GitLab CI configuration (obsolete) can be found here: GitLabCI_configuration.md

🔗 More in this category

© 2026 GitRepoTrend · ruzickap/packer-templates · Updated daily from GitHub