From d7f5ee36e86e5bc126cf6cfffa8dc37155c40b8a Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 16 Dec 2020 10:01:11 +0000 Subject: [PATCH] Tidy install loader, usage notes readability + examples --- installers/common.sh | 46 ++++++----- installers/raspbian.sh | 184 ++++++++++++++++++++++------------------- 2 files changed, 124 insertions(+), 106 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index ce5adcb1..77392501 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -2,8 +2,10 @@ # # RaspAP installation functions # 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 + # 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. @@ -27,6 +29,27 @@ webroot_dir="/var/www/html" git_source_url="https://github.com/$repo" # $repo from install.raspap.com # NOTE: all the below functions are overloadable for system-specific installs +function _install_raspap() { + _display_welcome + _config_installation + _update_system_packages + _install_dependencies + _enable_php_lighttpd + _create_raspap_directories + _optimize_php + _check_for_old_configs + _download_latest_files + _change_file_ownership + _create_hostapd_scripts + _create_lighttpd_scripts + _move_config_file + _default_configuration + _configure_networking + _prompt_install_adblock + _prompt_install_openvpn + _patch_system_files + _install_complete +} # Prompts user to set installation options function _config_installation() { @@ -550,24 +573,3 @@ function _install_complete() { fi } -function _install_raspap() { - _display_welcome - _config_installation - _update_system_packages - _install_dependencies - _enable_php_lighttpd - _create_raspap_directories - _optimize_php - _check_for_old_configs - _download_latest_files - _change_file_ownership - _create_hostapd_scripts - _create_lighttpd_scripts - _move_config_file - _default_configuration - _configure_networking - _prompt_install_adblock - _prompt_install_openvpn - _patch_system_files - _install_complete -} diff --git a/installers/raspbian.sh b/installers/raspbian.sh index 9118b022..0cdf4514 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,16 @@ # 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 -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 -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 "$@" + _setup_colors + _log_output + _load_installer } function _parse_params() { @@ -94,7 +51,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 +97,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: raspbian.sh 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: + raspbian.sh --repo foo/bar --branch my/branch + + Run locally requesting release info: + raspbian.sh --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 +164,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 +200,28 @@ 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() { + # fetch latest release tag + _get_release + + # assign default branch if not defined with -b, --branch option + if [ -z ${branch} ]; then + branch=$RASPAP_LATEST + fi + + 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 "$@"