Packer
Hi Folks! Introduction: In this post, I will introduce you about packer. Packer is actually open source tool for creating machine and container images for multiple platforms from single source of configuration. As a configuration It uses a json syntax for creating machines for different platforms such as Amazon EC2, Docker, VirtualBox, VMware etc. Actually I will not get into more detail. For more information please visit website . As an example, I created very simple configuration for VMware Workstation platform by installing CentOS 7 without keyboard interaction. For non-interactive installation(kick-start installation). I have used kickstart file. Next tutorial will be about kick-start installation of RedHat system. Installing Packer: I have a CentOS 7 system, So you can download packer.zip file by using wget command.(Figure-1) For 64 bit system.
Download packer.zip
[root@hulk ~]# wget -O packer.zip https://releases.hashicorp.com/packer/0.12.3/packer_0.12.3_linux_amd64.zip?_ga=1.60002541.1517413558.1489953845
Unzip the file.
[root@hulk ~]# unzip packer.zip
Usage of Packer: You can run packer the same as ordinary executable Linux file like below.(Figure-2)
./packer -h
usage: packer [--version] [--help] <command> [<args>]
Available commands are:
build build image(s) from template
fix fixes templates from old versions of packer
inspect see components of a template
push push a template and supporting files to a Packer build service
validate check that a template is valid
version Prints the Packer version
Usage of Packer We have packer, but we do not have any configuration file to tell the packer what to do. Below, I shared very simple packer configuration for VMware Workstation platform to give you an overview. For other platforms please see packer documents . Plus, For auto-installation, you will need a machine to serve kick-start.(dhcp, tftp, http). Do not worry! Next tutorial will be about kick-start installation. So For now, stick with packer configuration.
{
"builders": [{
"name": "centos-latest",
"type": "vmware-iso",
"guest_os_type": "centos-64",
"tools_upload_flavor": "linux",
"iso_url": "http://mirror.fibersunucu.com.tr/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso",
"iso_checksum": "27bd866242ee058b7a5754e83d8ee8403e216b93d130d800852a96f41c34d86a",
"iso_checksum_type": "sha256",
"ssh_username": "root",
"ssh_password": "vagrant",
"ssh_port": "22",
"ssh_host": "192.168.17.38",
"ssh_wait_timeout": "10000s",
"shutdown_timeout": "20s",
"shutdown_command": "shutdown -P now",
"vm_name": "mypacker",
"format": "vmx",
"boot_wait": "10s",
"http_directory": "/var/www/html/http",
"http_port_min": "8008",
"http_port_max": "8008",
"disk_size": "12000",
"vmx_data": {
"cpuid.coresPerSocket": "1",
"memsize": "1024",
"numvcpus": "1",
"ethernet0.present": "TRUE",
"ethernet0.connectionType": "nat"
},
"boot_command": [
"<tab> ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
]
}],
"provisioners": [
{
"type": "shell",
"inline": [
"touch /home/vagrant/test1234.packer",
"echo 'Hello Packer !' > /home/vagrant/test1234.packer"
]
}]
}
Simple packer directive first.json file Verify first.json with Packer Before building a machine, configuration file should be verified for error-free.
[root@hulk packer]# ./packer validate first.json
Template validated successfully.
Build first.json with Packer After successful validation, we can build our guest on VMware Workstation. Just run ./packer build first.json. While packer is building, take some coffee :)
[root@hulk packer]# ./packer build first.json
Figure-1 Packer building
Final!
Figure-2 Packer building finished
Kickstart File Kickstart(ks.cfg) is a actually configuration file for RedHat based systems to install system without human interaction. In doing so, hundreds of system can be installed just a snippet of directives.
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url http://192.168.17.25/rhel7/
# Use graphical install
text
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=tr --xlayouts='tr'
# System language
lang en_US.UTF-8
reboot
# Network information
network --bootproto static --device=ens33 --gateway 192.168.17.2 --ip 192.168.17.38 --nameserver 192.168.17.2,8.8.8.8 --netmask=255.255.255.0 --activate
network --hostname vagrant.tbag.local
# Root password
rootpw vagrant --plaintext
# System services
services --disabled="chronyd"
# System timezone
timezone Europe/Istanbul --isUtc --nontp
user --name=vagrant --password=vagrant --plaintext
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
autopart --type=lvm
%packages
@base
kexec-tools
%end
Sample Kickstart File