cf-node-bootstrap/extras/golang.install

228 lines
6.7 KiB
Text
Executable file

#/bin/bash
# golang Bootstrap installer script
# Bash expansions to get the name and location of this script when run
scriptname="${BASH_SOURCE[0]##*/}"
script_title="${grn}Go${blu}la${red}n${ylw}g${dfl}"
rundir="${BASH_SOURCE[0]%/*}"
sys_arch=$(uname -m)
req_go_ver="1.19"
golang_bashrc="# Golang system path setup
export PATH=\$PATH:/usr/local/go/bin
"
if [[ $OSTYPE == linux-gnu ]] ; then
sys_type="linux"
else
sys_type="$OSTYPE"
fi
# Source PRbL Functions locally or retrieve from online
if [ ! -z $prbl_functions ] ; then
source $prbl_functions
else
if [ -f ${rundir}/functions ] ; then
source ${rundir}/functions
else
# Iterate through get commands and fall back on next if unavailable
if command -v curl >/dev/null 2>&1; then
source <(curl -ks 'https://raw.githubusercontent.com/pyr0ball/PRbL/main/functions')
elif command -v wget >/dev/null 2>&1; then
source <(wget -qO- 'https://raw.githubusercontent.com/pyr0ball/PRbL/main/functions')
elif command -v fetch >/dev/null 2>&1; then
source <(fetch -qo- 'https://raw.githubusercontent.com/pyr0ball/PRbL/main/functions')
else
echo "Error: curl, wget, and fetch commands are not available. Please install one to retrieve PRbL functions."
exit 1
fi
fi
fi
logfile="${rundir}/${pretty_date}_${scriptname}.log"
installdir="$HOME/devl"
# Dependencies
sys_packages=(
cmake
libunwind-dev
libgtk3-dev
libgmp3-dev
)
pip_packages=()
repo_packages=()
codedog_bashrc="# Golang system path setup
export PATH=\"\$PATH:/usr/local/go/bin/\"
"
strip-html-tags() {
local input="$1"
local stripped=$(echo "$input" | sed 's/<[^>]*>//g' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
echo "$stripped"
}
# Functions
check-deps(){
# Iterate through the list of required packages and check if installed
for pkg in ${packages[@]} ; do
local _pkg=$(dpkg -l $pkg 2>&1 >/dev/null ; echo $?)
# If not installed, add it to the list of missing bins
if [[ $_pkg != 0 ]] ; then
bins_missing+=($pkg)
fi
done
# Count the number of entries in bins_missing
local _bins_missing=${#bins_missing[@]}
# If higher than 0, return a fail (1)
if [[ $_bins_missing != 0 ]] ; then
return 1
else
return 0
fi
}
check-go(){
if [[ -x /usr/bin/go ]] ; then
# TODO: Add version checking rather than just whether the binary is executible
#inst_go_ver=$(/usr/bin/go version | awl {'print $3'} | cut -c 3-)
#if [[ $(vercomp )]]
return 0
else
return 1
fi
}
install-deps(){
logger echo "Installing packages $sys_packages"
run "for $_package in $sys_packages ; do sudo apt-get install -y $_package ; done"
if [ -f ${rundir}/requirements.txt ] ; then
pip install -y ${rundir}/requirements.txt
else
if [ ! -z $pip_packages ] ; then
pip install -y ${pip_packages[@]}
fi
fi
# Sets dependency installed flag to true
depsinstalled=true
}
dry-run-report(){
box-rounded
boxborder "${grn}Dry-run Report:${dfl}"
box-norm
boxborder \
"bins_missing= " \
"${bins_missing[@]}" \
"backup_files= " \
"${backup_files[@]}" \
"installed_files= " \
"${installed_files[@]}" \
"installed_dirs= " \
"${installed_dirs[@]}"
}
install(){
if check-go ; then
boxline "golang already installed!"
return 0
fi
if ! check-deps ; then
warn "Some of the utilities needed by this script are missing"
boxlinelog "Missing utilities:"
boxlinelog "${bins_missing[@]}"
boxlinelog "Would you like to install them? (this will require root password)"
utilsmissing_menu=(
"$(boxline "${green_check} Yes")"
"$(boxline "${red_x} No")"
)
case `select_opt "${utilsmissing_menu[@]}"` in
0) boxlinelog "${grn}Installing dependencies...${dfl}"
install-deps
;;
1) warn "Dependent Utilities missing: $bins_missing" ;;
esac
fi
local _golang_html=$(/usr/bin/curl -ks "https://go.dev/dl/" | grep $sys_type | grep $sys_arch | grep $req_go_ver | head -n 1)
local golang_current=$(strip-html-tags "$_golang_html")
#golang_current=$(echo "$golang_current" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
export tmp_dir=`mktemp -d /tmp/selfextract.XXXXXX`
logger boxborder "Pulling golang v$req_go_ver for installation"
run wget "https://go.dev/dl/${golang_current}" -O $tmp_dir/$golang_current
run sudo rm -rf /usr/local/go
run sudo tar -C /usr/local -xzf $tmp_dir/$golang_current
if [ ! -f $HOME/.bashrc.d/11-golang.bashrc ] ; then
echo -e "$codedog_bashrc" >> $HOME/.bashrc.d/11-golang.bashrc && \
logger boxborder ".bashrc.d/11-golang.bashrc installed..."
fi
export PATH=$PATH:/usr/local/go/bin
if [ ! -x /usr/bin/go ] ; then
run sudo ln -s /usr/local/go/bin/go /usr/bin/go && \
logger boxborder "golang symlink created at /usr/bin/go"
fi
return 0
}
# Function for displaying the usage of this script
usage(){
boxborder \
"${lbl}Usage:${dfl}" \
"${lyl}./$scriptname ${bld}[args]${dfl}" \
"$(boxseparator)" \
"[args:]" \
" -i [--install]" \
" -d [--dependencies]" \
" -D [--dry-run]" \
" -r [--remove]" \
" -f [--force]" \
" -F [--force-remove]" \
" -u [--update]" \
" -h [--help]"
}
case $1 in
-i | --install)
install && success " [${script_title} ${lyl}Installed${dfl}]"
;;
-r | --remove)
remove && success " [${script_title} ${lyl}Removed${dfl}]"
;;
-d | --dependencies)
install-deps && success "${script_title} ${dfl} Dependencies installed!"
;;
-D | --dry-run)
export dry_run=true
install
dry-run-report
usage
unset dry_run
success "${script_title} ${lyl}Installer Dry-Run Complete!${dfl}"
;;
-u | --update)
export update_run=true
update && unset update_run && success " [${script_title} ${lyl}Updated${dfl}]"
;;
-f | --force)
remove-arbitrary
install && success " [${script_title} ${lyl}Installed${dfl}]"
;;
-F | --force-remove)
remove-arbitrary && success " [${script_title} ${lyl}Force-Removed${dfl}]"
;;
-h | --help)
usage
;;
*)
warn "Invalid argument $@"
usage
#exit 2
;;
esac
#------------------------------------------------------#
# Script begins here
#------------------------------------------------------#
#install