diff --git a/installers/raspbian.sh b/installers/raspbian.sh index 9118b022..24d8f665 100755 --- a/installers/raspbian.sh +++ b/installers/raspbian.sh @@ -2,29 +2,24 @@ # # RaspAP Quick Installer # Author: @billz +# Author URI: https://github.com/billz/ # License: GNU General Public License v3.0 +# License URI: https://github.com/billz/raspap-webgui/blob/master/LICENSE +# +# Usage: raspbian.sh options # # Installs an instance of RaspAP. # -# Available options: -# -y, --yes, --assume-yes -# Assume "yes" as answer to all prompts and run non-interactively -# -c, --cert, --certficate -# Installs mkcert and generates an SSL certificate for lighttpd -# -o, --openvpn -# Used with -y, --yes, sets OpenVPN install option (0=no install) -# -a, --adblock -# Used with -y, --yes, sets Adblock install option (0=no install) -# -r, --repo, --repository -# Overrides the default GitHub repo (billz/raspap-webgui) -# -b, --branch -# Overrides the default git branch (master) -# -h, --help -# Outputs usage notes and exits -# -u, --upgrade -# Upgrades an existing installation to the latest release version -# -v, --version -# Outputs release info and exits +# OPTIONS: +# -y, --yes, --assume-yes Assume "yes" as answer to all prompts and run non-interactively +# -c, --cert, --certficate Installs mkcert and generates an SSL certificate for lighttpd +# -o, --openvpn Used with -y, --yes, sets OpenVPN install option (0=no install) +# -a, --adblock Used with -y, --yes, sets Adblock install option (0=no install) +# -r, --repo, --repository Overrides the default GitHub repo (billz/raspap-webgui) +# -b, --branch Overrides the default git branch (master) +# -h, --help Outputs usage notes and exits +# -u, --upgrade Upgrades an existing installation to the latest release version +# -v, --version Outputs release info and exits # # Depending on options passed to the installer, ONE of the following # additional shell scripts will be downloaded and sourced: @@ -36,54 +31,19 @@ # You are not obligated to bundle the LICENSE file with your RaspAP projects as long # as you leave these references intact in the header comments of your source files. -# Fetch latest release from GitHub API -repo="billz/raspap-webgui" #override with -r, --repo option -readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' ) -branch="$RASPAP_LATEST" #override with -b, --branch option +set -eo pipefail +readonly PROGNAME=$(basename $0) -function _setup_colors() { - ANSI_RED="\033[0;31m" - ANSI_GREEN="\033[0;32m" - ANSI_YELLOW="\033[0;33m" - ANSI_RASPBERRY="\033[0;35m" - ANSI_ERROR="\033[1;37;41m" - ANSI_RESET="\033[m" -} +function _main() { + # set defaults + repo="billz/raspap-webgui" # override with -r, --repo option + branch="$RASPAP_LATEST" # override with -b, --branch option -function _log_output() { - readonly LOGFILE_PATH="/tmp" - exec > >(tee -i $LOGFILE_PATH/raspap_install.log) - exec 2>&1 -} - -function _usage() { - cat << EOF -Usage: $(basename "$0") [OPTION] - -Installs an instance of RaspAP. - -Available options: --y, --yes, --assume-yes - Assumes "yes" as an answer to all prompts --c, --cert, --certificate - Installs an SSL certificate for lighttpd --o, --openvpn - Used with -y, --yes, sets OpenVPN install option (0=no install) --a, --adblock - Used with -y, --yes, sets Adblock install option (0=no install) --r, --repo, --repository - Overrides the default GitHub repo (billz/raspap-webgui) --b, --branch - Overrides the default git branch (latest release) --h, --help - Outputs usage notes and exits --u, --upgrade - Upgrades an existing installation to the latest release version --v, --version - Outputs release info and exits - -EOF - exit + _parse_params "$@" + _get_release + _setup_colors + _log_output + _load_installer } function _parse_params() { @@ -94,7 +54,7 @@ function _parse_params() { adblock_option=1 while :; do - case ${1} in + case "${1-}" in -y|--yes|--assume-yes) assume_yes=1 apt_option="-y" @@ -140,16 +100,57 @@ function _parse_params() { done } -function _version() { - echo -e "RaspAP v${RASPAP_LATEST} - Simple AP setup & WiFi management for Debian-based devices" +function _setup_colors() { + ANSI_RED="\033[0;31m" + ANSI_GREEN="\033[0;32m" + ANSI_YELLOW="\033[0;33m" + ANSI_RASPBERRY="\033[0;35m" + ANSI_ERROR="\033[1;37;41m" + ANSI_RESET="\033[m" +} + +function _log_output() { + readonly LOGFILE_PATH="/tmp" + exec > >(tee -i $LOGFILE_PATH/raspap_install.log) + exec 2>&1 +} + +function _usage() { + cat << EOF +Usage: $PROGNAME options + +Installs an instance of RaspAP. + +OPTIONS: +-y, --yes, --assume-yes Assumes "yes" as an answer to all prompts +-c, --cert, --certificate Installs an SSL certificate for lighttpd +-o, --openvpn Used with -y, --yes, sets OpenVPN install option (0=no install) +-a, --adblock Used with -y, --yes, sets Adblock install option (0=no install) +-r, --repo, --repository Overrides the default GitHub repo (billz/raspap-webgui) +-b, --branch Overrides the default git branch (latest release) +-u, --upgrade Upgrades an existing installation to the latest release version +-v, --version Outputs release info and exits +-h, --help Outputs usage notes and exits + +Examples: + Run locally specifying GitHub repo and branch: + $PROGNAME --repo foo/bar --branch my/branch + + Run locally requesting release info: + $PROGNAME --version + + Invoke installer remotely, run non-interactively with option flags: + curl -sL https://install.raspap.com | bash -s -- --yes --openvpn 1 --adblock 0 + +EOF exit } -_parse_params "$@" -_setup_colors -_log_output - -UPDATE_URL="https://raw.githubusercontent.com/$repo/$branch/" +function _version() { + _get_release + echo -e "RaspAP v${RASPAP_LATEST} - Simple AP setup & WiFi management for Debian-based devices" + exit +} # Outputs a welcome message function _display_welcome() { @@ -166,6 +167,11 @@ function _display_welcome() { echo -e "The Quick Installer will guide you through a few easy steps${ANSI_RESET}\n\n" } +# Fetch latest release from GitHub API +function _get_release() { + readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' ) +} + # Outputs a RaspAP Install log line function _install_log() { echo -e "${ANSI_GREEN}RaspAP Install: $1${ANSI_RESET}" @@ -197,15 +203,20 @@ function _update_system_packages() { } # Fetch required installer functions -if [ "${install_cert:-}" = 1 ]; then - source="mkcert" - wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh - source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh - _install_certificate || _install_status 1 "Unable to install certificate" -else - source="common" - wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh - source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh - _install_raspap || _install_status 1 "Unable to install RaspAP" -fi +function _load_installer() { + UPDATE_URL="https://raw.githubusercontent.com/$repo/$branch/" + if [ "${install_cert:-}" = 1 ]; then + source="mkcert" + wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _install_certificate || _install_status 1 "Unable to install certificate" + else + source="common" + wget -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _install_raspap || _install_status 1 "Unable to install RaspAP" + fi +} + +_main "$@"