All checks were successful
		
		
	
	Lint Checks / Run linter (push) Successful in 56s
				
			Publish / Build and publish (push) Successful in 1m24s
				
			Deploy Test / Run deploy test suite (push) Successful in 5m24s
				
			Webapp Test / Run webapp test suite (push) Successful in 4m57s
				
			Smoke Test / Run basic test suite (push) Successful in 4m48s
				
			Update links and references to github.com to git.vdb.to. Also enable the flake8 lint action in gitea. Reviewed-on: #732 Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com> Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
		
			
				
	
	
		
			175 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then
 | |
|     set -x
 | |
| fi
 | |
| 
 | |
| install_dir=~/bin
 | |
| 
 | |
| # Skip the package install stuff if so directed
 | |
| if ! [[ -n "$CERC_SO_INSTALL_SKIP_PACKAGES" ]]; then
 | |
| 
 | |
| # First display a reasonable warning to the user unless run with -y
 | |
| if ! [[ $# -eq 1 && $1 == "-y" ]]; then
 | |
|   echo "**************************************************************************************"
 | |
|   echo "This script requires sudo privilege. It installs Laconic Stack Orchestrator"
 | |
|   echo "into: ${install_dir}. It also *removes* any existing docker installed on"
 | |
|   echo "this machine and then installs the latest docker release as well as other"
 | |
|   echo "required packages."
 | |
|   echo "Only proceed if you are sure you want to make those changes to this machine."
 | |
|   echo "**************************************************************************************"
 | |
|   read -p "Are you sure you want to proceed? " -n 1 -r
 | |
|   echo
 | |
|   if [[ ! $REPLY =~ ^[Yy]$ ]]; then
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # This script assumes root permissions on a fresh Ubuntu Digital Ocean droplet
 | |
| # with these recommended specs: 16 GB Memory / 8 Intel vCPUs / 320 GB Disk
 | |
| 
 | |
| # TODO:
 | |
| #   Check python3 is available
 | |
| #   Check machine resources are sufficient
 | |
| 
 | |
| # Determine if we are on Debian or Ubuntu
 | |
| linux_distro=$(lsb_release -a 2>/dev/null | grep "^Distributor ID:" | cut -f 2)
 | |
| # Some systems don't have lsb_release installed (e.g. ChromeOS) and so we try to
 | |
| # use /etc/os-release instead
 | |
| if [[ -z "$linux_distro" ]]; then
 | |
|   if [[ -f "/etc/os-release" ]]; then
 | |
|     distro_name_string=$(grep "^NAME=" /etc/os-release | cut -d '=' -f 2)
 | |
|     if [[ $distro_name_string =~ Debian ]]; then
 | |
|       linux_distro="Debian"
 | |
|     elif [[ $distro_name_string =~ Ubuntu ]]; then
 | |
|       linux_distro="Ubuntu"
 | |
|     fi
 | |
|   else
 | |
|     echo "Failed to identify distro: /etc/os-release doesn't exist"
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| case $linux_distro in
 | |
|   Debian)
 | |
|     echo "Installing docker for Debian"
 | |
|     ;;
 | |
|   Ubuntu)
 | |
|     echo "Installing docker for Ubuntu"
 | |
|     ;;
 | |
|   *)
 | |
|     echo "ERROR: Detected unknown distribution $linux_distro, can't install docker"
 | |
|     exit 1
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| # dismiss the popups
 | |
| export DEBIAN_FRONTEND=noninteractive
 | |
| 
 | |
| ## https://docs.docker.com/engine/install/ubuntu/
 | |
| ## https://docs.docker.com/engine/install/debian/
 | |
| ## https://superuser.com/questions/518859/ignore-packages-that-are-not-currently-installed-when-using-apt-get-remove1
 | |
| packages_to_remove="docker docker-engine docker.io containerd runc docker-compose docker-doc podman-docker"
 | |
| installed_packages_to_remove=""
 | |
| for package_to_remove in $(echo $packages_to_remove); do
 | |
|   $(dpkg --info $package_to_remove &> /dev/null)
 | |
|   if [[ $? -eq 0 ]]; then
 | |
