/
Creating a Virtual Machine

Creating a Virtual Machine

The current virtual machine is a VirtualBox virtual machine, using Vagrant allows you to easily create a Virtual Machine from a script. You will require both bits of software downloaded and installed onto your machine.

When both of these are installed you can create a directory and copy the below code into a file with no extension:

Vagrant File
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Making sure guest additions is installed
unless Vagrant.has_plugin?("vagrant-vbguest")
  raise 'vbguest is not installed! Please install it: vagrant plugin install vagrant-vbguest'
end

unless Vagrant.has_plugin?("vagrant-reload")
  raise 'vagrant-reload is not installed! Please install it: vagrant plugin install vagrant-reload'
end

$shared_folder_path = "../data"
# Checking shared folder exists if not create it
unless File.exists?($shared_folder_path)
  Dir.mkdir($shared_folder_path)
end


# 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://vagrantcloud.com/search.
  config.vm.box = "centos/7"

  # 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 = true

  # 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.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  # config.vm.network "forwarded_port", guest: 5432, host: 8084, host_ip: "127.0.0.1"

  # 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"
  config.vm.synced_folder $shared_folder_path, "/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
  config.vm.provider "virtualbox" do |vb|
     vb.name = "Postgres_DB_Server_VM"
     vb.memory = 4096
  end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # 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
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
  config.vm.provision "shell", inline: <<-SHELL
    ius_rpm_url="https://centos7.iuscommunity.org/ius-release.rpm"
    postgres_rpm_url="https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm"
    sudo yum update -y
    sudo yum upgrade -y
    # Installing Inline With Upstream Stable IUS (Installs current Linux packages for current OS build) and epel-release
    sudo yum install -y ${ius_rpm_url} epel-release
    curl -O ${postgres_rpm_url}
    sudo yum install -y $(basename ${postgres_rpm_url})
    sudo yum install -y postgresql11-server postgresql11-contrib
    # Cleaning up - Removing Postgres file
    rm -f $(basename ${postgres_rpm_url})
    # Postgres Setup
    # Initialise DataBase
    sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
    # Restart DataBase
    sudo systemctl start postgresql-11
    # Enable PostgresSQL launch on Reboot
    sudo systemctl enable postgresql-11
    # Adding pg_config to PATH
    export PATH=$PATH:/usr/pgsql-11/bin
  SHELL
  # Reloading VM
  config.vm.provision :reload
  
end

This is the file Vagrant will read and create a Virtual Machine once it has run once, this will give you a base VM to configure with Postgres 11 on.

Please read https://www.vagrantup.com/docs to familiarize yourself with Vagrant.

Vagrant Commands

To Initialize the environment:

vagrant init

To start the box:

vagrant up

To stop the box:

vagrant halt

To destroy the VM:

vagrant destroy

To ssh in:

vagrant ssh

Related content

RADAR Vagrant Virtual Machine
RADAR Vagrant Virtual Machine
More like this
Birmingham Children's Hospital Rare Diseases Database (Star Register)
Birmingham Children's Hospital Rare Diseases Database (Star Register)
More like this
Validation App Installation
Validation App Installation
More like this
Bamboo - Create Build Job
Bamboo - Create Build Job
More like this
Developing
Developing
More like this
RR_Git Script
RR_Git Script
More like this