#!/bin/bash # # RaspAP Quick Installer # Author: @billz # License: GNU General Public License v3.0 # # Usage: # # -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: # # https://raw.githubusercontent.com/billz/raspap-webgui/master/installers/common.sh # - or - # https://raw.githubusercontent.com/billz/raspap-webgui/master/installers/mkcert.sh # # 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. # Set defaults repo="billz/raspap-webgui" branch="master" assume_yes=0 upgrade=0 ovpn_option=1 adblock_option=1 # Define colors readonly ANSI_RED="\033[0;31m" readonly ANSI_GREEN="\033[0;32m" readonly ANSI_YELLOW="\033[0;33m" readonly ANSI_RASPBERRY="\033[0;35m" readonly ANSI_ERROR="\033[1;37;41m" readonly ANSI_RESET="\033[m" # Fetch latest release from GitHub API readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' ) # Define usage notes usage=$(cat << EOF Usage: raspbian.sh [OPTION]\n -y, --yes, --assume-yes\n\tAssumes "yes" as an answer to all prompts -c, --cert, --certificate\n\tInstalls an SSL certificate for lighttpd -o, --openvpn \n\tUsed with -y, --yes, sets OpenVPN install option (0=no install) -a, --adblock \n\tUsed with -y, --yes, sets Adblock install option (0=no install) -r, --repo, --repository \n\tOverrides the default GitHub repo (billz/raspap-webgui) -b, --branch \n\tOverrides the default git branch (master) -h, --help\n\tOutputs usage notes and exits -u, --upgrade\n\tUpgrades an existing installation to the latest release version -v, --version\n\tOutputs release info and exits\n EOF ) # Parse command-line options while :; do case $1 in -y|--yes|--assume-yes) assume_yes=1 apt_option="-y" ;; -o|--openvpn) ovpn_option="$2" shift ;; -a|--adblock) adblock_option="$2" shift ;; -c|--cert|--certificate) install_cert=1 ;; -r|--repo|--repository) repo="$2" shift ;; -b|--branch) branch="$2" shift ;; -h|--help) printf "$usage" exit 1 ;; -u|--upgrade) upgrade=1 ;; -v|--version) printf "RaspAP v${RASPAP_LATEST} - Simple AP setup & WiFi management for Debian-based devices\n" exit 1 ;; -*|--*) echo "Unknown option: $1" printf "$usage" exit 1 ;; *) break ;; esac shift done UPDATE_URL="https://raw.githubusercontent.com/$repo/$branch/" # Outputs a welcome message function _display_welcome() { echo -e "${ANSI_RASPBERRY}\n" echo -e " 888888ba .d888888 888888ba" echo -e " 88 8b d8 88 88 8b" echo -e "a88aaaa8P' .d8888b. .d8888b. 88d888b. 88aaaaa88a a88aaaa8P" echo -e " 88 8b. 88 88 Y8ooooo. 88 88 88 88 88" echo -e " 88 88 88. .88 88 88. .88 88 88 88" echo -e " dP dP 88888P8 88888P 88Y888P 88 88 dP" echo -e " 88" echo -e " dP version ${RASPAP_LATEST}" echo -e "${ANSI_GREEN}" echo -e "The Quick Installer will guide you through a few easy steps${ANSI_RESET}\n\n" } # Outputs a RaspAP Install log line function _install_log() { echo -e "${ANSI_GREEN}RaspAP Install: $1${ANSI_RESET}" } # Outputs a RaspAP divider function _install_divider() { echo -e "\033[1;32m***************************************************************$*\033[m" } # Outputs a RaspAP status indicator function _install_status() { case $1 in 0) echo -e "[$ANSI_GREEN \U2713 ok $ANSI_RESET] $2" ;; 1) echo -e "[$ANSI_RED \U2718 error $ANSI_RESET] $ANSI_ERROR $2 $ANSI_RESET" ;; 2) echo -e "[$ANSI_YELLOW \U26A0 warning $ANSI_RESET] $2" ;; esac } function _update_system_packages() { _install_log "Updating sources" sudo apt-get update || _install_error "Unable to update package list" } # 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