# This bash script installs ao-cli and its prerequisites: Node.JS (npm, nvm, node) # This script is hosted in the ao-cli repository, so ao-cli can always be installed with: # curl -L https://git.coalitionofinvisiblecolleges.org/autonomousorganization/ao-cli/raw/branch/main/bootstrap.js | sh # detect OS if [ -f "/etc/debian_version" ]; then DISTRO="debian" echo "Debian, Ubuntu, or Raspbian OS detected, proceeding with Debian-compatible ao-cli installation." elif [ -f "/etc/arch-release" ]; then DISTRO="arch" echo Arch- or Manjaro-based OS detected, proceeding with Arch-compatible ao-cli installation. elif [ -f "/etc/fedora-release" ]; then DISTRO="fedora" echo Fedora-based OS detected, proceeding with Fedora-compatible ao-cli installation. # Defining helper function function install_if_needed() { for package in "$@" do if [ $(which $package) ]; then echo $package already installed else sudo dnf install -y $package fi done } elif [ $(uname | grep -c "Darwin") -eq 1 ]; then DISTRO="mac" echo MacOS detected, proceeding with Mac-compatible ao-cli installation. else echo Could not detect your OS distribution. Running this script could make a mess, so installing manually is recommended. exit 1 fi echo Updating your system... # update system and install prereqs (Debian) if [ "$DISTRO" = "debian" ]; then # update sudo apt update -yqqq 2>/dev/null sudo apt autoremove -yqqq echo apt update complete # upgrade sudo apt upgrade -yqqq echo apt upgrade complete # more cleanup #sudo apt-get dist-upgrade -yqqq #sudo apt-get clean -yqqq #sudo apt-get autoclean -yqqq # check for sudo install and fail if not # install curl if [ $(dpkg-query -W -f='${Status}' curl 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo curl already installed else sudo apt install -y curl fi # install wget if [ $(dpkg-query -W -f='${Status}' wget 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo wget already installed else sudo apt install -y wget fi # install git if [ $(dpkg-query -W -f='${Status}' git 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo git already installed else sudo apt install -y git fi # update system and install prereqs (Arch) elif [ "$DISTRO" = "arch" ]; then # update, but do not automatically clean up for Arch users sudo pacman -Syu 1>/dev/null echo pacman update complete # todo: detect whether AUR is enabled here and fail if not. might be in /etc/pacman.conf. # install curl if [ $(sudo pacman -Qs curl >/dev/null | grep -c "local/curl" ) -eq 0 ]; then echo curl already installed else sudo pacman -S curl fi # install wget if [ $(sudo pacman -Qs wget >/dev/null | grep -c "local/wget" ) -eq 0 ]; then echo wget already installed else sudo pacman -S wget fi # update system and install prereqs (Fedora) elif [ "$DISTRO" = "fedora" ]; then # update echo "Updating DNF..." sudo dnf update -yqqq 2>/dev/null sudo dnf autoremove -yqqq echo "Update Complete!" # upgrade echo "Upgrading..." sudo dnf upgrade -yqqq echo "Upgrade Complete" # install basic dependencies install_if_needed curl wget git elif [ "$DISTRO" = "mac" ]; then # install homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # update brew update -yqqq 2>/dev/null sudo apt autoremove -yqqq echo apt update complete # upgrade sudo apt upgrade -yqqq echo apt upgrade complete # install curl if [ $(dpkg-query -W -f='${Status}' curl 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo curl already installed else sudo apt install -y curl fi # install wget if [ $(dpkg-query -W -f='${Status}' wget 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo wget already installed else sudo apt install -y wget fi # install git if [ $(dpkg-query -W -f='${Status}' git 2>/dev/null | grep -c "ok installed") -eq 1 ]; then echo git already installed else sudo apt install -y git fi fi # install nvm cd ~ if [ -f "$HOME/.nvm/nvm.sh" ]; then . ~/.nvm/nvm.sh fi if [ $(command -v nvm | grep -c "nvm") -eq 1 ]; then NVMVERSION=`nvm --version` echo nvm v$NVMVERSION already installed else git clone https://github.com/creationix/nvm.git ~/.nvm 2>/dev/null sudo echo "source ~/.nvm/nvm.sh" >> ~/.bashrc sudo echo "source ~/.nvm/nvm.sh" >> ~/.profile source ~/.bashrc source ~/.profile fi NODEVERSION=`nvm current` # install node if [ $(echo $NODEVERSION | grep -c "16\.") -eq 1 ]; then echo node $NODEVERSION already installed else nvm install 16 #stable nvm use 16 #stable nvm alias default 16 #default stable fi # install npm if [ $(npm --v 2>/dev/null | grep -c "8\.") -eq 1 ]; then NPMVERSION=`npm -v` echo npm v$NPMVERSION already installed else #curl -L https://www.npmjs.com/install.sh | sh # this line might not be needed npm install -g npm # why doesn't the npm install script install the current version? fi # clone the ao-cli repository cd ~ if find "ao-cli" -mindepth 1 -print -quit 2>/dev/null | grep -q .; then echo ao-cli git repository already cloned else git clone http://git.coalitionofinvisiblecolleges.org:3009/autonomousorganization/ao-cli.git fi # install project dependencies cd ~/ao-cli if [ $(npm list --depth 0 ao-cli | grep -c "@autonomousorganization/ao-cli") -eq 1 ]; then echo ao-cli node module already installed else npm install fi echo ao-cli is installed