Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Vagrant with Ubuntu 16.04 in VirtualBox

Setup Ubuntu 16.04 to be used with Vagrant and Virtualbox

Prepare Vagrant box with Ubuntu 16.04

We will use official box "ubuntu/xenial64" and modify it to work with Vagrant.

  • Vagrantfile

Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/xenial64"

  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 = "1524"
  end


end

  • run Virtual machine (VM)
vagrant up
  • login to VM
vagrant ssh

Hostname

  • fix hostname in /etc/hosts
127.0.0.1 ubuntu-xenial

This will fix error:

"sudo: unable to resolve host ubuntu-xenial

Rename interfaces

  • login to VM (vagrant ssh)

  • add (or modify) lines in /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 net.ifnames=0 biosdevname=0 net.ifnames=0 biosdevname=0"
GRUB_CMDLINE_LINUX=" net.ifnames=0 biosdevname=0"
  • or update using command:
# 
sudo sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=\"\(.*\)\"/GRUB_CMDLINE_LINUX_DEFAULT=\"\1 net.ifnames=0 biosdevname=0\"/" /etc/default/grub

sudo sed -i "s/GRUB_CMDLINE_LINUX=\"\(.*\)\"/GRUB_CMDLINE_LINUX=\"\1 net.ifnames=0 biosdevname=0\"/" /etc/default/grub
  • update
sudo update-grub
  • so we will have interface named 'eth1'

  • reboot VM from the host

vagrant reload

Install python

  • To use Ansible we need to install Python 2
sudo apt-get install python

Setup VM

Provision with Ansible

  • Vagrantfile

Vagrant.configure(2) do |config|

  ...
  
 
  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 = "1524"
  end


  config.vm.provision "ansible" do |p|
    p.playbook = "playbook.yml"
    p.verbose        = true
    p.extra_vars =
        {
            var1: "value1",
            ..
        }
  end
  
end  
  • Ansible playbook.yml
---
- hosts: all
  sudo: true

  tasks:
    # tasks here
    

hostname

  • Ansible playbook.yml
---
- hosts: all
  tasks:
  
# base
#    - hostname: name={{hostname}}
    - lineinfile: dest=/etc/hosts regexp='ubuntu-xenial' line='127.0.0.1 ubuntu-xenial'       state=present
    - lineinfile: dest=/etc/hosts regexp='{{hostname}}' line='127.0.0.1 {{hostname}}' state=present
    - shell: sudo bash -c 'hostnamectl set-hostname {{hostname}}'

Setup network

Static IP

  • we will add a new interface 'eth1' with static IP

  • Vagrantfile

HOSTNAME = 'debugserver'
IP = "51.0.99.120"
NETWORK_MASK = "255.0.0.0"
NETWORK_GATEWAY = "51.0.0.1"


Vagrant.configure(2) do |config|

  ...
  
  # IP
  config.vm.network "public_network", auto_config: false, :bridge => "eth0", ip: "#{IP}"

  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 = "1524"
  end


  config.vm.provision "ansible" do |p|
    p.playbook = "playbook.yml"
    p.verbose        = true
    p.extra_vars =
        {
            machine: "main",
            public_ip: IP,
            public_mask: NETWORK_MASK,
            public_gateway: NETWORK_GATEWAY,
        }
  end
  
end  

  • Ansible playbook playbook.yml
---
- hosts: all
  sudo: true

  tasks:
# base
#    - hostname: name={{hostname}}
    - lineinfile: dest=/etc/hosts regexp='ubuntu-xenial' line='127.0.0.1 ubuntu-xenial'       state=present
    - lineinfile: dest=/etc/hosts regexp='{{hostname}}' line='127.0.0.1 {{hostname}}' state=present
    - shell: sudo bash -c 'hostnamectl set-hostname {{hostname}}'


# eth
    - name: stop eth1
      shell: ifdown eth1
      ignore_errors: yes

    - name: set networking
      template: src="files/interfaces/eth1.cfg.j2" dest="/etc/network/interfaces.d/eth1.cfg"

    - name: start interface
      #shell: ifup eth1 && ifdown eth1 && ifup eth1
      shell: ifup eth1
      ignore_errors: yes

    - name: restart interface
      shell: sudo ifconfig eth1 up && sudo ifconfig eth1 down && sudo ifconfig eth1 up


  • template file for eth1.cfg files/interfaces/eth1.cfg.j2
auto eth1
iface eth1 inet static
      address {{public_ip}} 
      netmask {{public_mask}}
      {% if public_gateway is defined %}gateway {{public_gateway}} {% endif %}


@itbj

This comment has been minimized.

Copy link

@itbj itbj commented May 8, 2017

OK. 谢谢。

@ankitgaur-tudip

This comment has been minimized.

Copy link

@ankitgaur-tudip ankitgaur-tudip commented Jun 8, 2017

What is the root password to put when you do, su - ?

@codelinx

This comment has been minimized.

Copy link

@codelinx codelinx commented Jun 20, 2017

look at the 'vagrant up' output it has a section that shows
"...
default: SSH username: ubuntu
default: SSH auth method: password
..."

@codelinx

This comment has been minimized.

Copy link

@codelinx codelinx commented Jun 20, 2017

@ankitgaur-tudip use 'sudo su -' to switch to root then just type 'passwd' to set a root password.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.