From 4fa9d675baba6878c95dcee6b6a2f5a80adb2ce6 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 6 Apr 2023 13:50:50 -0600 Subject: [PATCH] Ubuntu install script (#289) * Copy of Zach's install script * Few small fixes after testing on DO droplet * Update scripts * Rename script * Add sudo notice * Fix typo * Fix another typo * Update docker instructions Former-commit-id: 9e2b140e101b8545d248af62eb22e61f2e1235b9 --- scripts/developer-mode-setup.sh | 11 +++ scripts/first_time_setup.sh | 8 --- scripts/quick-install-ubuntu.sh | 118 ++++++++++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 8 deletions(-) create mode 100755 scripts/developer-mode-setup.sh delete mode 100755 scripts/first_time_setup.sh create mode 100755 scripts/quick-install-ubuntu.sh diff --git a/scripts/developer-mode-setup.sh b/scripts/developer-mode-setup.sh new file mode 100755 index 00000000..997c6173 --- /dev/null +++ b/scripts/developer-mode-setup.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +# Script to automate the steps needed to make a cloned project repo runnable on the path +# (beware of PATH having some other file with the same name ahead of ours) +if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then + set -x + echo PATH is $PATH +fi +python3 -m venv venv +source ./venv/bin/activate +pip install --editable . +pip install shiv diff --git a/scripts/first_time_setup.sh b/scripts/first_time_setup.sh deleted file mode 100755 index e8900ce7..00000000 --- a/scripts/first_time_setup.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -python3 -m venv venv -source ./venv/bin/activate -pip install --editable . -pip install shiv -shiv -c laconic-so -o laconic-so . -./laconic-so --verbose --local-stack setup-repositories diff --git a/scripts/quick-install-ubuntu.sh b/scripts/quick-install-ubuntu.sh new file mode 100755 index 00000000..3611abdf --- /dev/null +++ b/scripts/quick-install-ubuntu.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then + set -x +fi + +install_dir=~/bin + +# 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 + +# dismiss the popups +export DEBIAN_FRONTEND=noninteractive + +## https://docs.docker.com/engine/install/ubuntu/ +## 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" +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 jq +# docker repo add depends on gnupg and updated ca-certificates +sudo apt -y install ca-certificates gnupg + +# Add dockerco package repository +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 \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + "$(. /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 + +echo "**************************************************************************************" +echo "Installing laconic-so" +# install latest `laconic-so` +install_filename=${install_dir}/laconic-so +mkdir -p ${install_dir} +curl -L -o ${install_filename} https://github.com/cerc-io/stack-orchestrator/releases/latest/download/laconic-so +chmod +x ${install_filename} + +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