Last active
January 6, 2020 11:04
-
-
Save benpitman/773fe7fc24b9dd5d86ed6df5d6c86c5c to your computer and use it in GitHub Desktop.
Revisions
-
benpitman revised this gist
Jan 6, 2020 . No changes.There are no files selected for viewing
-
benpitman revised this gist
Jan 6, 2020 . 1 changed file with 36 additions and 21 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -81,11 +81,11 @@ updateStatus () case $statusCode in (0) { printf '\e[31mError:\e[0m %3s\n' $errorCode [[ -n "$error" ]] && printf '%s\n\n' "$error" || echo };; (1) { printf '\e[32m%-11s\e[0m\n' "Success" };; (2) { printf '\e[34m%s\e[0m\e[10D' "Downloading" @@ -121,9 +121,9 @@ installFromRepo () do showProgress "${packages[$packageIndex]}" $packageIndex $packageCount error=$( $_sudo yum -y install "${packages[$packageIndex]}" 2>&1 >/dev/null ) updateStatus $(( $? == 0 )) $? "$error" done } @@ -133,47 +133,61 @@ installFromGit () local -r -- repo="${1#*/}" local -r -- link="https://api.github.com/repos/${account}/${repo}/releases/latest" local -r -- tmpDir="/tmp/${account}_${repo}" local -r -- tmpFile="/dev/shm/dump_${RANDOM}.txt" local -- tarFile= local -- error= printf "\nInstalling from git...\n" showProgress "${account}/${repo}" if [[ ! -d "$tmpDir" ]]; then _foldersToRemove+=( "$tmpDir" ) mkdir "$tmpDir" 2>/dev/null fi cd "$tmpDir" updateStatus 2 error=$( wget -qO "$tmpFile" "$link" ) updateStatus $(( $? > 0 ? 0 : 3 )) $? "$error" (( $? )) || return 1 tarFile=$( grep -Pom1 '(?<=name": ").+?gz(?=")' "$tmpFile" ) error=$( grep -Pom1 '(?<=download_url": ").+?gz(?=")' "$tmpFile" | wget -i- -qO "$tarFile" 2>&1 >/dev/null) updateStatus $(( $? > 0 ? 0 : 3 )) $? "$error" (( $? )) || return 1 [[ -f "$tarFile" ]] && _filesToRemove+=( "$tarFile" ) error=$( tar xf "$tarFile" 2>&1 >/dev/null ) updateStatus $(( $? > 0 ? 0 : 4 )) $? "$error" (( $? )) || return 1 tarFile="${tarFile//.tar.gz/}" [[ -d "$tarFile" ]] && _foldersToRemove+=( "${tmpDir}/${tarFile}" ) cd "$tarFile" ./configure --prefix=/usr/local >/dev/null 2>&1 updateStatus $(( $? > 0 ? 0 : 5 )) $? (( $? )) || return 1 error=$( make 2>&1 >/dev/null ) updateStatus $(( $? > 0 ? 0 : 6 )) $? "$error" (( $? )) || return 1 error=$( $_sudo make install 2>&1 >/dev/null ) updateStatus $(( $? == 0 )) $? "$error" (( $? )) || return 1 } runInstall () { installFromRepo "gcc" "make" "libevent-devel" "ncurses-devel" installFromGit "tmux/tmux" (( $? )) && return 1 } if (( $EUID )) @@ -182,3 +196,4 @@ then fi runInstall cleanup -
benpitman created this gist
Jan 5, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,184 @@ #!/usr/bin/env bash declare -g -- _sudo= declare -ag -- _foldersToRemove=() declare -ag -- _filesToRemove=() trap cleanup SIGINT SIGTERM die () { (( $# )) && printf '\e[31mError: \e[0m%s\n' "$@" echo "Exiting ..." exit 1 } cleanup () { local -- fileToRemove= local -- folderToRemove= for fileToRemove in "${_filesToRemove[@]}"; do [[ -f "$fileToRemove" ]] && rm -f "$fileToRemove" done for folderToRemove in "${_foldersToRemove[@]}"; do [[ -d "$folderToRemove" ]] && rm -rf "$folderToRemove" done die } enableRoot () { local -- attempts=3 echo "The script requires sudo privileges to install applications" sudo -k while (( attempts-- )) && read -srp "> " -t 60 password 2>&1 do printf "checking ... " if echo "$password" | sudo -Sv 2>/dev/null then echo "Correct" _sudo="sudo" return fi echo "Incorrect password" done die "Sudo privileges not granted" } showProgress () { local -r -- maxWidth=$(( $( tput cols ) - 45 )) local -r -- index=${2:-0} local -r -- count=${3:-1} local -r -- percent=$(( (((200 * $index) / $count) % 2) + ((100 * $index) / $count) )) local -- lengthOver= local -- padding= local -- package="$1" lengthOver=$(( $maxWidth - ${#package} )) (( $lengthOver > 0 )) && package="${package:0:$lengthOver}" eval printf -v padding '%.s.' {2..$lengthOver} printf "Total: %3s%% | Package: %s %s | Status: Processing\e[10D" "$percent" "$package" "$padding" } updateStatus () { local -r -- statusCode=$1 local -r -- errorCode=$2 local -r -- errors="${3:-}" local -- status= case $statusCode in (0) { printf '\e[32m%-11s\e[0m\n' "Success" };; (1) { printf '\e[31mError:\e[0m %3s\n' $errorCode [[ -n "$error" ]] && printf '%s\n\n' "$error" };; (2) { printf '\e[34m%s\e[0m\e[10D' "Downloading" };; (3) { printf '\e[33m%-11s\e[0m\e[10D' "Extracting" };; (4) { printf '\e[33m%s\e[0m\e[10D' "Configuring" };; (5) { printf '\e[33m%-11s\e[0m\e[10D' "Making" };; (6) { printf '\e[34m%-11s\e[0m\e[10D' "Installing" };; esac return $statusCode } installFromRepo () { local -r -- packages=( "$@" ) local -r -- packageCount=$# local -- packageIndex=-1 local -- error= printf "\nInstalling from repo...\n" while (( ++packageIndex < $packageCount )) do showProgress "${packages[$packageIndex]}" $packageIndex $packageCount error=$( $_sudo apt-get -y install "${packages[$packageIndex]}" 2>&1 >/dev/null ) updateStatus $(( $? > 0 )) $? "$error" done } installFromGit () { local -r -- account="${1%/*}" local -r -- repo="${1#*/}" local -r -- link="https://api.github.com/repos/${account}/${repo}/releases/latest" local -r -- tmpDir="/tmp/${account}_${repo}" local -r -- tmpFile="${RANDOM}.tar.gz" local -- error= if [[ ! -d "$tmpDir" ]]; then _foldersToRemove+=( "$tmpDir" ) mkdir "$tmpDir" 2>/dev/null fi cd "$tmpDir" updateStatus 2 error=$( wget -qO- "$link" 2>&1 >/dev/null | grep -Pom1 '(?<=download_url": ").+?gz(?=")' | wget -iqO "$tmpFile" 2>&1 >/dev/null) updateStatus $(( $? > 0 ? 1 : 3 )) $? "$error" (( $? )) || return [[ -f "$tmpFile" ]] && _filesToRemove+=( "$tmpFile" ) error=$( tar xf "$tmpFile" 2>&1 >/dev/null ) updateStatus $(( $? > 0 ? 1 : 4 )) $? "$error" (( $? )) || return [[ -d "${tmpFile##.*}" ]] && _foldersToRemove+=( "${tmpDir}/${tmpFile##.*}" ) cd "${tmpFile##.*}" ./configure --prefix=/usr/local >/dev/null 2>&1 updateStatus $(( $? > 0 ? 1 : 5 )) $? (( $? )) || return error=$( make 2>&1 >/dev/null ) updateStatus $(( $? > 0 ? 1 : 6 )) $? "$error" (( $? )) || return error=$( $_sudo make install 2>&1 >/dev/null ) updateStatus $(( $? > 0 )) $? "$error" (( $? )) || return } runInstall () { installFromRepo "gcc" "make" "libevent-devel" "ncurses-devel" installFromGit "tmux/tmux" } if (( $EUID )) then enableRoot fi runInstall