dev-setup.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. #
  4. # This script provisions a working Wormhole dev environment on a blank Debian VM.
  5. # It expects to run as a user without root permissions.
  6. #
  7. # Can safely run multiple times to update to the latest versions.
  8. #
  9. # Make sure this is Debian 10 or 11
  10. if [ "$(lsb_release -rs)" != "10" ] && [ "$(lsb_release -rs)" != "11" ]; then
  11. echo "This script is only for Debian 10 or 11"
  12. exit 1
  13. fi
  14. # Refuse to run as root
  15. if [[ $EUID -eq 0 ]]; then
  16. echo "This script must not be run as root" 1>&2
  17. exit 1
  18. fi
  19. # Check if we can use sudo to get root
  20. if ! sudo -n true; then
  21. echo "This script requires sudo to run."
  22. exit 1
  23. fi
  24. # Make sure Docker Debian package isn't installed
  25. if dpkg -s docker.io &>/dev/null; then
  26. echo "Docker is already installed from Debian's repository. Please uninstall it first."
  27. exit 1
  28. fi
  29. # Upgrade everything
  30. # (this ensures that an existing Docker CE installation is up to date before continuing)
  31. sudo apt-get update && sudo apt-get upgrade -y
  32. # Install dependencies
  33. sudo apt-get -y install bash-completion git git-review vim
  34. # Install Go
  35. ARCH=amd64
  36. GO=1.17.3
  37. (
  38. if [[ -d /usr/local/go ]]; then
  39. sudo rm -rf /usr/local/go
  40. fi
  41. TMP=$(mktemp -d)
  42. (
  43. cd "$TMP"
  44. curl -OJ "https://dl.google.com/go/go${GO}.linux-${ARCH}.tar.gz"
  45. sudo tar -C /usr/local -xzf "go${GO}.linux-${ARCH}.tar.gz"
  46. echo 'PATH=/usr/local/go/bin:$PATH' | sudo tee /etc/profile.d/local_go.sh
  47. )
  48. rm -rf "$TMP"
  49. )
  50. . /etc/profile.d/local_go.sh
  51. # Install Docker and add ourselves to Docker group
  52. if [[ ! -d /var/lib/docker ]]; then
  53. TMP=$(mktemp -d)
  54. (
  55. cd "$TMP"
  56. curl -fsSL https://get.docker.com -o get-docker.sh
  57. sudo sh get-docker.sh
  58. )
  59. rm -rf "$TMP"
  60. sudo gpasswd -a $USER docker
  61. fi
  62. sudo systemctl enable --now docker
  63. # Install Minikube
  64. TMP=$(mktemp -d)
  65. (
  66. cd "$TMP"
  67. curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
  68. sudo dpkg -i minikube_latest_amd64.deb
  69. )
  70. rm -rf "$TMP"
  71. # Install tilt
  72. curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | sudo bash
  73. # Shell aliases
  74. cat <<'EOF' | sudo tee /etc/profile.d/wormhole_aliases.sh
  75. alias kubectl="minikube kubectl --"
  76. alias vi=vim
  77. alias kc=kubectl
  78. . <(kubectl completion bash)
  79. . <(minikube completion bash)
  80. complete -F __start_kubectl kc
  81. function use-namespace {
  82. kubectl config set-context --current --namespace=$1
  83. }
  84. export DOCKER_BUILDKIT=1
  85. alias start-recommended-minikube="minikube start --driver=docker --kubernetes-version=v1.22.3 --cpus=16 --memory=16G --disk-size=120g"
  86. EOF
  87. cat <<EOF
  88. ┍━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┑
  89. │ │
  90. │ SUCCESS │
  91. │ │
  92. │ Re-log into your session to apply changes. │
  93. │ │
  94. └━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┘
  95. EOF