Environment
- OS
- Windows7 Enterprise Service Pack1
- Vagrant
- 1.7.4
- Virtual Box
- 4.3.26
Prepare Environment
Please follow following instructions.- Download installer of virtual box from official site and install it.
- Download installer of vagrant from official site and install it.
Build Virtual Machine
1. Choose Distribution
Choose distribution.In this article, I use “Official Ubuntu 14.04 daily Cloud Image i386 (Development release, No Guest Additions)”.
Note that you have to enable virtual machine support function from BIOS when you want to use 64bit version. How to enable it depends on PC maker.
2. Build Virtual Machine
Copy selected distribution’s url.And then type following commands on command prompt.
Now you can access to virtual machine by ssh.# Add distribution to vagrant C:\Users\...\Desktop>vagrant box add ubuntu14.04i386 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'ubuntu14.04i386' (v0) for provider: box: Downloading: https://cloud-images.ubuntu.com/vagrant/trusty/current/tru sty-server-cloudimg-i386-vagrant-disk1.box box: Progress: 100% (Rate: 1311k/s, Estimated time remaining: --:--:--) ==> box: Successfully added box 'ubuntu14.04i386' (v0) for 'virtualbox'! # Make Vagrantfile C:\Users\...\Desktop>vagrant init ubuntu14.04i386 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. # Boot C:\Users\...\Desktop>vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'ubuntu14.04i386'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: Desktop_default_1442904841403_7922 ==> 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: 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: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Mounting shared folders... default: /vagrant => C:/Users/...Desktop
3. Access
In this article, I use putty to access to virtual machine.When you use putty, please check following image.
- username : vagrant
- password : vagrant
Now you can do everything on ubuntu14.04. When you want to stop virtual machine or something, you can use following commands.login as: vagrant vagrant@127.0.0.1's password: Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-63-generic i686) * Documentation: https://help.ubuntu.com/ System information disabled due to load higher than 1.0 Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. vagrant@vagrant-ubuntu-trusty-32:~$
- suspend : vagrant suspend
- stop : vagrant halt
- reboot : vagrant up
- check status : vagrant status
Contribute Web Server by Ansible
Next, I make virtual machine install nginx by Ansible at booting time.1. Prepare Directory
Make directory wherever you want.Directory organization will be like following. I followed
template-vagrant.
. |-ansible | |-hosts | -playbook.yml |-provision.sh -Vagrantfile
2. Vagrantfile Setting
Prepare Vagrantfile by copy previous one or type “vagrant init ubuntu14.04i386” on the new directory.# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure(2) do |config| # The most common configuration options are documented and commented below. # For a complete reference, please see the online documentation at # https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. config.vm.box = "ubuntu14.04i386" # Disable automatic box update checking. If you disable this, then # boxes will only be checked for updates when the user runs # `vagrant box outdated`. This is not recommended. # config.vm.box_check_update = false # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. # config.vm.network "forwarded_port", guest: 80, host: 8080 # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.33.10" # Create a public network, which generally matched to bridged network. # Bridged networks make the machine appear as another physical device on # your network. # config.vm.network "public_network" # Share an additional folder to the guest VM. The first argument is # the path on the host to the actual folder. The second argument is # the path on the guest to mount the folder. And the optional third # argument is a set of non-required options. # config.vm.synced_folder "../data", "/vagrant_data" # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # # config.vm.provider "virtualbox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: # vb.memory = "1024" # end # # View the documentation for the provider you are using for more # information on available options. # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies # such as FTP and Heroku are also available. See the documentation at # https://docs.vagrantup.com/v2/push/atlas.html for more information. # config.push.define "atlas" do |push| # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" # end # Enable provisioning with a shell script. Additional provisioners such as # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the # documentation for more information about their specific syntax and use. # config.vm.provision "shell", inline: <<-SHELL # sudo apt-get update # sudo apt-get install -y apache2 # SHELL config.vm.provision "shell", :path => "provision.sh" config.vm.synced_folder ".", "/vagrant", :mount_options => ['dmode=775', 'fmode=664'] end
3. provision.sh/hosts/playbook.yml
Make 3 files like following.- provision.sh
#!/usr/bin/env bash if ! [ `which ansible` ]; then apt-get update -y apt-get install -y ansible fi ansible-playbook -i /vagrant/ansible/hosts /vagrant/ansible/playbook.yml
- hosts
127.0.0.1 ansible_connection=local
- playbook.yml
--- - hosts: 127.0.0.1 connection: local sudo: yes tasks: - name: install nginx apt: pkg=nginx update_cache=yes
4. Check Behavior
Type “vagrant up” like following.Now you can see html file on virtual machine by accessing to “http://192.168.33.10”.C:\Users\...\Desktop\vagrant>vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'ubuntu14.04i386'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: vagrant_default_1442906425474_82960 ==> 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: Adapter 2: hostonly ==> 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: Warning: Connection timeout. Retrying... default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => C:/Users/hidetomo.suzuki/Desktop/vagrant ==> default: Running provisioner: shell... default: Running: C:/Users/.../AppData/Local/Temp/vagrant-shell2015 0922-7688-1m4rfud.sh ==> default: stdin: is not a tty ==> default: Ign http://security.ubuntu.com trusty-security InRelease ==> default: Ign http://archive.ubuntu.com trusty InRelease ==> default: Get:1 http://security.ubuntu.com trusty-security Release.gpg [933 B ] ==> default: Get:2 http://security.ubuntu.com trusty-security Release [63.5 kB] ==> default: Ign http://archive.ubuntu.com trusty-updates InRelease ==> default: Hit http://archive.ubuntu.com trusty Release.gpg ==> default: Get:3 http://archive.ubuntu.com trusty-updates Release.gpg [933 B] ==> default: Get:4 http://security.ubuntu.com trusty-security/main Sources [94.6 kB] ==> default: Hit http://archive.ubuntu.com trusty Release ==> default: Get:5 http://archive.ubuntu.com trusty-updates Release [63.5 kB] ==> default: Get:6 http://security.ubuntu.com trusty-security/universe Sources [ 30.5 kB] ==> default: Get:7 http://security.ubuntu.com trusty-security/main i386 Packages [328 kB] ==> default: Get:8 http://security.ubuntu.com trusty-security/universe i386 Pack ages [116 kB] ==> default: Hit http://security.ubuntu.com trusty-security/main Translation-en ==> default: Get:9 http://archive.ubuntu.com trusty/main Sources [1,064 kB] ==> default: Hit http://security.ubuntu.com trusty-security/universe Translation -en ==> default: Get:10 http://archive.ubuntu.com trusty/universe Sources [6,399 kB] ==> default: Hit http://archive.ubuntu.com trusty/main i386 Packages ==> default: Hit http://archive.ubuntu.com trusty/universe i386 Packages ==> default: Hit http://archive.ubuntu.com trusty/main Translation-en ==> default: Hit http://archive.ubuntu.com trusty/universe Translation-en ==> default: Get:11 http://archive.ubuntu.com trusty-updates/main Sources [234 k B] ==> default: Get:12 http://archive.ubuntu.com trusty-updates/universe Sources [1 36 kB] ==> default: Get:13 http://archive.ubuntu.com trusty-updates/main i386 Packages [601 kB] ==> default: Get:14 http://archive.ubuntu.com trusty-updates/universe i386 Packa ges [314 kB] ==> default: Hit http://archive.ubuntu.com trusty-updates/main Translation-en ==> default: Hit http://archive.ubuntu.com trusty-updates/universe Translation-e n ==> default: Ign http://archive.ubuntu.com trusty/main Translation-en_US ==> default: Ign http://archive.ubuntu.com trusty/universe Translation-en_US ==> default: Fetched 9,445 kB in 45s (206 kB/s) ==> default: Reading package lists... ==> default: Reading package lists... ==> default: Building dependency tree... ==> default: Reading state information... ==> default: The following extra packages will be installed: ==> default: python-jinja2 python-markupsafe ==> default: Suggested packages: ==> default: ansible-doc sshpass python-jinja2-doc ==> default: The following NEW packages will be installed: ==> default: ansible python-jinja2 python-markupsafe ==> default: 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. ==> default: Need to get 593 kB of archives. ==> default: After this operation, 3,846 kB of additional disk space will be use d. ==> default: Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main python-markupsa fe i386 0.18-1build2 [14.3 kB] ==> default: Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main python-jinja2 a ll 2.7.2-2 [161 kB] ==> default: Get:3 http://archive.ubuntu.com/ubuntu/ trusty/universe ansible all 1.5.4+dfsg-1 [418 kB] ==> default: dpkg-preconfigure: unable to re-open stdin: No such file or directo ry ==> default: Fetched 593 kB in 17s (34.5 kB/s) ==> default: Selecting previously unselected package python-markupsafe. ==> default: (Reading database ... 61102 files and directories currently install ed.) ==> default: Preparing to unpack .../python-markupsafe_0.18-1build2_i386.deb ... ==> default: Unpacking python-markupsafe (0.18-1build2) ... ==> default: Selecting previously unselected package python-jinja2. ==> default: Preparing to unpack .../python-jinja2_2.7.2-2_all.deb ... ==> default: Unpacking python-jinja2 (2.7.2-2) ... ==> default: Selecting previously unselected package ansible. ==> default: Preparing to unpack .../ansible_1.5.4+dfsg-1_all.deb ... ==> default: Unpacking ansible (1.5.4+dfsg-1) ... ==> default: Processing triggers for man-db (2.6.7.1-1ubuntu1) ... ==> default: Setting up python-markupsafe (0.18-1build2) ... ==> default: Setting up python-jinja2 (2.7.2-2) ... ==> default: Setting up ansible (1.5.4+dfsg-1) ... ==> default: ==> default: PLAY [127.0.0.1] ************************************************** ************ ==> default: ==> default: GATHERING FACTS *************************************************** ************ ==> default: ok: [127.0.0.1] ==> default: ==> default: TASK: [install nginx] ********************************************* ==> default: Suggested packages: ==> default: ansible-doc sshpass python-jinja2-doc ==> default: The following NEW packages will be installed: ==> default: ansible python-jinja2 python-markupsafe ==> default: 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. ==> default: Need to get 593 kB of archives. ==> default: After this operation, 3,846 kB of additional disk space will be use d. ==> default: Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main python-markupsa fe i386 0.18-1build2 [14.3 kB] ==> default: Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main python-jinja2 a ll 2.7.2-2 [161 kB] ==> default: Get:3 http://archive.ubuntu.com/ubuntu/ trusty/universe ansible all 1.5.4+dfsg-1 [418 kB] ==> default: dpkg-preconfigure: unable to re-open stdin: No such file or directo ry ==> default: Fetched 593 kB in 17s (34.5 kB/s) ==> default: Selecting previously unselected package python-markupsafe. ==> default: (Reading database ... 61102 files and directories currently install ed.) ==> default: Preparing to unpack .../python-markupsafe_0.18-1build2_i386.deb ... ==> default: Unpacking python-markupsafe (0.18-1build2) ... ==> default: Selecting previously unselected package python-jinja2. ==> default: Preparing to unpack .../python-jinja2_2.7.2-2_all.deb ... ==> default: Unpacking python-jinja2 (2.7.2-2) ... ==> default: Selecting previously unselected package ansible. ==> default: Preparing to unpack .../ansible_1.5.4+dfsg-1_all.deb ... ==> default: Unpacking ansible (1.5.4+dfsg-1) ... ==> default: Processing triggers for man-db (2.6.7.1-1ubuntu1) ... ==> default: Setting up python-markupsafe (0.18-1build2) ... ==> default: Setting up python-jinja2 (2.7.2-2) ... ==> default: Setting up ansible (1.5.4+dfsg-1) ... ==> default: ==> default: PLAY [127.0.0.1] ************************************************** ************ ==> default: ==> default: GATHERING FACTS *************************************************** ************ ==> default: ok: [127.0.0.1] ==> default: ==> default: TASK: [install nginx] *********************************************