On Github bertvv / load2014-Vagrant-presentation
Bert Van Vreckem
Lecturer ICT at University College Ghent
$ vagrant --version Vagrant 1.5.1 $ VBoxHeadless --version Oracle VM VirtualBox Headless Interface 4.3.10 (C) 2008-2014 Oracle Corporation All rights reserved. 4.3.10r93012 $ ifconfig vboxnet0 => 192.168.56.1
$ vagrant init hashicorp/precise32 $ vagrant up $ vagrant ssh
$ vagrant init hashicorp/precise32
A Vagrantfile is created
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'hashicorp/precise32' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Loading metadata for box 'hashicorp/precise32' default: URL: https://vagrantcloud.com/hashicorp/precise32 ==> default: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox default: Downloading: https://vagrantcloud.com/hashicorp/precise32/version/1/provider/virtualbox.box ==> default: Successfully added box 'hashicorp/precise32' (v1.0.0) for 'virtualbox'! ==> default: Importing base box 'hashicorp/precise32'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'hashicorp/precise32' is up to date... ==> default: Setting the name of the VM: example_default_1395996714768_3176 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1)
==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 4.2.0 default: VirtualBox Version: 4.3 ==> default: Mounting shared folders... default: /vagrant => /home/bert/CfgMgmt/vagrant-example
You now have a working VM, ready for use:
$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686) * Documentation: https://help.ubuntu.com/ Welcome to your Vagrant-built virtual machine. Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2 vagrant@precise32:~$
Minimal Vagrantfile:
VAGRANTFILE_API_VERSION = '2' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = 'hashicorp/precise32' end
This is Ubuntu 12.04 LTS 32 bit,
we want CentOS 6.5 64 bit
From the command line (Vagrant cloud):
$ vagrant init alphainternational/centos-6.5-x64
From the command line ("old" style):
$ vagrant box add --name centos65 \ http://packages.vstone.eu/vagrant-boxes/centos-6.x-64bit-latest.box $ vagrant init centos65
In your Vagrantfile (only applies to "old" style):
VAGRANTFILE_API_VERSION = '2' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = 'centos65' config.vm.box_url = 'http://packages.vstone.eu/vagrant-boxes/centos-6.x-64bit-latest.box' end
$ vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Forcing shutdown of VM... ==> default: Destroying VM and associated drives... $ vagrant up [...] $ vagrant ssh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
VAGRANTFILE_API_VERSION = '2' HOST_NAME = 'box001' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.hostname = HOST_NAME config.vm.box = 'alphainternational/centos-6.5-x64' config.vm.network :private_network, ip: '192.168.56.65', netmask: '255.255.255.0' config.vm.provider :virtualbox do |vb| vb.name = HOST_NAME end end
For more info,
When you change the Vagrantfile, do:
$ vagrant reload
Or, if the change is profound:
$ vagrant destroy -f $ vagrant up
$ vagrant init user/box # Create Vagrantfile for specified base box $ vim Vagrantfile # Customize your box $ vagrant up # Create VM and boot it $ vagrant reload # After every change to Vagrantfile $ vagrant destroy # Clean up!
= From Just Enough Operating System to fully functional configured box
Add to your Vagrantfile
config.vm.provision 'shell', path: 'provision.sh'
Put the script into the same folder as Vagrantfile
Installs Apache and PHP
#!/bin/bash -eu # provision.sh -- Install Apache and a test PHP script sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 yum install -y httpd php service httpd start chkconfig httpd on cat > /var/www/html/index.php << EOF <?php phpinfo(); ?> EOF
Add to your Vagrantfile:
config.vm.synced_folder 'html', '/var/www/html'
Create folder html in your project root
$ tree . |-- html | `-- index.php |-- provision.sh `-- Vagrantfile
Vagrant reload