#! /bin/bash # Bash installation script for UNIX systems only # Use it : curl -sSL https://raw.githubusercontent.com/sundowndev/phoneinfoga/master/support/scripts/install | bash OS="$(uname -s)_$(uname -m)" PHONEINFOGA_VERSION= AUTOMATIC= SKIP_CHECKSUM=1 CURL_INSTALLED=false WGET_INSTALLED=false choose_wget_or_curl() { which curl > /dev/null [ $? -eq 1 ] || CURL_INSTALLED=true if $CURL_INSTALLED; then PHONEINFOGA_VERSION=$(curl -s https://api.github.com/repos/sundowndev/phoneinfoga/releases/latest | grep tag_name | cut -d '"' -f 4) return fi which wget > /dev/null [ $? -eq 1 ] || WGET_INSTALLED=true if $WGET_INSTALLED; then PHONEINFOGA_VERSION=$(wget -q --output-document - https://api.github.com/repos/sundowndev/phoneinfoga/releases/latest | grep tag_name | cut -d '"' -f 4) return fi echo "Error: You need to have either curl or wget installed to be able to use this script" exit 1 } usage() { echo "PhoneInfoga Installer for version $PHONEINFOGA_VERSION" echo echo "DESCRIPTION: An installer script for downloading the latest release of PhoneInfoga. Without any arguments, $0 will detect your operating system and attempt to download the corresponding version of PhoneInfoga. Please submit an issue on GitHub if you encounter issues with this script." | fold -s echo echo "USAGE: $0 [flag...] (-h|-m|-s)" echo echo " -h | --help Print this message and exit" echo echo " -m | --manual Manually select version to download." echo " Useful when $0 is unable to detect" echo " your OS automatically" echo echo " -s | --skip-checksum [Not Reccomended] Skip checksum validation" echo " Only use this option if $0" echo " is failing due to missing software." echo } validate_OS_type() { if [[ -z "${OS}" ]]; then echo "ERROR: Unable to determine your system type." exit 1 fi } validate_supported_OS() { SUPPORTED_OS_TYPES=( "Darwin_arm64" "Darwin_x86_64" "Linux_arm64" "Linux_armv6" "Linux_armv7" "Linux_i386" "Linux_x86_64" "Windows_arm64" "Windows_armv6" "Windows_armv7" "Windows_i386" "Windows_x86_64" ) for OS_TYPE in "${SUPPORTED_OS_TYPES[@]}"; do if [[ "$OS_TYPE" == "$OS" ]]; then AUTOMATIC=0 return fi done echo "Error: $OS is not supported, installation will attempt to proceed manually." echo echo "Please check the releases page for a list of supported systems." echo "https://github.com/sundowndev/phoneinfoga/releases" echo echo "Read more at https://sundowndev.github.io/phoneinfoga/install/" echo AUTOMATIC=1 } validate_checksum() { echo "Validating checksum ..." if $CURL_INSTALLED; then curl --progress-bar -LOC - "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/phoneinfoga_checksums.txt" elif $WGET_INSTALLED; then wget --quiet --show-progress "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/phoneinfoga_checksums.txt" fi local SHA256SUM_INSTALLED=false which sha256sum > /dev/null [ $? -eq 1 ] || SHA256SUM_INSTALLED=true if $SHA256SUM_INSTALLED; then sha256sum --ignore-missing -c phoneinfoga_checksums.txt [ $? -eq 0 ] || exit 1 elif ! $SHA256SUM_INSTALLED; then shasum --ignore-missing -c phoneinfoga_checksums.txt [ $? -eq 0 ] || exit 1 fi rm phoneinfoga_checksums.txt } download_latest_release() { echo "Downloading PhoneInfoga Version $PHONEINFOGA_VERSION for $OS" if $CURL_INSTALLED; then curl --progress-bar -LOC - "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/phoneinfoga_$OS.tar.gz" elif $WGET_INSTALLED; then wget --quiet --show-progress "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/phoneinfoga_$OS.tar.gz" fi } manual_download_latest_release() { if $CURL_INSTALLED; then ASSETS=$(curl -s https://api.github.com/repos/sundowndev/phoneinfoga/releases/latest | jq --raw-output '.assets[] | .name' | grep --color=never .tar.gz) elif $WGET_INSTALLED; then ASSETS=$(wget -q --output-document - https://api.github.com/repos/sundowndev/phoneinfoga/releases/latest | jq --raw-output '.assets[] | .name' | grep --color=never .tar.gz) fi echo "Please select a version of PhoneInfoga to download." PS3="Enter a number: " select OPT in $ASSETS; do case $OPT in '') echo "Error: Invalid option, please enter a number from the list." ;; *) echo "Downloading $OPT version $PHONEINFOGA_VERSION" echo "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/$OPT" if $CURL_INSTALLED; then curl --progress-bar -LOC - "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/$OPT" elif $WGET_INSTALLED; then wget --quiet --show-progress "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/$OPT" fi break ;; esac done } unpack_and_cleanup() { local FILE FILE=$(find . -name "phoneinfoga_*.tar.gz") tar -xzf $FILE [ $? -eq 0 ] || exit 1 echo "Cleaning up ..." rm $FILE } main() { validate_OS_type validate_supported_OS choose_wget_or_curl if [[ -z "$1" ]]; then echo else while [[ "$1" == -* ]]; do case "$1" in -h | --help) usage exit 0 ;; -m | --manual) AUTOMATIC=1 ;; -s | --skip-checksum) SKIP_CHECKSUM=0 ;; *) echo echo "ERROR: Unrecognized command '$1', run '$0 --help' for help." exit 1 ;; esac shift done fi if [[ $AUTOMATIC == 0 ]]; then download_latest_release elif [[ $AUTOMATIC == 1 ]]; then manual_download_latest_release else echo "something bad happened" exit 1 fi if [[ $SKIP_CHECKSUM == 1 ]]; then validate_checksum elif [[ $SKIP_CHECKSUM == 0 ]]; then echo echo "WARNING: Skipping checksum validation. Please be sure to verify your download manually. You can find the checksum for your software version here:" | fold -s echo echo "https://github.com/sundowndev/phoneinfoga/releases/download/$PHONEINFOGA_VERSION/phoneinfoga_checksums.txt" fi unpack_and_cleanup echo echo "Installation completed successfully." echo "To check the version installed: ./phoneinfoga version" echo echo "Add it to your path by running" echo "'sudo mv ./phoneinfoga /usr/local/bin/phoneinfoga'" exit 0 } main "${@}"