Last active
          March 13, 2022 01:38 
        
      - 
      
- 
        Save smijar/4465ed7ee03a1237695967cb1b9379ba to your computer and use it in GitHub Desktop. 
    Vagrant Fedora box with docker, vagrant/libvirtd provider, k3s, kind, minikube, java, maven, pyenv, golang
  
        
  
    
      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
    
  
  
    
  | #------------------------------------------------------------- | |
| # Fedora34 based Vagrant box | |
| # -------------------------- | |
| # This is a Vagrantfile that installs azure, aws, gcloud CLIs | |
| # along with pyenv, sdkman (for java), golang, nodejs | |
| # minikube, kind, k3s | |
| #------------------------------------------------------------- | |
| vm_script = <<-SHELL | |
| # sudo -i | |
| # echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf | |
| # set -euxo pipefail | |
| set -euxo pipefail | |
| sudo chmod +x /dev/kvm | |
| sudo lscpu | grep Virtualization | |
| sudo dnf update -y | |
| # install docker | |
| echo "installing Docker CE" | |
| sudo dnf remove docker \ | |
| docker-client \ | |
| docker-client-latest \ | |
| docker-common \ | |
| docker-latest \ | |
| docker-latest-logrotate \ | |
| docker-logrotate \ | |
| docker-selinux \ | |
| docker-engine-selinux \ | |
| docker-engine -y | |
| sudo dnf install dnf-plugins-core -y | |
| sudo dnf config-manager \ | |
| --add-repo \ | |
| https://download.docker.com/linux/fedora/docker-ce.repo | |
| sudo dnf install docker-ce docker-ce-cli containerd.io -y | |
| # install qemu-kvm and libvirt | |
| # ref: https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-virtualization/ | |
| echo "installing qemu-kvm and libvirt" | |
| # Note that: $ sudo dnf install @virtualization # installs the below group | |
| sudo dnf install qemu-kvm libvirt libguestfs-tools virt-install rsync -y | |
| sudo usermod --append --groups libvirt $(whoami) | |
| # apply changes without logging out | |
| sudo newgrp libvirt | |
| # enable libvirt service daemon | |
| sudo systemctl enable --now libvirtd | |
| # enable and start docker daemon | |
| echo "service enable and start docker" | |
| sudo systemctl enable docker | |
| if [ groupadd docker ]; then echo "group added"; fi | |
| sudo usermod -aG docker $USER | |
| # apply changes without logging out | |
| sudo newgrp docker | |
| # install vagrant and libvirt as provider | |
| # https://developer.fedoraproject.org/tools/vagrant/vagrant-libvirt.html | |
| # install all requirements for vagrant and libvirt as provider with the group install shown below | |
| # sudo dnf install @vagrant | |
| # normally, but @vagrant does everything shown below | |
| sudo dnf install vagrant vagrant-libvirt -y | |
| # or | |
| # sudo vagrant plugin install vagrant-libvirt | |
| # install git | |
| sudo dnf install git -y | |
| # install node | |
| sudo dnf install nodejs -y | |
| # install golang | |
| sudo dnf -y install go | |
| # install retype | |
| sudo npm install retypeapp --global | |
| # install kubectl | |
| cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo | |
| [kubernetes] | |
| name=Kubernetes | |
| baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 | |
| enabled=1 | |
| gpgcheck=1 | |
| repo_gpgcheck=1 | |
| gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg | |
| EOF | |
| sudo yum install -y kubectl | |
| # install sdkman and java and maven | |
| echo "installing sdkman and java" | |
| curl -s "https://get.sdkman.io" | bash | |
| echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' | tee -a $HOME/.bash_profile | |
| # install java and maven | |
| # have to do this as the sdkman script has unbounded variable or something | |
| set +u | |
| source "$HOME/.sdkman/bin/sdkman-init.sh" | |
| sdk install java 11.0.11.hs-adpt | |
| sdk install maven | |
| # install | |
| git clone https://github.com/pyenv/pyenv.git ~/.pyenv | |
| # for Bash | |
| echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile | |
| echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile | |
| echo 'eval "$(pyenv init -)"' >> ~/.bash_profile | |
| # pyenv install 3.9.0 | |
| # k3s | |
| # echo "installing k3s single node" | |
| # to install single node k3s worker, agent locally | |
| # https://rancher.com/docs/k3s/latest/en/quick-start/ | |
| # | |
| # curl -sfL https://get.k3s.io | sh - | |
| # curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh - | |
| # A kubeconfig file will be written to /etc/rancher/k3s/k3s.yaml | |
| # K3S_URL parameter causes K3s to run in worker mode. The K3s agent will register with the K3s server listening at the supplied URL | |
| # value K3S_TOKEN is stored at /var/lib/rancher/k3s/server/node-token | |
| # Note: Each machine must have a unique hostname. If your machines do not have unique hostnames, pass the K3S_NODE_NAME environment variable and provide a value with a valid and unique hostname for each node. | |
| # minikube | |
| # https://minikube.sigs.k8s.io/docs/start/ | |
| curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm | |
| sudo rpm -ivh minikube-latest.x86_64.rpm | |
| # minikube dashboard to launch the dashboard | |
| # kind | |
| # https://kind.sigs.k8s.io/docs/user/quick-start/#installing-with-a-package-manager | |
| curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64 | |
| chmod +x ./kind | |
| sudo mv ./kind /usr/local/bin/ | |
| # Install AWS CLI | |
| # https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html | |
| echo "installing AWS CLI" | |
| curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" | |
| unzip awscliv2.zip | |
| sudo ./aws/install | |
| # Install Google Cloud CLI | |
| # https://cloud.google.com/sdk/docs/install#rpm | |
| echo "installing Google Cloud CLI" | |
| sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM | |
| [google-cloud-sdk] | |
| name=Google Cloud SDK | |
| baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el8-x86_64 | |
| enabled=1 | |
| gpgcheck=1 | |
| repo_gpgcheck=0 | |
| gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg | |
| https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg | |
| EOM | |
| #sudo dnf install google-cloud-sdk -y | |
| # 366 throws an error (library on fedora 34, hence have to exclude) | |
| # or could use $ export CLOUDSDK_PYTHON=python3 | |
| sudo dnf install --exclude=google-cloud-sdk-366.0.0-1 google-cloud-sdk -y | |
| echo "please use $ gcloud init --console-only # to continue" | |
| # install azure-cli | |
| # https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=dnf | |
| echo "installing Azure CLI" | |
| sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc | |
| echo -e "[azure-cli] | |
| name=Azure CLI | |
| baseurl=https://packages.microsoft.com/yumrepos/azure-cli | |
| enabled=1 | |
| gpgcheck=1 | |
| gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo | |
| sudo dnf install azure-cli -y | |
| # recording | |
| sudo dnf install asciinema -y | |
| sudo dnf install jq -y | |
| SHELL | |
| # https://www.vagrantup.com/docs/disks/usage | |
| Vagrant.configure("2") do |config| | |
| config.vm.define "fedora34" do |h| | |
| #h.vm.box = "hashicorp/bionic64" | |
| h.vm.box = "fedora/34-cloud-base" | |
| h.vm.provider :virtualbox | |
| h.vm.disk :disk, size: "10GB", primary: true | |
| h.vm.provider "virtualbox" do |vb| | |
| vb.customize ['modifyvm', :id, '--nested-hw-virt', 'on'] | |
| vb.memory = "6144" | |
| vb.cpus = "4" | |
| # vb.inputs = [] | |
| end | |
| h.vm.synced_folder "/Users/<username>/dev/<code-folder>", "/home/vagrant/dev/<code-folder>" | |
| h.vm.synced_folder "/Users/<username>/.aws", "/home/vagrant/.aws" | |
| h.vm.synced_folder "/Users/<username>/.azure", "/home/vagrant/.azure" | |
| h.vm.provision "shell", inline: vm_script, privileged: false | |
| end | |
| end | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment