The title says it, … this tutorial is about Packer, CentOS 7 and Vagrant. After that, you should be able to integrate the creation of Vagrant base boxes into your Build-server. There is on small exception to other – the VirtualBox Guest Additions will be provided via PlugIn! Because other users could may have different versions.
Preconditions
- VirtualBox installed
- Vagrant installed
- Packer installed
- vagrant-vbguest plugin installed
Project structure
$ tree . ├── Makefile ├── packer.json ├── src │ ├── Vagrantfile.tpl │ └── ks.cfg └── target
File contents
CURRENT_DIR := $(shell pwd) .PHONY: clean help: @echo "Run make with:" @echo " > validate ...to run packer validation" @echo " > build ...to start packer build" @echo " > up ...to start vagrant" @echo " > reload ...to reload vagrant" @echo " > ssh ...to ssh into vm" @echo " > clean ...to cleanup for next build" validate: packer validate $(CURRENT_DIR)/packer.json build: packer build $(CURRENT_DIR)/packer.json cp $(CURRENT_DIR)/src/Vagrantfile.tpl $(CURRENT_DIR)/target/Vagrantfile up: vagrant box add packer/centos7 $(CURRENT_DIR)/target/virtualbox-CentOS-7.box cd $(CURRENT_DIR)/target && vagrant up reload: cd $(CURRENT_DIR)/target && vagrant reload ssh: cd $(CURRENT_DIR)/target && vagrant ssh clean: cd $(CURRENT_DIR)/target && vagrant halt cd $(CURRENT_DIR)/target && vagrant destroy -f rm -fr $(CURRENT_DIR)/builds/ rm -fr $(CURRENT_DIR)/target/* $(CURRENT_DIR)/target/.* 2> /dev/null vagrant box remove packer/centos7
{ "variables": { "file": "http://linuxsoft.cern.ch/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso", "checksum": "88c0437f0a14c6e2c94426df9d43cd67", "type": "md5", "non_gui": "false" }, "builders": [ { "type": "virtualbox-iso", "iso_url": "{{ user `file` }}", "iso_checksum": "{{ user `checksum` }}", "iso_checksum_type": "md5", "headless": "{{ user `non_gui` }}", "output_directory": "builds", "vm_name": "CentOS7_to_Vagrant", "guest_os_type": "RedHat_64", "disk_size": "10240", "vboxmanage": [ ["modifyvm", "{{.Name}}", "--memory", "2048"], ["modifyvm", "{{.Name}}", "--cpus", "2"], ["modifyvm", "{{.Name}}", "--audio", "none"], ["modifyvm", "{{.Name}}", "--usb", "off"] ], "http_directory": "src", "boot_wait": "5s", "boot_command": [ "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>" ], "ssh_username": "vagrant", "ssh_password": "vagrant", "ssh_port": 22, "ssh_wait_timeout": "600s", "guest_additions_path": "disable", "shutdown_command": "sudo shutdown -h 0" } ], "provisioners": [ { "type": "shell", "inline": [ "sudo yum update -y", "sudo rm -rf /tmp/*", "sudo rm -f /var/log/wtmp /var/log/btmp ", "sudo yum clean all", "sudo rm -rf /var/cache/* /usr/share/doc/*", "rm -f .bash_history", "history -c" ] } ], "post-processors": [ { "type": "vagrant", "keep_input_artifact": false, "compression_level": 9, "output": "target/{{.Provider}}-CentOS-7.box" } ] }
install cdrom lang en_US.UTF-8 keyboard us timezone UTC network --bootproto=dhcp firewall --disabled rootpw --plaintext packer user --name=vagrant --password=vagrant auth --enableshadow --passalgo=sha512 --kickstart selinux --permissive text skipx clearpart --all --initlabel zerombr autopart bootloader --location=mbr firstboot --disable reboot %packages --instLangs=en_US.utf8 --nobase --ignoremissing --excludedocs @^minimal @core -aic94xx-firmware -atmel-firmware -b43-openfwwf -bfa-firmware -ipw2100-firmware -ipw2200-firmware -ivtv-firmware -iwl100-firmware -iwl105-firmware -iwl135-firmware -iwl1000-firmware -iwl2000-firmware -iwl2030-firmware -iwl3160-firmware -iwl3945-firmware -iwl4965-firmware -iwl5000-firmware -iwl5150-firmware -iwl6000-firmware -iwl6000g2a-firmware -iwl6000g2b-firmware -iwl6050-firmware -iwl7260-firmware -libertas-usb8388-firmware -ql2100-firmware -ql2200-firmware -ql23xx-firmware -ql2400-firmware -ql2500-firmware -rt61pci-firmware -rt73usb-firmware -xorg-x11-drv-ati-firmware -zd1211-firmware %end %post --log=/root/ks.log SEE NEXT PICTURE!!!! The security settings of my provider does not allow this content! %end
# -*- mode: ruby -*- Vagrant.require_version ">= 1.8.1" Vagrant.configure("2") do |config| config.vm.box = "packer/centos7" config.vm.box_url = "target/virtualbox-CentOS-7.box" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.provider "virtualbox" do |vb| vb.name = "CentOS-7" vb.cpus = "2" vb.memory = "2048" vb.gui = false end end
Usage
# run packer build (via make) $ make build # run vagrant up (via make) $ make run # run vagrant reload (via make) $ make reload # run vagrant ssh (via make) $ make ssh # destroy everything (via make) $ make clean