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
- latest VirtualBox installed
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