Created
August 21, 2025 14:32
-
-
Save 0guzhan/a503923175419b9d2b2a778ccdd356ec to your computer and use it in GitHub Desktop.
fat development vm with vagrant
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Vagrant.configure("2") do |config| | |
config.vm.box = "ubuntu/focal64" | |
config.vm.provider "virtualbox" do |vb| | |
vb.gui = false | |
vb.memory = 8000 | |
vb.cpus = 4 | |
end | |
# Provision: Install XFCE, asdf, Go, and Java 21 | |
config.vm.provision "shell", inline: <<-SHELL | |
set -e | |
# Update and upgrade | |
sudo apt update -y | |
sudo apt upgrade -y | |
# Install some tools & dependencies | |
sudo apt install -y zsh git curl unzip zip build-essential libssl-dev wget | |
# Install asdf | |
if [ ! -d "$HOME/.asdf" ]; then | |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.18.0 | |
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc | |
echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc | |
fi | |
# Ensure asdf is available in this shell | |
. $HOME/.asdf/asdf.sh | |
# Add Go and Java plugins | |
asdf plugin add golang || true | |
asdf plugin add java || true | |
asdf plugin add maven || true | |
asdf plugin add elixir || true | |
asdf plugin add erlang || true | |
asdf plugin add nodejs || true | |
LATEST_MAVEN="$(asdf list all maven | grep -v '^$' | grep -E '^3\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)" | |
LATEST_NODEJS="$(asdf list all nodejs | grep -v '^$' | grep -E '^22\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)" | |
LATEST_ELIXIR="$(asdf list all elixir | grep -v '^$' | grep -E '^1\.18\.[0-9]+$' | sort -V | tail -n 1)" | |
LATEST_ERLANG="$(asdf list all erlang | grep -v '^$' | grep -E '^28\.[0-9]+$' | sort -V | tail -n 1)" | |
LATEST_GO="$(asdf list all golang | grep -v '^$' | grep -E '^1\.22\.[0-9]+$' | sort -V | tail -1)" | |
LATEST_JAVA="$(asdf list all java | grep '^temurin-21\.' | sort -V | tail -1)" | |
asdf install golang "$LATEST_GO" | |
asdf global golang "$LATEST_GO" | |
asdf install java "$LATEST_JAVA" | |
asdf global java "$LATEST_JAVA" | |
asdf install elixir "$LATEST_ELIXIR" | |
asdf global elixir "$LATEST_ELIXIR" | |
asdf install erlang "$LATEST_ERLANG" | |
asdf global erlang "$LATEST_ERLANG" | |
asdf install nodejs "$LATEST_NODEJS" | |
asdf global nodejs "$LATEST_NODEJS" | |
asdf install maven "$LATEST_MAVEN" | |
asdf global maven "$LATEST_MAVEN" | |
# Set environment variables in .bashrc | |
echo 'export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH"' >> ~/.bashrc | |
echo 'export GOROOT=$(asdf where golang)' >> ~/.bashrc | |
echo 'export GOPATH=$HOME/go' >> ~/.bashrc | |
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc | |
echo 'export JAVA_HOME=$(asdf where java)' >> ~/.bashrc | |
echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.bashrc | |
echo 'export ELIXIR_HOME=$(asdf where elixir)' >> ~/.bashrc | |
echo 'export PATH="$ELIXIR_HOME/bin:$PATH"' >> ~/.bashrc | |
echo 'export ERLANG_HOME=$(asdf where erlang)' >> ~/.bashrc | |
echo 'export PATH="$ERLANG_HOME/bin:$PATH"' >> ~/.bashrc | |
echo 'export NODEJS_HOME=$(asdf where nodejs)' >> ~/.bashrc | |
echo 'export PATH="$NODEJS_HOME/bin:$PATH"' >> ~/.bashrc | |
echo 'export MAVEN_HOME=$(asdf where maven)' >> ~/.bashrc | |
echo 'export PATH="$MAVEN_HOME/bin:$PATH"' >> ~/.bashrc | |
# Apply for current shell as well | |
export PATH="$HOME/.asdf/shims:$HOME/.asdf/bin:$PATH" | |
export GOROOT="$(asdf where golang)" | |
export GOPATH="$HOME/go" | |
export PATH="$GOPATH/bin:$PATH" | |
export JAVA_HOME="$(asdf where java)" | |
export PATH="$JAVA_HOME/bin:$PATH" | |
export ELIXIR_HOME="$(asdf where elixir)" | |
export PATH="$ELIXIR_HOME/bin:$PATH" | |
export ERLANG_HOME="$(asdf where erlang)" | |
export PATH="$ERLANG_HOME/bin:$PATH" | |
export NODEJS_HOME="$(asdf where nodejs)" | |
export PATH="$NODEJS_HOME/bin:$PATH" | |
export MAVEN_HOME="$(asdf where maven)" | |
export PATH="$MAVEN_HOME/bin:$PATH" | |
# Create workspace directories | |
mkdir -p "$HOME/workspace/go" | |
mkdir -p "$HOME/workspace/java" | |
mkdir -p "$HOME/workspace/elixir" | |
mkdir -p "$HOME/workspace/erlang" | |
mkdir -p "$HOME/workspace/nodejs" | |
# Print versions | |
go version | |
java -version | |
elixir -v | |
erl -version | |
node -v | |
mvn -v | |
SHELL | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment