Skip to content

Instantly share code, notes, and snippets.

@fristonio
Created April 12, 2022 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fristonio/64608c1b70487881067fe10ee9c53498 to your computer and use it in GitHub Desktop.
Save fristonio/64608c1b70487881067fe10ee9c53498 to your computer and use it in GitHub Desktop.
Bash script for Vagrant dev environment setup
#!/usr/bin/env bash
# User - vagrant
# The script must be run as root
set -euxo pipefail
ORIGINAL_DIR=${PWD}
VAGRANT_HOME="/home/vagrant"
GOLANG_DOWNLOAD_URL="https://go.dev/dl/go1.18.linux-amd64.tar.gz"
KIND_DOWNLOAD_URL="https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64"
BUILDX_DOWNLOAD_URL="https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64"
rm -rf /tmp/dev-setup || true
mkdir -p /tmp/dev-setup
cd /tmp/dev-setup
apt -y update
apt -y upgrade
apt -y install make docker.io
usermod -aG docker vagrant
curl -L ${BUILDX_DOWNLOAD_URL} -o docker-buildx
chmod +x docker-buildx
mkdir -p ${VAGRANT_HOME}/.docker/cli-plugins
mv docker-buildx ${VAGRANT_HOME}/.docker/cli-plugins/
# Run a local docker registry, in most cases we need to work with a local registry
docker run -d -p 5000:5000 --restart=always --name registry registry:2
curl -L ${GOLANG_DOWNLOAD_URL} -o go.tar.xz
mkdir -p ${VAGRANT_HOME}/goroot
tar -xf go.tar.xz -C ${VAGRANT_HOME}/goroot/
curl -Lo ./kind ${KIND_DOWNLOAD_URL}
chmod +x ./kind
mv ./kind /usr/local/bin/kind
rm /etc/profile.d/env.sh || true
echo "export CTR_REGISTRY=localhost:5000 && export GOROOT=\$HOME/goroot/go && export GOPATH=\$HOME/go && export PATH=\$PATH:\$GOROOT/bin" > /etc/profile.d/env.sh
chmod +x /etc/profile.d/env.sh
rm -rf /tmp/dev-setup
cd ${ORIGINAL_DIR}
exit 0
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">=2.0.0"
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", path: "dev-setup.sh"
# Example of a forwarded port
# config.vm.network "forwarded_port", guest: 8515, host: 8515, host_ip: "127.0.0.1"
N = 1
(1..N).each do |machine_id|
config.vm.define "dev#{machine_id}" do |machine|
machine.vm.hostname = "dev#{machine_id}"
# Network range - 192.168.56.0/21
machine.vm.network "private_network", ip: "192.168.56.#{10+machine_id}"
machine.vm.network "private_network", ip: "2001::#{10+machine_id}"
# Don't forget to enable this ports on your host before starting the VM
# in order to have nfs working"
# iptables -I INPUT -p tcp -s 192.168.56.0/21 --dport 111 -j ACCEPT
# iptables -I INPUT -p tcp -s 192.168.56.0/21 --dport 2049 -j ACCEPT
# iptables -I INPUT -p tcp -s 192.168.56.0/21 --dport 20048 -j ACCEPT
end
end
project_dir = '.'
project_path = '/home/vagrant/dev'
config.vm.synced_folder project_dir, project_path, owner: "vagrant"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment