Packer Templates mainly for the Vagrant libvirt and VirtualBox
⚠️ Outdated repositoryThis 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 and VirtualBox
- QEMU-KVM
- Vagrant
- Vagrant Libvirt Plugin
- VirtualBox (Version 6.1 or later)
- Packer (Version 1.8.0 or later)
root
/ Administrator
password is vagrant
or is not set.
Default login credentials:
- Username:
vagrant
- Password:
vagrant
Drivers / Devices added for the VMs for specific providers.
- VirtIO dynamic Hard Disk (up to 50 GiB)
- VirtIO Network Interface
- QXL Video Card (SPICE display)
- Channel Device (com.redhat.spice.0)
- SATA Disk
- 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
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.
- added packages: see the Common list 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
- 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
- added packages: see the common_windows_packages
- Additional configuration done via Ansible playbook Win32NT-common.yml
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
- pvpanic: QEMU pvpanic device driver
- qemu-ga: Qemu Guest Agent
- VirtualBox Guest Additions
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 PACKER_LATEST_VERSION="$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version')" curl "https://releases.hashicorp.com/packer/${PACKER_LATEST_VERSION}/packer_${PACKER_LATEST_VERSION}_linux_amd64.zip" --output /tmp/packer_linux_amd64.zip sudo unzip /tmp/packer_linux_amd64.zip -d /usr/local/bin/ rm /tmp/packer_linux_amd64.zip VAGRANT_LATEST_VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/vagrant | jq -r -M '.current_version') curl "https://releases.hashicorp.com/vagrant/${VAGRANT_LATEST_VERSION}/vagrant_${VAGRANT_LATEST_VERSION}_x86_64.deb" --output /tmp/vagrant_x86_64.deb sudo apt install --no-install-recommends -y /tmp/vagrant_x86_64.deb rm /tmp/vagrant_x86_64.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 PACKER_LATEST_VERSION="$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | jq -r -M '.current_version')" curl "https://releases.hashicorp.com/packer/${PACKER_LATEST_VERSION}/packer_${PACKER_LATEST_VERSION}_linux_amd64.zip" --output /tmp/packer_linux_amd64.zip sudo unzip /tmp/packer_linux_amd64.zip -d /usr/local/bin/ rm /tmp/packer_linux_amd64.zip VAGRANT_LATEST_VERSION=$(curl -s https://checkpoint-api.hashicorp.com/v1/check/vagrant | jq -r -M '.current_version') sudo dnf install -y "https://releases.hashicorp.com/vagrant/${VAGRANT_LATEST_VERSION}/vagrant-${VAGRANT_LATEST_VERSION}-1.x86_64.rpm" CONFIGURE_ARGS="with-ldflags=-L/opt/vagrant/embedded/lib with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib64/libvirt" 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}
-
Ubuntu:
export PACKER_IMAGES_OUTPUT_DIR="/var/tmp/" export LOGDIR="/tmp/" # Ubuntu Server export NAME="ubuntu-20.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="server" packer build -only="qemu" ubuntu-server.json export NAME="ubuntu-18.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build -only="qemu" ubuntu-server.json export NAME="ubuntu-16.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build -only="qemu" ubuntu-server.json # Ubuntu Desktop export NAME="ubuntu-20.04-desktop-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="desktop" packer build -only="qemu" ubuntu-desktop.json # Ubuntu Server - customized export NAME="my_ubuntu-20.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/" export UBUNTU_TYPE="server" packer build -only="qemu" my_ubuntu-server.json export NAME="my_ubuntu-18.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build -only="qemu" my_ubuntu-server.json export NAME="my_ubuntu-16.04-server-amd64" export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/" export UBUNTU_TYPE="server" packer build -only="qemu" my_ubuntu-server.json
-
Windows:
export PACKER_IMAGES_OUTPUT_DIR="/var/tmp/" export TMPDIR="/var/tmp" export LOGDIR="/tmp/" export VIRTIO_WIN_ISO_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 -report_about WARNING -osirrox on -indev "${TMPDIR}/virtio-win.iso" -extract / "${VIRTIO_WIN_ISO_DIR}" find "${VIRTIO_WIN_ISO_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 ISO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" packer build -only="qemu" windows.json ## Windows Server 2019 export NAME="windows-server-2019-standard-x64-eval" export WINDOWS_VERSION="2019" export ISO_URL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66749/17763.3650.221105-1748.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso" packer build -only="qemu" windows.json ## Windows Server 2016 export NAME="windows-server-2016-standard-x64-eval" export WINDOWS_VERSION="2016" export ISO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" packer build -only="qemu" windows.json # Windows 10 export NAME="windows-10-enterprise-x64-eval" export WINDOWS_VERSION="10" export VIRTIO_WIN_ISO_DIR="/var/tmp/virtio-win" export ISO_URL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" export PACKER_IMAGES_OUTPUT_DIR="/var/tmp/" packer build -only="qemu" windows.json # Windows 10 - customized export NAME="my_windows-10-enterprise-x64-eval" export WINDOWS_VERSION="10" export VIRTIO_WIN_ISO_DIR="/var/tmp/virtio-win" export ISO_URL="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" export PACKER_IMAGES_OUTPUT_DIR="/var/tmp/" packer build -only="qemu" my_windows.json
build.sh
- build single image specified on command-linebuild_all.sh
- builds all imagesbuild_all_remote_ssh.sh
- connects to remote Ubuntu server, install the necessary packages for building images and executebuild_all.sh
vagrant_init_destroy_boxes.sh
- tests all*.box
images in the current directory usingvagrant add/up/ssh/winrm/destroy
GitLab CI configuration (obsolete) can be found here: GitLab_CI_configuration.md