Browse Source

continuing work on ao-installer

main
Zenen Treadwell 3 years ago
parent
commit
d98d5445a2
  1. 4
      Makefile
  2. 299
      scripts/ao.sh
  3. 242
      scripts/fresh-setup.sh
  4. 66
      scripts/get-image.sh
  5. 463
      scripts/nvm_install.sh
  6. 12
      scripts/write-image.sh

4
Makefile

@ -9,8 +9,8 @@ it-pretty:
@scripts/init.sh
autonomy:
@chmod +x scripts/fresh-setup.sh
@scripts/fresh-setup.sh
@chmod +x scripts/ao.sh
@scripts/ao.sh
acquisition:
@chmod +x scripts/get-image.sh

299
scripts/ao.sh

@ -0,0 +1,299 @@
#!/bin/bash
# Script for installing the base dependencies of AO and getting it running
# Zen, 2022
# Font decoration for better a e s t h e t i c
RED="\e[0;91m"
GREEN="\e[0;92m"
BLUE="\e[0;94m"
BOLD="\e[1m"
ULINE="\e[4m"
RESET="\e[0m"
clear
echo ''
echo ' d8888 .d88888b. 8888888 888 888 888 '
echo ' d88888 d88P" "Y88b 888 888 888 888 '
echo ' d88P888 888 888 888 888 888 888 '
echo ' d88P 888 888 888 888 88888b. .d8888b 888888 8888b. 888 888 .d88b. 888d888 '
echo ' d88P 888 888 888 888 888 "88b 88K 888 "88b 888 888 d8P Y8b 888P" '
echo ' d88P 888 888 888 888 888 888 "Y8888b. 888 .d888888 888 888 88888888 888 '
echo ' d8888888888 Y88b. .d88P 888 888 888 X88 Y88b. 888 888 888 888 Y8b. 888 '
echo 'd88P 888 "Y88888P" 8888888 888 888 88888P" "Y888 "Y888888 888 888 "Y8888 888 '
echo ''
# ------------------- Step 1 - Baseline Setup -------------------
echo -e "${BOLD}Hiya!${RESET} We're going to get you set up with your very own Autonomous Engine."
echo ""
echo -e "This script is designed to ask you just enough questions to keep you involved in the process,\nwhile making it as easy as possible for you to get it going. \n\n${BLUE}press enter to continue${RESET}"
read
echo -e "${ULINE}System Basics${RESET}"
if [ -f "/etc/debian_version" ]; then
DISTRO="debian"
echo -e "Debian, Ubuntu, or Raspbian OS detected."
elif [ -f "/etc/arch-release" ]; then
DISTRO="arch"
echo -e "Arch- or Manjaro-based OS detected."
elif [ -f "/etc/fedora-release" ]; then
DISTRO="fedora"
echo -e "${GREEN}Fedora${RESET} detected as the Operating System"
elif [ $(uname | grep -c "Darwin") -eq 1 ]; then
DISTRO="mac"
echo -e "${GREEN}MacOS${RESET} detected."
else
echo "I don't know what OS you're running! Cancelling this operation."
exit 1
fi
ARCHY=$(uname -m)
if [ $ARCHY == 'x86_64' ]; then
echo -e "Ayyy you got yourself an ${GREEN}x86${RESET} processor, cool"
elif [ $ARCHY == 'armv7l' ]; then
echo -e "I see you rockin an ${GREEN}ARM${RESET} processor, neato"
fi
echo ""
export ALCHEMY_DISTRO=$DISTRO
export ALCHEMY_ARCH=$ARCHY
echo ""
echo -e "Got it! Next we're going to make sure the system's repositories (where they get their data from)\nare updated and that you have all the basic command line utilities we need to continue. \n\n${BLUE}(enter)${RESET}"
read
install_if_needed() {
for package in "$@"
do
if [ -z $(which $package) ]; then
echo "installing" $package
case $DISTRO in
"debian")
sudo apt install -y $package
;;
"arch")
sudo pacman -S $package
;;
"fedora")
sudo dnf install -y $package
;;
"mac")
brew install $package
;;
esac
else
echo $package 'already installed!'
fi
done
}
echo "Updating the repositories..."
echo -e "(you'll probably need to input ${BLUE}your 'sudo' password${RESET} here)"
case $DISTRO in
"debian")
sudo apt update
sudo apt autoremove
sudo apt upgrade
;;
"arch")
sudo pacman -Syu
;;
"fedora")
# sudo dnf update
# sudo dnf upgrade
;;
"mac")
install
sudo brew update
;;
esac
echo ""
echo -e "Making sure we've got the basics..."
case $DISTRO in
"debian")
# Note -- I'm not sure if these are all needed but I'm not in the mood to check
install_if_needed git wget tor sqlite3 zlib1g-dev libtool-bin autoconf autoconf-archive automake autotools-dev \
libgmp-dev libsqlite3-dev python python3 python3-mako libsodium-dev build-essential pkg-config libev-dev \
libcurl4-gnutls-dev libssl-dev fakeroot devscripts
;;
"arch")
# install_if_needed
;;
"mac")
# install_if_needed
;;
"fedora")
# install_if_needed git wget tor sqlite3 autoconf autoconf-archive automake \
# python python3 python3-mako pkg-config fakeroot devscripts
;;
esac
echo ""
# ------------------- Step 2 - AO Environment Setup -------------------
AO=''
echo -e "Hey! You still there? I was wondering which ${BLUE}version of AO${RESET} you wanted to install. \n"
echo -e "${BOLD}1.${RESET} ao-3 (Vue)"
echo -e "${BOLD}2.${RESET} ao-react (React)"
while [[ -z $AO ]]; do
echo -en "${BLUE}(number):${RESET} "
read -n1 ao_select
echo ""
echo ""
case $ao_select in
"1")
echo "Minimalism, I like it! Proceeding with ao-3 installation"
AO=vue
;;
"2")
echo "The DCTRL special! Proceeding with ao-react installation"
AO=react
;;
*)
echo "that aint no AO i ever heard of, try again"
;;
esac
done;
echo ""
if [ $AO = "vue" ] || [ $AO = 'react' ]; then
echo -e "${BOLD}Installing Node.js${RESET}"
chmod +x scripts/nvm_install.sh
scripts/nvm_install.sh
source ~/.bashrc
nvm install v16.13.0
nvm alias default v16.13.0
source ~/.bashrc
echo ""
fi
if [ $AO = "vue" ] || [ $AO = 'react' ]; then
echo -e "${BOLD}Installing Bitcoin Ecosystem${RESET}"
mkdir -p bitcoin
if [ $ALCHEMY_ARCH == 'x86_64' ] && [ ! -e images/bitcoin-22.0* ]; then
wget https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-x86_64-linux-gnu.tar.gz -P images/
elif [ $ALCHEMY_ARCH == 'armv7l' ] && [ ! -e images/bitcoin-22.0* ]; then
wget https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-arm-linux-gnueabihf.tar.gz -P images/
fi
tar -xvf images/bitcoin-22.0*.tar.gz
sudo cp bitcoin-22.0/bin/* /usr/local/bin/
#echo 'Installing lightningd'
#git clone https://github.com/ElementsProject/lightning.git lightning
#cd lightning
#git checkout v0.10.2
#./configure
#sudo make
#sudo make install
#cd ..
#echo 'Installing clboss'
#git clone https://github.com/ZmnSCPxj/clboss.git clboss
#cd clboss
#git checkout 0.11B
#mkdir m4
#autoreconf -i
#./configure
#make
#sudo make install
#cd ..
echo -e "${BOLD}Bitcoin installed!${RESET} Let's make sure it's configured now."
fi
echo ''
if [ $AO = "vue" ] || [ $AO = 'react' ]; then
echo "We still need to install and configure Tor..."
fi
# ------------------- Step 3 - AO Installation -------------------
case $AO in
"vue")
echo 'Installing ao-3'
git clone 'https://github.com/AutonomousOrganization/ao-3.git' ~/ao-3
pushd ~/ao-3
npm install
npm run build
npm run checkconfig
popd
;;
"react")
echo "soon it will be done"
;;
esac
# ------------------- Step 4 - Systemd Setup -------------------
# ------------------- Step 5 - Health Check -------------------
# echo ''
# echo ''
# echo '*********************************************************'
# echo 'Version Information'
# echo '*********************************************************'
#
# echo ' '
# echo 'make Version'
# echo '*********************************************************'
# make --version
#
# echo ' '
# echo 'node Version'
# echo '*********************************************************'
# node --version
#
# echo ' '
# echo 'sqlite3 Version'
# echo '*********************************************************'
# sqlite3 --version
#
# echo ' '
# echo 'tor Version'
# echo '*********************************************************'
# tor --version
#
# echo ' '
# echo 'bitcoind Version'
# echo '*********************************************************'
# bitcoind --version
#
# echo ' '
# echo 'lightningd Version'
# echo '*********************************************************'
# lightningd --version
#
# echo ' '
# echo 'clboss Version'
# echo '*********************************************************'
# clboss --version
#
# echo ''
# echo 'Execution completion'
# date
# echo ''
#
# echo 'Lightning Node Installed Start via two terminals: '
# echo ' bitcoind'
# echo ' lightningd'
# echo 'Can Proceed to AO-3 setup: '
# echo ' git clone https://github.com/AutonomousOrganization/ao-3'
# echo ' cd ao-3'
# echo ' npm install'
# echo ' npm run checkconfig'
# echo ' npm build'
# echo ' npm start'

242
scripts/fresh-setup.sh

@ -1,242 +0,0 @@
#!/bin/bash
# Script for installing the base dependencies of AO and getting it running
# Zen, 2022
# Font decoration for better a e s t h e t i c
RED="\e[0;91m"
GREEN="\e[0;92m"
BLUE="\e[0;94m"
BOLD="\e[1m"
ULINE="\e[4m"
RESET="\e[0m"
echo ""
echo -e "${BOLD}Hiya!${RESET} We're going to get you set up with your very own Autonomous Engine."
echo ""
echo -e "This script is designed to ask you just enough questions to keep you involved in the process,\nwhile making it as easy as possible for you to get it going. \n\n${BLUE}press enter to continue${RESET}"
read
echo -e "${ULINE}System Basics${RESET}"
if [ -f "/etc/debian_version" ]; then
DISTRO="debian"
echo -e "Debian, Ubuntu, or Raspbian OS detected."
elif [ -f "/etc/arch-release" ]; then
DISTRO="arch"
echo -e "Arch- or Manjaro-based OS detected."
elif [ -f "/etc/fedora-release" ]; then
DISTRO="fedora"
echo -e "${GREEN}Fedora${RESET} detected as the Operating System"
elif [ $(uname | grep -c "Darwin") -eq 1 ]; then
DISTRO="mac"
echo -e "${GREEN}MacOS${RESET} detected."
else
echo "I don't know what OS you're running! Cancelling this operation."
exit 1
fi
ARCHY=$(uname -m)
if [ $ARCHY == 'x86_64' ]; then
echo -e "Ayyy you got yourself an ${GREEN}x86${RESET} processor, cool"
elif [ $ARCHY == 'armv7l' ]; then
echo -e "I see you rockin an ${GREEN}ARM${RESET} processor, neato"
fi
echo ""
export ALCHEMY_DISTRO=$DISTRO
export ALCHEMY_ARCH=$ARCHY
echo ""
echo -e "Got it! Next we're going to make sure the system's repositories (where they get their data from)\nare updated and that you have all the basic command line utilities we need to continue. \n\n${BLUE}(enter)${RESET}"
read
install_if_needed() {
for package in "$@"
do
if [ -z $(which $package) ]; then
echo "installing" $package
case $DISTRO in
"debian")
sudo apt install -y $package
;;
"arch")
sudo pacman -S $package
;;
"fedora")
sudo dnf install -y $package
"mac")
brew install $package
;;
esac
else
echo $package 'already installed!'
fi
done
}
echo "Updating the repositories..."
echo "(you'll probably need to input your 'sudo' password here)"
case $DISTRO in
"debian")
sudo apt update
sudo apt autoremove
sudo apt upgrade
;;
"arch")
sudo pacman -Syu
;;
"fedora")
sudo dnf update
sudo dnf upgrade
;;
"mac")
install
sudo brew update
;;
esac
echo ""
echo "Making sure we've got the basics..."
case $DISTRO in
"debian")
install_if_needed git wget sqlite3
;;
"arch")
install_if_needed
;;
"mac")
install_if_needed
;;
"fedora")
install_if_needed
esac
echo ""
#
#
# echo 'ao install script to be run within clean Ubuntu 20.04.2.0 64 bit OS'
# echo 'Initializing package updates and upgrades'
#
# echo ''
# echo 'Execution initialization time'
# date
# echo ''
#
# sudo apt update -y
# sudo apt upgrade -y
#
# echo 'Installing apt build stuff'
# sudo apt install -y git wget tor sqlite3 zlib1g-dev libtool-bin autoconf autoconf-archive automake autotools-dev \
# libgmp-dev libsqlite3-dev python python3 python3-mako libsodium-dev build-essential pkg-config libev-dev \
# libcurl4-gnutls-dev libssl-dev fakeroot devscripts
#
# echo 'Installing node'
# wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
# source ~/.bashrc
# nvm install 16
# source ~/.bashrc
#
# echo 'Installing bitcoind'
#
# export ARCHY=$(uname -m)
# if [ $ARCHY == 'x86_64' ]
# then
# wget https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-x86_64-linux-gnu.tar.gz
# tar xf bitcoin-22.0-x86_64-linux-gnu.tar.gz
# fi
# if [ $ARCHY == 'armv7l' ]
# then
# wget https://bitcoincore.org/bin/bitcoin-core-22.0/bitcoin-22.0-arm-linux-gnueabihf.tar.gz
# tar xf bitcoin-22.0-arm-linux-gnueabihf.tar.gz
# fi
# sudo cp bitcoin-22.0/bin/* /usr/local/bin/
#
# echo 'Installing lightningd'
# git clone https://github.com/ElementsProject/lightning.git lightning
# cd lightning
# git checkout v0.10.2
# ./configure
# sudo make
# sudo make install
# cd ..
#
# echo 'Installing clboss'
# git clone https://github.com/ZmnSCPxj/clboss.git clboss
# cd clboss
# git checkout 0.11B
# mkdir m4
# autoreconf -i
# ./configure
# make
# sudo make install
# cd ..
#
# # echo ' '
# # echo 'Installing ao-3'
# # git clone 'https://github.com/AutonomousOrganization/ao-3.git' ao-3
# # cd ao-3
# # npm install
# # npm run build
# # npm run checkconfig
#
# echo ' '
# echo ' '
# echo '*********************************************************'
# echo 'Version Information'
# echo '*********************************************************'
#
# echo ' '
# echo 'make Version'
# echo '*********************************************************'
# make --version
#
# echo ' '
# echo 'node Version'
# echo '*********************************************************'
# node --version
#
# echo ' '
# echo 'sqlite3 Version'
# echo '*********************************************************'
# sqlite3 --version
#
# echo ' '
# echo 'tor Version'
# echo '*********************************************************'
# tor --version
#
# echo ' '
# echo 'bitcoind Version'
# echo '*********************************************************'
# bitcoind --version
#
# echo ' '
# echo 'lightningd Version'
# echo '*********************************************************'
# lightningd --version
#
# echo ' '
# echo 'clboss Version'
# echo '*********************************************************'
# clboss --version
#
# echo ''
# echo 'Execution completion'
# date
# echo ''
#
# echo 'Lightning Node Installed Start via two terminals: '
# echo ' bitcoind'
# echo ' lightningd'
# echo 'Can Proceed to AO-3 setup: '
# echo ' git clone https://github.com/AutonomousOrganization/ao-3'
# echo ' cd ao-3'
# echo ' npm install'
# echo ' npm run checkconfig'
# echo ' npm build'
# echo ' npm start'

66
scripts/get-image.sh

@ -2,16 +2,59 @@
# Script for automatically downloading and checking the sha256sum of a RPi image
# Variables
DOWNLOAD_LINK=https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64-lite.zip
IMAGE=2021-10-30-raspios-bullseye-arm64-lite.zip
# Font decoration for better a e s t h e t i c
RED="\e[0;91m"
GREEN="\e[0;92m"
BLUE="\e[0;94m"
BOLD="\e[1m"
ULINE="\e[4m"
RESET="\e[0m"
# Links
RASPBIAN_DOWNLOAD_LINK=https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64-lite.zip
RASPBIAN_IMAGE=2021-10-30-raspios-bullseye-arm64-lite.zip
MANJARO_DOWNLOAD_LINK=https://download.manjaro.org/kde/21.2.1/manjaro-kde-21.2.1-220103-linux515.iso
MANJARO_IMAGE=manjaro-kde-21.2.1-220103-linux515.iso
echo -e "${BOLD}Ah, I see you're looking to download an image!${RESET}"
echo ""
echo -e "${ULINE}Which one?${RESET}"
echo -e "${BOLD}1. ${RESET} Raspbian (arm64 image)"
echo -e "${BOLD}2. ${RESET} Manjaro (x86_64 image)"
echo ""
IMAGE=
while [ -z $IMAGE ]; do
read -p "enter a number (c to cancel): " -n1 img
echo ''
case $img in
'c')
exit 1
;;
1)
echo "Raspbian selected!"
DOWNLOAD_LINK=$RASPBIAN_DOWNLOAD_LINK
IMAGE=$RASPBIAN_IMAGE
;;
2)
echo "Manjaro selected!"
DOWNLOAD_LINK=$MANJARO_DOWNLOAD_LINK
IMAGE=$MANJARO_IMAGE
;;
*)
echo "wait that doesn't make sense, try again"
;;
esac
done
mkdir -p images
if [[ -e images/$IMAGE ]]; then
echo "Image has already been downloaded."
else
echo "Downloading Raspberry Pi OS for arm64 architecture"
echo "Downloading $IMAGE to images/ folder"
curl -o images/$IMAGE $DOWNLOAD_LINK
fi
@ -30,18 +73,3 @@ fi
rm *.sha256
cd ..
#ifeq ($(WRITABLE_BLOCK),)
## NOTE: This is not fully functional yet, not sure why
#@read -p "Remove your flash drive, and press enter to continue"
#@lsblk -pdo NAME,TRAN > current-blocks
#@read -p "Insert your writeable drive, and press enter to continue"
#@lsblk -pdo NAME,TRAN | diff current-blocks - | grep usb | awk '{print $$2}' > block.txt
#@export BLOCK=`cat block.txt`
#$(error No USB detected, wait a moment after plugging in and try again)
#else
# @read -p "the memory block to be modified is $(WRITABLE_BLOCK), ensure this is the drive you wish to write to and press enter to continue"
# @unzip -p $(IMAGE) | sudo dd of=$(WRITABLE_BLOCK) bs=4M conv=fsync status=progress
# @rm block.txt current-blocks
# endif

463
scripts/nvm_install.sh

@ -0,0 +1,463 @@
#!/usr/bin/env bash
{ # this ensures the entire script is downloaded #
nvm_has() {
type "$1" > /dev/null 2>&1
}
nvm_echo() {
command printf %s\\n "$*" 2>/dev/null
}
nvm_grep() {
GREP_OPTIONS='' command grep "$@"
}
nvm_default_install_dir() {
[ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm"
}
nvm_install_dir() {
if [ -n "$NVM_DIR" ]; then
printf %s "${NVM_DIR}"
else
nvm_default_install_dir
fi
}
nvm_latest_version() {
nvm_echo "v0.39.1"
}
nvm_profile_is_bash_or_zsh() {
local TEST_PROFILE
TEST_PROFILE="${1-}"
case "${TEST_PROFILE-}" in
*"/.bashrc" | *"/.bash_profile" | *"/.zshrc")
return
;;
*)
return 1
;;
esac
}
#
# Outputs the location to NVM depending on:
# * The availability of $NVM_SOURCE
# * The method used ("script" or "git" in the script, defaults to "git")
# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
#
nvm_source() {
local NVM_GITHUB_REPO
NVM_GITHUB_REPO="${NVM_INSTALL_GITHUB_REPO:-nvm-sh/nvm}"
local NVM_VERSION
NVM_VERSION="${NVM_INSTALL_VERSION:-$(nvm_latest_version)}"
local NVM_METHOD
NVM_METHOD="$1"
local NVM_SOURCE_URL
NVM_SOURCE_URL="$NVM_SOURCE"
if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/nvm-exec"
elif [ "_$NVM_METHOD" = "_script-nvm-bash-completion" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/bash_completion"
elif [ -z "$NVM_SOURCE_URL" ]; then
if [ "_$NVM_METHOD" = "_script" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/${NVM_GITHUB_REPO}/${NVM_VERSION}/nvm.sh"
elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then
NVM_SOURCE_URL="https://github.com/${NVM_GITHUB_REPO}.git"
else
nvm_echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD"
return 1
fi
fi
nvm_echo "$NVM_SOURCE_URL"
}
#
# Node.js version to install
#
nvm_node_version() {
nvm_echo "$NODE_VERSION"
}
nvm_download() {
if nvm_has "curl"; then
curl --fail --compressed -q "$@"
elif nvm_has "wget"; then
# Emulate curl with wget
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
-e 's/--compressed //' \
-e 's/--fail //' \
-e 's/-L //' \
-e 's/-I /--server-response /' \
-e 's/-s /-q /' \
-e 's/-sS /-nv /' \
-e 's/-o /-O /' \
-e 's/-C - /-c /')
# shellcheck disable=SC2086
eval wget $ARGS
fi
}
install_nvm_from_git() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
local NVM_VERSION
NVM_VERSION="${NVM_INSTALL_VERSION:-$(nvm_latest_version)}"
if [ -n "${NVM_INSTALL_VERSION:-}" ]; then
# Check if version is an existing ref
if command git ls-remote "$(nvm_source "git")" "$NVM_VERSION" | nvm_grep -q "$NVM_VERSION" ; then
:
# Check if version is an existing changeset
elif ! nvm_download -o /dev/null "$(nvm_source "script-nvm-exec")"; then
nvm_echo >&2 "Failed to find '$NVM_VERSION' version."
exit 1
fi
fi
local fetch_error
if [ -d "$INSTALL_DIR/.git" ]; then
# Updating repo
nvm_echo "=> nvm is already installed in $INSTALL_DIR, trying to update using git"
command printf '\r=> '
fetch_error="Failed to update nvm with $NVM_VERSION, run 'git fetch' in $INSTALL_DIR yourself."
else
fetch_error="Failed to fetch origin with $NVM_VERSION. Please report this!"
nvm_echo "=> Downloading nvm from git to '$INSTALL_DIR'"
command printf '\r=> '
mkdir -p "${INSTALL_DIR}"
if [ "$(ls -A "${INSTALL_DIR}")" ]; then
# Initializing repo
command git init "${INSTALL_DIR}" || {
nvm_echo >&2 'Failed to initialize nvm repo. Please report this!'
exit 2
}
command git --git-dir="${INSTALL_DIR}/.git" remote add origin "$(nvm_source)" 2> /dev/null \
|| command git --git-dir="${INSTALL_DIR}/.git" remote set-url origin "$(nvm_source)" || {
nvm_echo >&2 'Failed to add remote "origin" (or set the URL). Please report this!'
exit 2
}
else
# Cloning repo
command git clone "$(nvm_source)" --depth=1 "${INSTALL_DIR}" || {
nvm_echo >&2 'Failed to clone nvm repo. Please report this!'
exit 2
}
fi
fi
# Try to fetch tag
if command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin tag "$NVM_VERSION" --depth=1 2>/dev/null; then
:
# Fetch given version
elif ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin "$NVM_VERSION" --depth=1; then
nvm_echo >&2 "$fetch_error"
exit 1
fi
command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet FETCH_HEAD || {
nvm_echo >&2 "Failed to checkout the given version $NVM_VERSION. Please report this!"
exit 2
}
if [ -n "$(command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" show-ref refs/heads/master)" ]; then
if command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet 2>/dev/null; then
command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet -D master >/dev/null 2>&1
else
nvm_echo >&2 "Your version of git is out of date. Please update it!"
command git --no-pager --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch -D master >/dev/null 2>&1
fi
fi
nvm_echo "=> Compressing and cleaning up git repository"
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" reflog expire --expire=now --all; then
nvm_echo >&2 "Your version of git is out of date. Please update it!"
fi
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" gc --auto --aggressive --prune=now ; then
nvm_echo >&2 "Your version of git is out of date. Please update it!"
fi
return
}
#
# Automatically install Node.js
#
nvm_install_node() {
local NODE_VERSION_LOCAL
NODE_VERSION_LOCAL="$(nvm_node_version)"
if [ -z "$NODE_VERSION_LOCAL" ]; then
return 0
fi
nvm_echo "=> Installing Node.js version $NODE_VERSION_LOCAL"
nvm install "$NODE_VERSION_LOCAL"
local CURRENT_NVM_NODE
CURRENT_NVM_NODE="$(nvm_version current)"
if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
nvm_echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
else
nvm_echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
fi
}
install_nvm_as_script() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
local NVM_SOURCE_LOCAL
NVM_SOURCE_LOCAL="$(nvm_source script)"
local NVM_EXEC_SOURCE
NVM_EXEC_SOURCE="$(nvm_source script-nvm-exec)"
local NVM_BASH_COMPLETION_SOURCE
NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
# Downloading to $INSTALL_DIR
mkdir -p "$INSTALL_DIR"
if [ -f "$INSTALL_DIR/nvm.sh" ]; then
nvm_echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
else
nvm_echo "=> Downloading nvm as script to '$INSTALL_DIR'"
fi
nvm_download -s "$NVM_SOURCE_LOCAL" -o "$INSTALL_DIR/nvm.sh" || {
nvm_echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'"
return 1
} &
nvm_download -s "$NVM_EXEC_SOURCE" -o "$INSTALL_DIR/nvm-exec" || {
nvm_echo >&2 "Failed to download '$NVM_EXEC_SOURCE'"
return 2
} &
nvm_download -s "$NVM_BASH_COMPLETION_SOURCE" -o "$INSTALL_DIR/bash_completion" || {
nvm_echo >&2 "Failed to download '$NVM_BASH_COMPLETION_SOURCE'"
return 2
} &
for job in $(jobs -p | command sort)
do
wait "$job" || return $?
done
chmod a+x "$INSTALL_DIR/nvm-exec" || {
nvm_echo >&2 "Failed to mark '$INSTALL_DIR/nvm-exec' as executable"
return 3
}
}
nvm_try_profile() {
if [ -z "${1-}" ] || [ ! -f "${1}" ]; then
return 1
fi
nvm_echo "${1}"
}
#
# Detect profile file if not specified as environment variable
# (eg: PROFILE=~/.myprofile)
# The echo'ed path is guaranteed to be an existing file
# Otherwise, an empty string is returned
#
nvm_detect_profile() {
if [ "${PROFILE-}" = '/dev/null' ]; then
# the user has specifically requested NOT to have nvm touch their profile
return
fi
if [ -n "${PROFILE}" ] && [ -f "${PROFILE}" ]; then
nvm_echo "${PROFILE}"
return
fi
local DETECTED_PROFILE
DETECTED_PROFILE=''
if [ "${SHELL#*bash}" != "$SHELL" ]; then
if [ -f "$HOME/.bashrc" ]; then
DETECTED_PROFILE="$HOME/.bashrc"
elif [ -f "$HOME/.bash_profile" ]; then
DETECTED_PROFILE="$HOME/.bash_profile"
fi
elif [ "${SHELL#*zsh}" != "$SHELL" ]; then
if [ -f "$HOME/.zshrc" ]; then
DETECTED_PROFILE="$HOME/.zshrc"
fi
fi
if [ -z "$DETECTED_PROFILE" ]; then
for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zshrc"
do
if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
break
fi
done
fi
if [ -n "$DETECTED_PROFILE" ]; then
nvm_echo "$DETECTED_PROFILE"
fi
}
#
# Check whether the user has any globally-installed npm modules in their system
# Node, and warn them if so.
#
nvm_check_global_modules() {
local NPM_COMMAND
NPM_COMMAND="$(command -v npm 2>/dev/null)" || return 0
[ -n "${NVM_DIR}" ] && [ -z "${NPM_COMMAND%%"$NVM_DIR"/*}" ] && return 0
local NPM_VERSION
NPM_VERSION="$(npm --version)"
NPM_VERSION="${NPM_VERSION:--1}"
[ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0
local NPM_GLOBAL_MODULES
NPM_GLOBAL_MODULES="$(
npm list -g --depth=0 |
command sed -e '/ npm@/d' -e '/ (empty)$/d'
)"
local MODULE_COUNT
MODULE_COUNT="$(
command printf %s\\n "$NPM_GLOBAL_MODULES" |
command sed -ne '1!p' | # Remove the first line
wc -l | command tr -d ' ' # Count entries
)"
if [ "${MODULE_COUNT}" != '0' ]; then
# shellcheck disable=SC2016
nvm_echo '=> You currently have modules installed globally with `npm`. These will no'
# shellcheck disable=SC2016
nvm_echo '=> longer be linked to the active version of Node when you install a new node'
# shellcheck disable=SC2016
nvm_echo '=> with `nvm`; and they may (depending on how you construct your `$PATH`)'
# shellcheck disable=SC2016
nvm_echo '=> override the binaries of modules installed with `nvm`:'
nvm_echo
command printf %s\\n "$NPM_GLOBAL_MODULES"
nvm_echo '=> If you wish to uninstall them at a later point (or re-install them under your'
# shellcheck disable=SC2016
nvm_echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
nvm_echo
nvm_echo ' $ nvm use system'
nvm_echo ' $ npm uninstall -g a_module'
nvm_echo
fi
}
nvm_do_install() {
if [ -n "${NVM_DIR-}" ] && ! [ -d "${NVM_DIR}" ]; then
if [ -e "${NVM_DIR}" ]; then
nvm_echo >&2 "File \"${NVM_DIR}\" has the same name as installation directory."
exit 1
fi
if [ "${NVM_DIR}" = "$(nvm_default_install_dir)" ]; then
mkdir "${NVM_DIR}"
else
nvm_echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
exit 1
fi
fi
if [ -z "${METHOD}" ]; then
# Autodetect install method
if nvm_has git; then
install_nvm_from_git
elif nvm_has curl || nvm_has wget; then
install_nvm_as_script
else
nvm_echo >&2 'You need git, curl, or wget to install nvm'
exit 1
fi
elif [ "${METHOD}" = 'git' ]; then
if ! nvm_has git; then
nvm_echo >&2 "You need git to install nvm"
exit 1
fi
install_nvm_from_git
elif [ "${METHOD}" = 'script' ]; then
if ! nvm_has curl && ! nvm_has wget; then
nvm_echo >&2 "You need curl or wget to install nvm"
exit 1
fi
install_nvm_as_script
else
nvm_echo >&2 "The environment variable \$METHOD is set to \"${METHOD}\", which is not recognized as a valid installation method."
exit 1
fi
nvm_echo
local NVM_PROFILE
NVM_PROFILE="$(nvm_detect_profile)"
local PROFILE_INSTALL_DIR
PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")"
SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\" # This loads nvm\\n"
# shellcheck disable=SC2016
COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
BASH_OR_ZSH=false
if [ -z "${NVM_PROFILE-}" ] ; then
local TRIED_PROFILE
if [ -n "${PROFILE}" ]; then
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
fi
nvm_echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
nvm_echo "=> Create one of them and run this script again"
nvm_echo " OR"
nvm_echo "=> Append the following lines to the correct file yourself:"
command printf "${SOURCE_STR}"
nvm_echo
else
if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
BASH_OR_ZSH=true
fi
if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
nvm_echo "=> Appending nvm source string to $NVM_PROFILE"
command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
else
nvm_echo "=> nvm source string already in ${NVM_PROFILE}"
fi
# shellcheck disable=SC2016
if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
nvm_echo "=> Appending bash_completion source string to $NVM_PROFILE"
command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
else
nvm_echo "=> bash_completion source string already in ${NVM_PROFILE}"
fi
fi
if ${BASH_OR_ZSH} && [ -z "${NVM_PROFILE-}" ] ; then
nvm_echo "=> Please also append the following lines to the if you are using bash/zsh shell:"
command printf "${COMPLETION_STR}"
fi
# Source nvm
# shellcheck source=/dev/null
\. "$(nvm_install_dir)/nvm.sh"
nvm_check_global_modules
nvm_install_node
nvm_reset
nvm_echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
command printf "${SOURCE_STR}"
if ${BASH_OR_ZSH} ; then
command printf "${COMPLETION_STR}"
fi
}
#
# Unsets the various functions defined
# during the execution of the install script
#
nvm_reset() {
unset -f nvm_has nvm_install_dir nvm_latest_version nvm_profile_is_bash_or_zsh \
nvm_source nvm_node_version nvm_download install_nvm_from_git nvm_install_node \
install_nvm_as_script nvm_try_profile nvm_detect_profile nvm_check_global_modules \
nvm_do_install nvm_reset nvm_default_install_dir nvm_grep
}
[ "_$NVM_ENV" = "_testing" ] || nvm_do_install
} # this ensures the entire script is downloaded #

12
scripts/write-image.sh

@ -75,7 +75,19 @@ echo ""
echo -e "Getting ready to write ${GREEN}$image${NC} to ${BLUE}$target${NC}"
echo ""
read -p "Press Enter to continue (ctrl+C to cancel):"
case $image in
*.iso)
sudo dd if=images/$image of=$target bs=4M conv=fsync status=progress
;;
*.zip)
unzip -p "images/$image" | sudo dd of=$target bs=4M conv=fsync status=progress
;;
*)
echo "I don't know what to do with this file extension, sorry!"
exit
;;
esac
# Leaving this line in if I want to debug and not necessarily run dd all the time
# echo "unzip -p \"images/$image\" | sudo dd of=$target bs=4M conv=fsync status=progress"

Loading…
Cancel
Save