= Vagrant =
 * https://www.vagrantup.com

== vagrantfile ==
 * https://www.vagrantup.com/docs/vagrantfile/

=== sample file for ubuntu xenial ===
{{{#!highlight ruby
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 8080, host: 18080, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9990, host: 19990, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9000, host: 19000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9001, host: 19001, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9002, host: 19002, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9003, host: 19003, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 4200, host: 14200, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 5672, host: 15672, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 15672, host: 25672, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 8000, host: 18000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 5000, host: 15000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 1433, host: 11433, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9042, host: 19042, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 27017, host: 37017, host_ip: "127.0.0.1"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "2048"
    vb.name = "UbuntuVM"
    file_to_disk = "dockerdata.vmdk"
    unless File.exist?(file_to_disk)
        vb.customize [ "createmedium", "disk", "--filename", file_to_disk, "--format", "vmdk", "--size", 1024 * 10 ]
    end
    vb.customize [ "storageattach", "UbuntuVM" , "--storagectl", "SCSI", "--port", "2", "--device", "0", "--type", "hdd", "--medium", file_to_disk]
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install apt-transport-https  ca-certificates curl  software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    apt-get update
    apt-get install openjdk-8-jdk maven nodejs npm docker-ce -y
    usermod -a vagrant -G docker
    dd if=/dev/zero of=/swapfile1 bs=1024 count=2097152
    chown root:root /swapfile1
    chmod 0600 /swapfile1
    mkswap /swapfile1
    swapon /swapfile1
    echo "/swapfile1 none swap sw 0 0" >> /etc/fstab
    # nodejs stuff
    apt-get purge nodejs npm
    curl -sL https://deb.nodesource.com/setup_9.x | bash -
    apt-get install -y nodejs
    # prepare new disk for docker data ...
    echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdc
    mkfs.ext4 /dev/sdc1
    mkdir -p /mnt/dockerdata
    mount /dev/sdc1 /mnt/dockerdata/
    echo "/dev/sdc1 /mnt/dockerdata ext4 defaults 0 0 " >> /etc/fstab
    echo -e "{\n    \"data-root\": \"/mnt/dockerdata\"\n}" > /etc/docker/daemon.json
  SHELL
end
}}}

== vagrant init ==
{{{
vagrant init [name [url]]

This initializes the current directory to be a Vagrant environment by creating an initial Vagrantfile if one does not already exist.
If a first argument is given, it will prepopulate the config.vm.box setting in the created Vagrantfile.
If a second argument is given, it will prepopulate the config.vm.box_url setting in the created Vagrantfile.

Create a base Vagrantfile:
$ vagrant init hashicorp/precise64

Create a minimal Vagrantfile (no comments or helpers):
$ vagrant init -m hashicorp/precise64

Create a Vagrantfile with the specific box, from the specific box URL:
$ vagrant init my-company-box https://boxes.company.com/my-company.box
}}}

== vagrant up ==
{{{
vagrant up [name|id]
This command creates and configures guest machines according to your Vagrantfile.
}}}

== centos 7 ==
{{{
# https://app.vagrantup.com/centos/boxes/7
vagrant init centos/7
# customize the Vagrantfile
vagrant up 
}}}


== Slackbuild install vagrant ==
{{{#!highlight bash
cd /tmp
wget https://slackbuilds.org/slackbuilds/14.2/system/vagrant.tar.gz
tar xvzf vagrant.tar.gz 
cd vagrant
wget https://releases.hashicorp.com/vagrant/2.2.4/vagrant_2.2.4_i686.rpm
./vagrant.SlackBuild 
installpkg  /tmp/vagrant-2.2.4-i586-1_SBo.tgz
vagrant -v
}}}

== Vagrant file ubuntu maven docker java8 ==
 * cat Vagrantfile | grep -v "^.*#"
{{{
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 8080, host: 18080, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9990, host: 19990, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9000, host: 19000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9001, host: 19001, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9002, host: 19002, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9003, host: 19003, host_ip: "127.0.0.1"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "2048"
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install docker-ce
    apt-get install openjdk-8-jdk
    apt-get install maven
        dd if=/dev/zero of=/swapfile1 bs=1024 count=2097152
        chown root:root /swapfile1
        chmod 0600 /swapfile1
        mkswap /swapfile1
        swapon /swapfile1
        echo "/swapfile1 none swap sw 0 0" >> /etc/fstab
  SHELL
end
}}}

== SandboxVM nodejs jdk8 docker ubuntu ==
{{{
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.network "forwarded_port", guest: 8080, host: 18080, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9990, host: 19990, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9000, host: 19000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9001, host: 19001, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9002, host: 19002, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9003, host: 19003, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 4200, host: 14200, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 5672, host: 15672, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 15672, host: 25672, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 8000, host: 18000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 5000, host: 15000, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 1433, host: 11433, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 9042, host: 19042, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 27017, host: 37017, host_ip: "127.0.0.1"
  
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false  
    vb.memory = "2048"
    vb.name = "SandboxVM"
    file_to_disk = "dockerdata.vmdk"
    unless File.exist?(file_to_disk)
        vb.customize [ "createmedium", "disk", "--filename", file_to_disk, "--format", "vmdk", "--size", 1024 * 10 ]
    end
    vb.customize [ "storageattach", "SandboxVM" , "--storagectl", "SCSI", "--port", "2",, "--device", "0", "--type", "hdd", "--medium", file_to_disk]    
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install apt-transport-https  ca-certificates curl  software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -    
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"    
    apt-get update   
    apt-get install openjdk-8-jdk maven -y   
    apt-get install nodejs npm -y
    apt-get install docker-ce -y 
    usermod -a vagrant -G docker
    dd if=/dev/zero of=/swapfile1 bs=1024 count=2097152
    chown root:root /swapfile1
    chmod 0600 /swapfile1
    mkswap /swapfile1
    swapon /swapfile1
    echo "/swapfile1 none swap sw 0 0" >> /etc/fstab
    apt-get purge nodejs npm
    curl -sL https://deb.nodesource.com/setup_9.x | bash -
    apt-get install -y nodejs
    echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdc
    mkfs.ext4 /dev/sdc1
    mkdir -p /mnt/dockerdata
    mount /dev/sdc1 /mnt/dockerdata/
    echo "/dev/sdc1 /mnt/dockerdata ext4 defaults 0 0 " >> /etc/fstab
    echo -e "{\n    \"data-root\": \"/mnt/dockerdata\"\n}" > /etc/docker/daemon.json
  SHELL
end
}}}

== Install vagrant and VirtualBox on debian bullseye - yoga 300 ==
{{{#!highlight bash
sudo apt update
sudo apt upgrade
cd Downloads/
wget https://download.virtualbox.org/virtualbox/6.1.34/virtualbox-6.1_6.1.34-150636.1~Debian~bullseye_amd64.deb
wget https://releases.hashicorp.com/vagrant/2.2.19/vagrant_2.2.19_x86_64.deb
# install dependencies
sudo apt install -y libqt5opengl5 linux-headers-amd64 linux-source
sudo apt install dkms build-essential linux-image-5.10.0-13-amd64       
sudo apt autoremove
# remove non used linux kernel images
sudo apt remove linux-image-4.19.0-6-amd64      
sudo apt remove linux-image-5.17.0-1-amd64
# install packages
sudo dpkg -i virtualbox-6.1_6.1.34-150636.1~Debian~bullseye_amd64.deb      
sudo dpkg -i vagrant_2.2.19_x86_64.deb      
virtualbox &
vagrant --version
}}}