| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #!/usr/bin/env bash
- set -euo pipefail
- #
- # This script provisions a working Wormhole dev environment on a minimally provisioned VM.
- # It expects to run as a user without root permissions.
- #
- # Can safely run multiple times to update to the latest versions.
- #
- # Make sure this is a supported OS.
- DISTRO="$(lsb_release --id --short)-$(lsb_release --release --short)"
- case "$DISTRO" in
- Debian-10 | Debian-11 | RedHatEnterprise-8.*) true ;; # okay (no operation)
- *)
- echo "This script is only for Debian 10 or 11, or RHEL 8"
- exit 1
- ;;
- esac
- # Refuse to run as root
- if [[ $EUID -eq 0 ]]; then
- echo "This script must not be run as root" 1>&2
- exit 1
- fi
- # Check if we can use sudo to get root
- if ! sudo -n true; then
- echo "This script requires sudo to run."
- exit 1
- fi
- # Make sure OS-provided Docker package isn't installed
- case "$DISTRO" in
- Debian-*)
- if dpkg -s docker.io &>/dev/null; then
- echo "Docker is already installed from Debian's repository. Please uninstall it first."
- exit 1
- fi
- ;;
- RedHatEnterprise-8.*)
- if rpm -q podman-docker &>/dev/null; then
- echo "podman-docker is installed. Please uninstall it first."
- exit 1
- fi
- ;;
- *) echo "Internal error: $DISTRO not matched in case block." && exit 1 ;;
- esac
- # Upgrade everything
- # (this ensures that an existing Docker CE installation is up to date before continuing)
- case "$DISTRO" in
- Debian-*) sudo apt-get update && sudo apt-get upgrade -y ;;
- RedHatEnterprise-8.*) sudo dnf upgrade -y ;;
- *) echo "Internal error: $DISTRO not matched in case block." && exit 1 ;;
- esac
- # Install dependencies
- case "$DISTRO" in
- Debian-*) sudo apt-get -y install bash-completion git git-review vim ;;
- RedHatEnterprise-8.*) sudo dnf -y install bash-completion git git-review vim ;;
- *) echo "Internal error: $DISTRO not matched in case block." && exit 1 ;;
- esac
- # Install Go
- ARCH=amd64
- GO=1.19.3
- (
- if [[ -d /usr/local/go ]]; then
- sudo rm -rf /usr/local/go
- fi
- TMP=$(mktemp -d)
- (
- cd "$TMP"
- curl -OJ "https://dl.google.com/go/go${GO}.linux-${ARCH}.tar.gz"
- sudo tar -C /usr/local -xzf "go${GO}.linux-${ARCH}.tar.gz"
- echo 'PATH=/usr/local/go/bin:$PATH' | sudo tee /etc/profile.d/local_go.sh
- )
- rm -rf "$TMP"
- )
- . /etc/profile.d/local_go.sh
- # Install Docker and add ourselves to Docker group
- if [[ ! -f /usr/bin/docker ]]; then
- TMP=$(mktemp -d)
- (
- cd "$TMP"
- case "$DISTRO" in
- Debian-*)
- curl -fsSL https://get.docker.com -o get-docker.sh
- sudo sh get-docker.sh
- ;;
- RedHatEnterprise-8.*)
- # get-docker.sh doesn't support RHEL x86_64.
- curl -fsSL https://download.docker.com/linux/centos/docker-ce.repo -o docker-ce.repo
- sudo cp docker-ce.repo /etc/yum.repos.d/docker-ce.repo
- # This is a no-op if the packages are already installed, but the "upgrade everything" step above will keep them up to date.
- sudo dnf -y install docker-ce docker-ce-cli containerd.io
- ;;
- esac
- )
- rm -rf "$TMP"
- sudo gpasswd -a $USER docker
- fi
- sudo systemctl enable --now docker
- # Install Minikube
- # Use 1.24 until this regression is resolved:
- # https://github.com/kubernetes/minikube/issues/13542
- case "$DISTRO" in
- Debian-*)
- TMP=$(mktemp -d)
- (
- cd "$TMP"
- curl -LO https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube_1.24.0-0_amd64.deb
- sudo dpkg -i minikube_1.24.0-0_amd64.deb
- )
- rm -rf "$TMP"
- ;;
- RedHatEnterprise-*)
- sudo dnf -y install https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-1.24.0-0.x86_64.rpm
- ;;
- *) echo "Internal error: $DISTRO not matched in case block." && exit 1 ;;
- esac
- # Install tilt.
- # This script places the binary at /usr/local/bin/tilt and then self-tests by trying to execute it from PATH.
- # So we need to ensure that PATH contains /usr/local/bin, which is not the case in the environment created by sudo by default on RHEL.
- case "$DISTRO" in
- Debian-*) true ;;
- RedHatEnterprise-*)
- echo -e "Defaults\tsecure_path=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" | sudo tee /etc/sudoers.d/tilt_installer_path
- ;;
- *) echo "Internal error: $DISTRO not matched in case block." && exit 1 ;;
- esac
- curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | sudo bash
- # Shell aliases
- cat <<'EOF' | sudo tee /etc/profile.d/wormhole_aliases.sh
- alias kubectl="minikube kubectl --"
- alias vi=vim
- alias kc=kubectl
- . <(kubectl completion bash)
- . <(minikube completion bash)
- complete -F __start_kubectl kc
- function use-namespace {
- kubectl config set-context --current --namespace=$1
- }
- export DOCKER_BUILDKIT=1
- alias start-recommended-minikube="minikube start --driver=docker --kubernetes-version=v1.22.3 --cpus=$(nproc) --memory=16G --disk-size=120g --namespace=wormhole"
- EOF
- cat <<EOF
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- โ โ
- โ SUCCESS โ
- โ โ
- โ Re-log into your session to apply changes. โ
- โ โ
- โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- EOF
|