Scripts and Templates used for generating Vagrant images
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
GitHub repository for bug reports or feature requests
Vagrant Cloud repository for the images build by these templates
Requirements
- QEMU-KVM
- Vagrant
- Vagrant Libvirt Plugin
- VirtualBox (Version 6.1 or later)
- Packer (Version 1.8.0 or later)
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
- added packages: see the Common 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
- added packages: see the commonwindows_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)
- 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
- pvpanic: QEMU pvpanic device driver
- qemu-ga: Qemu Guest Agent
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:
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-linebuild_all.sh- builds all imagesbuildallremote_ssh.sh- connects to remote Ubuntu server, install
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