As a software tester you need many virtual machines, the creating can be very time consuming. Of course tools like Vagrant helps a lot but the creation for BaseBoxes starts most with installation from ISO`s. Exact here helps Packer! This tutorial shows an example for CentOS7 – VirtualBox.
Preconditions
Preparation
1st you need to install Packer. The following example shows one way that works well with Mac OS X (El Capitan).
# change into Downloads
$ cd ~/Downloads/
# download packer archive (Mac OS X)
$ curl -O https://releases.hashicorp.com/packer/0.10.1/packer_0.10.1_darwin_amd64.zip
# unzip packer archive
$ unzip packer_0.10.1_darwin_amd64.zip
# move packer binary
$ sudo mv packer /usr/local/bin
# check packer version
$ packer --version
Other OS? Take a look here.
Instructions
# create new project
$ mkdir ~/Projects/PackerExample && cd ~/Projects/PackerExample
# create kickstart directory and configuration
$ mkdir ~/Projects/PackerExample/http && touch ~/Projects/PackerExample/http/ks.cfg
# create new Packer JSON file
$ touch ~/Projects/PackerExample/example.json
# how it looks (before running)
$ tree .
.
├── example.json
└── http
└── ks.cfg
{
"variables": {
"iso": "http://linuxsoft.cern.ch/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso",
"checksum": "88c0437f0a14c6e2c94426df9d43cd67"
},
"builders": [
{
"type": "virtualbox-iso",
"iso_url": "{{ user `iso` }}",
"iso_checksum": "{{ user `checksum` }}",
"iso_checksum_type": "md5",
"vm_name": "MyCentOS7",
"guest_os_type": "RedHat_64",
"ssh_username": "root",
"ssh_password": "packer",
"ssh_port": 22,
"ssh_wait_timeout": "600s",
"vboxmanage": [
["modifyvm", "{{.Name}}", "--memory", "2048"],
["modifyvm", "{{.Name}}", "--cpus", "2"],
["modifyvm", "{{.Name}}", "--audio", "none"]
],
"disk_size": "10240",
"http_directory": "http",
"boot_command": [
"<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
],
"shutdown_command": "/sbin/halt -p"
}
]
}
More about Packer – VirtualBox? Take a look here.
install
cdrom
lang en_US.UTF-8
keyboard us
timezone UTC
network --bootproto=dhcp
rootpw --plaintext packer
user --name=frank --password=Test123
auth --enableshadow --passalgo=sha512 --kickstart
firewall --disabled
selinux --permissive
bootloader --location=mbr
text
skipx
zerombr
clearpart --all --initlabel
autopart
firstboot --disable
reboot
%packages --instLangs=en_US.utf8 --nobase --ignoremissing --excludedocs
@core
%end
%post --log=/root/ks.log
yum -y update
%end
More about CentOS 7 – Kickstart? Take a look here.
Validation and Build
# validate JSON
$ packer validate example.json
# run the build
$ packer build example.json
Result
$ tree .
.
├── example.json
├── http
│ └── ks.cfg
├── output-virtualbox-iso
│ ├── MyCentOS7-disk1.vmdk
│ └── MyCentOS7.ovf
└── packer_cache
└── 4bbec2cca90f761e144becb1a24c2914eddd21d06292d6dfb415beb51ef9e69f.iso