Vagrant is an open source tool for building a virtual environment. It is based on text based configuration file and concept of prebuilt OS boxes.
One can find a lot of boxes on Atlas webpage (https://atlas.hashicorp.com/boxes/search), ready to download and use. Although if there are any security concerns about using a OS from 3rd party webpage, I published a blog post about creating a new Vagrant box using Oracle Linux here and Oracle Virtual Box.
For simplicity of this series, predefined Linux box will be used in all examples.
There are two boxes that I’m using in my own work.
First one “kikitux/oracle6-racattack” created by Alvaro Miranda (https://github.com/kikitux) member of Rac Attack team. The other one is “racattack/oracle65” created by Jeremy Schneider who is also member of RacAttack team.
Vagrant itself is not a Virtualization provider. It can control different virtualization tools, including:
- Virtual Box
- AWS EC2 (with an additional plugin)
- KVM (with an additional plugin)
- VMWare Fusion / Workstation (paid version of Vagrant)
Most of the differences between providers are hidden by Vagrant workflow, and a configuration file defining a Vagrant box is similar between different providers.
Vagrant user is using same set of commands to start, stop or destroy virtual machine and does not have to know which provider is used for that.
There is a list of typical Vagrant commands:
- vagrant init – creating a basic configuration file
- vagrant up – starting a virtual machine
- vagrant halt – stopping a virtual machine
- vagrant destroy – delete a virtual machine
- vagrant ssh – open a ssh session to vagrant user on virtual machine
After this short introduction let’s get started with a Vagrant on Laptop/Desktop (using Virtual Box as a provider)
Prerequisites:
- vagrant software – https://www.vagrantup.com/downloads.html
- Virtual Box - https://www.virtualbox.org/
In the first step a new directory will be created and used for Vagrant to initiate build of new virtual machine.
In the next step Vagrant machine will be initialized
A new Vagrantfile has been created with basic configuration. By default Vagrant is trying to change a default set of public / private key with a new pair generated on user machine. But there are some problem with that on latest version of Vagrant, so as a workaround please add this line to Vagrantfile (see https://github.com/mitchellh/vagrant/issues/5186)
This is how Vagrantfile looks like without commented lines
Now this machine can be started. If a box selected in an init stage is not existing yet in the provider catalog, it will be automatically downloaded and cloned to a new machine.
Now it is a time to customize this machine a little bit. Before that an existing machine has to be stopped using a Vagrant command
As it was mentioned at the beginning of the post, Vagrant is using a text based configuration file. All customizations can be done by editing this file.
The configuration file structure can be divided into two sections.
First section defines a provider configuration and this part will change when a provider will be changed. Other section is provider independent and describes all other parameters.
Starting a machine with a new configuration
Checking changes
All looks good there. Virtual machine has 1 GB of RAM and two vCPU. Machine name has been changed to machine1 as well.
The last change tested here will be a new disk assigned to virtual machine. The box used for an example already has a “sdb” device and an “u01” file system defined inside a box. In this case device “sdc” will be added to the box and can be configured later as a “u02” file system if necessary. The file system creation and configuration will be presented in the next posts about Ansible.
Options specified in vb.customize are options of VBoxManage command of Virtual Box installation.
New disk is added and ready for other activities.
This is end of this post and I will present similar steps for KVM and EC2 virtual machines in the next one.
regards,
Marcin
One can find a lot of boxes on Atlas webpage (https://atlas.hashicorp.com/boxes/search), ready to download and use. Although if there are any security concerns about using a OS from 3rd party webpage, I published a blog post about creating a new Vagrant box using Oracle Linux here and Oracle Virtual Box.
For simplicity of this series, predefined Linux box will be used in all examples.
There are two boxes that I’m using in my own work.
First one “kikitux/oracle6-racattack” created by Alvaro Miranda (https://github.com/kikitux) member of Rac Attack team. The other one is “racattack/oracle65” created by Jeremy Schneider who is also member of RacAttack team.
Vagrant itself is not a Virtualization provider. It can control different virtualization tools, including:
- Virtual Box
- AWS EC2 (with an additional plugin)
- KVM (with an additional plugin)
- VMWare Fusion / Workstation (paid version of Vagrant)
Most of the differences between providers are hidden by Vagrant workflow, and a configuration file defining a Vagrant box is similar between different providers.
Vagrant user is using same set of commands to start, stop or destroy virtual machine and does not have to know which provider is used for that.
There is a list of typical Vagrant commands:
- vagrant init – creating a basic configuration file
- vagrant up – starting a virtual machine
- vagrant halt – stopping a virtual machine
- vagrant destroy – delete a virtual machine
- vagrant ssh – open a ssh session to vagrant user on virtual machine
After this short introduction let’s get started with a Vagrant on Laptop/Desktop (using Virtual Box as a provider)
Prerequisites:
- vagrant software – https://www.vagrantup.com/downloads.html
- Virtual Box - https://www.virtualbox.org/
In the first step a new directory will be created and used for Vagrant to initiate build of new virtual machine.
mkdir machine1 cd machine1
In the next step Vagrant machine will be initialized
vagrant init racattack/oracle65 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
A new Vagrantfile has been created with basic configuration. By default Vagrant is trying to change a default set of public / private key with a new pair generated on user machine. But there are some problem with that on latest version of Vagrant, so as a workaround please add this line to Vagrantfile (see https://github.com/mitchellh/vagrant/issues/5186)
config.ssh.insert_key = false
This is how Vagrantfile looks like without commented lines
Vagrant.configure(2) do |config| config.vm.box = "racattack/oracle65" config.ssh.insert_key = false end
Now this machine can be started. If a box selected in an init stage is not existing yet in the provider catalog, it will be automatically downloaded and cloned to a new machine.
mprzepiorowski$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'racattack/oracle65' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Loading metadata for box 'racattack/oracle65' default: URL: https://atlas.hashicorp.com/racattack/oracle65 ==> default: Adding box 'racattack/oracle65' (v14.11.01) for provider: virtualbox default: Downloading: https://atlas.hashicorp.com/racattack/boxes/oracle65/versions/14.11.01/providers/virtualbox.box ==> default: Successfully added box 'racattack/oracle65' (v14.11.01) for 'virtualbox'! ==> default: Importing base box 'racattack/oracle65'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'racattack/oracle65' is up to date... ==> default: Setting the name of the VM: machine1_default_1439847872931_79029 ==> 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: Warning: Connection timeout. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => /Users/mprzepiorowski/Documents/machine1Is this that simple? Yes it is – a new virtual machine with Oracle Linux is installed and ready. Next step is to ssh into a new created machine. There is no need to know neither a password nor an IP address,
mprzepiorowski$ vagrant ssh [vagrant@oracle6-racattack ~]$
Now it is a time to customize this machine a little bit. Before that an existing machine has to be stopped using a Vagrant command
mprzepiorowski$ vagrant halt ==> default: Attempting graceful shutdown of VM...
As it was mentioned at the beginning of the post, Vagrant is using a text based configuration file. All customizations can be done by editing this file.
The configuration file structure can be divided into two sections.
First section defines a provider configuration and this part will change when a provider will be changed. Other section is provider independent and describes all other parameters.
Vagrant.configure(2) do |config| # this part is common for all providers config.vm.box = "racattack/oracle65" config.ssh.insert_key = false config.vm.hostname = "machine1" # provider specific configuration config.vm.provider "virtualbox" do |vb| vb.memory = 1024 vb.cpus = 2 end end
Starting a machine with a new configuration
mprzepiorowski$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'racattack/oracle65' is up to date... ==> default: Clearing any previously set forwarded ports... ==> 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: Running 'pre-boot' VM customizations... ==> 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: Warning: Connection timeout. Retrying... default: Warning: Connection timeout. Retrying... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Setting hostname... ==> default: Mounting shared folders... default: /vagrant => /Users/mprzepiorowski/Documents/machine1 ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run.
Checking changes
[vagrant@machine1 ~]$ free total used free shared buffers cached Mem: 1020696 121356 899340 0 10980 42100 -/+ buffers/cache: 68276 952420 Swap: 8191996 0 8191996 [vagrant@machine1 ~]$ cat /proc/cpuinfo | grep processor processor : 0 processor : 1
All looks good there. Virtual machine has 1 GB of RAM and two vCPU. Machine name has been changed to machine1 as well.
The last change tested here will be a new disk assigned to virtual machine. The box used for an example already has a “sdb” device and an “u01” file system defined inside a box. In this case device “sdc” will be added to the box and can be configured later as a “u02” file system if necessary. The file system creation and configuration will be presented in the next posts about Ansible.
disk_filename = 'disk-u02.vdi' Vagrant.configure(2) do |config| # this part is common for all providers config.vm.box = "racattack/oracle65" config.ssh.insert_key = false config.vm.hostname = "machine1" # provider specific configuration config.vm.provider "virtualbox" do |vb| vb.memory = 1024 vb.cpus = 2 unless File.exist?(disk_filename) vb.customize ['createhd', '--filename', disk_filename, '--size', (5*1024), '--variant', 'Standard'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', disk_filename] end end
Options specified in vb.customize are options of VBoxManage command of Virtual Box installation.
mprzepiorowski$ vagrant ssh Last login: Mon Aug 17 22:01:36 2015 from 10.0.2.2 [vagrant@machine1 ~]$ ls -l /dev/sdc* brw-rw---- 1 root disk 8, 32 Aug 17 22:25 /dev/sdc [vagrant@machine1 ~]$
New disk is added and ready for other activities.
This is end of this post and I will present similar steps for KVM and EC2 virtual machines in the next one.
regards,
Marcin
0 comments:
Post a Comment