|     installed_packages_to_remove="$installed_packages_to_remove $package_to_remove"
 | |
|   fi
 | |
| done
 | |
| 
 | |
| # Enable stop on error now, since we needed it off for the code above
 | |
| set -euo pipefail  ## https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
 | |
| 
 | |
| if [[ -n "${installed_packages_to_remove}" ]]; then
 | |
|   echo "**************************************************************************************"
 | |
|   echo "Removing existing docker packages"
 | |
|   sudo apt -y remove $installed_packages_to_remove
 | |
| fi
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| echo "Installing dependencies"
 | |
| sudo apt -y update
 | |
| 
 | |
| # laconic-so depends on jq
 | |
| sudo apt -y install jq
 | |
| # laconic-so depends on git
 | |
| sudo apt -y install git
 | |
| # curl used below
 | |
| sudo apt -y install curl 
 | |
| # docker repo add depends on gnupg and updated ca-certificates
 | |
| sudo apt -y install ca-certificates gnupg
 | |
| 
 | |
| # Add dockerco package repository
 | |
| # For reasons not obvious, the dockerco instructions for installation on
 | |
| # Debian and Ubuntu are slightly different here
 | |
| case $linux_distro in
 | |
|   Debian)
 | |
|     sudo install -m 0755 -d /etc/apt/keyrings
 | |
|     curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 | |
|     sudo chmod a+r /etc/apt/keyrings/docker.gpg
 | |
|     ;;
 | |
|   Ubuntu)
 | |
|     sudo mkdir -m 0755 -p /etc/apt/keyrings
 | |
|     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 | |
|     ;;
 | |
|   *)
 | |
|     echo "ERROR: Detected unknown distribution $linux_distro, can't install docker"
 | |
|     exit 1
 | |
|     ;;
 | |
| esac
 | |
| echo \
 | |
|   "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${linux_distro,,} \
 | |
|   "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
 | |
|   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 | |
| 
 | |
| # Penny in the update jar
 | |
| sudo apt -y update
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| echo "Installing docker"
 | |
| sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 | |
| 
 | |
| # Allow the current user to use Docker
 | |
| sudo usermod -aG docker $USER
 | |
| 
 | |
| # End of long if block: Skip the package install stuff if so directed
 | |
| fi
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| echo "Installing laconic-so"
 | |
| # install latest `laconic-so`
 | |
| distribution_url=https://git.vdb.to/cerc-io/stack-orchestrator/releases/download/latest/laconic-so
 | |
| install_filename=${install_dir}/laconic-so
 | |
| mkdir -p  ${install_dir}
 | |
| curl -L -o ${install_filename} ${distribution_url}
 | |
| chmod +x ${install_filename}
 | |
| # Set up config file for self-update feature
 | |
| mkdir ~/.laconic-so
 | |
| echo "distribution-url: ${distribution_url}" >  ~/.laconic-so/config.yml
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| # Check if our PATH line is already there
 | |
| path_add_command="export PATH=\$PATH:${install_dir}"
 | |
| if ! grep -q "${path_add_command}" ~/.profile
 | |
| then
 | |
|   echo "Adding this line to the end of ~/.profile:"
 | |
|   echo ${path_add_command}
 | |
|   echo ${path_add_command} >> ~/.profile
 | |
| fi
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| # PATH set here for commands run in this script
 | |
| export PATH=$PATH:${install_dir}
 | |
| echo Installed laconic-so version: $(laconic-so version)
 | |
| 
 | |
| echo "**************************************************************************************"
 | |
| echo "The Laconic Stack Orchestrator program laconic-so has been installed at ${install_filename}"
 | |
| echo "The directory ${install_dir} has been added to PATH in *new* shells via ~/.profile"
 | |
| echo "**************************************************************************************"
 | |
| # Message the user to check docker is working for them
 | |
| echo "Please log in again (docker will not work in this current shell) then:"
 | |
| echo "test that docker is correctly installed and working for your user by running the"
 | |
| echo "command below (it should print a message beginning \"Hello from Docker!\"):"
 | |
| echo
 | |
| echo "docker run hello-world"
 | |
| echo
 |