raspap-webgui-mirror/installers/raspbian.sh

307 lines
10 KiB
Bash
Raw Normal View History

2023-08-23 18:01:34 +00:00
#!/bin/bash
#
2023-11-15 19:27:14 +00:00
# RaspAP Quick Installer - Installs and updates RaspAP
2020-03-23 09:31:18 +00:00
# Author: @billz <billzimmerman@gmail.com>
2023-11-15 19:27:14 +00:00
# Author URI: https://github.com/billz
# Project URI: https://github.com/RaspAP/
2020-03-23 09:31:18 +00:00
# License: GNU General Public License v3.0
2023-11-15 19:27:14 +00:00
# License URI: https://github.com/RaspAP/raspap-webgui/blob/master/LICENSE
#
2023-11-03 08:48:48 +00:00
# Usage: raspbian.sh [options]
#
2023-11-15 19:27:14 +00:00
# See below for options and usage examples.
#
2023-11-16 17:32:04 +00:00
# GNU GENERAL PUBLIC LICENSE
# This program is free software: you may copy, redistribute and/or modify
2023-11-15 19:27:14 +00:00
# it under the terms of the GNU General Public License as published by
2023-11-16 17:32:04 +00:00
# the Free Software Foundation, under version 3 of the License. You are not
2023-11-15 19:27:14 +00:00
# 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.
2019-12-09 12:07:57 +00:00
#
# NOTE
2020-01-15 17:47:09 +00:00
# Depending on options passed to the installer, ONE of the following
# additional shell scripts will be downloaded and sourced:
#
2021-02-03 09:07:15 +00:00
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/common.sh
2020-01-15 17:47:09 +00:00
# - or -
2021-02-03 09:07:15 +00:00
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/mkcert.sh
2022-06-08 16:16:56 +00:00
# - or -
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/minwrite.sh
# - or -
2022-06-08 16:16:56 +00:00
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/uninstall.sh
2023-11-15 18:13:56 +00:00
function _usage() {
cat << EOF
2023-11-15 19:27:14 +00:00
Usage: raspbian.sh [options]
2023-11-15 18:13:56 +00:00
Installs an instance of RaspAP or a helper component.
OPTIONS:
-y, --yes, --assume-yes Assumes "yes" as an answer to all prompts
-c, --cert, --certificate Installs an SSL certificate for lighttpd
-o, --openvpn <flag> Used with -y, --yes, sets OpenVPN install option (0=no install)
-a, --adblock <flag> Used with -y, --yes, sets Adblock install option (0=no install)
-w, --wireguard <flag> Used with -y, --yes, sets WireGuard install option (0=no install)
-r, --repo, --repository <name> Overrides the default GitHub repo (RaspAP/raspap-webgui)
-b, --branch <name> Overrides the default git branch (latest release)
-t, --token <accesstoken> Specify a GitHub token to access a private repository
-n, --name <username> Specify a GitHub username to access a private repository
-u, --upgrade Upgrades an existing installation to the latest release version
-d, --update Updates an existing installation to the latest release version
-p, --path <path> Used with -d, --update, sets the existing install path
2023-11-15 18:13:56 +00:00
-i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders)
-m, --minwrite Configures a microSD card for minimum write operation
-v, --version Outputs release info and exits
-n, --uninstall Loads and executes the uninstaller
-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:
2023-11-15 19:27:14 +00:00
curl -sL https://install.raspap.com | bash -s -- --yes --wireguard 1 --adblock 0
2023-11-15 18:13:56 +00:00
Invoke remotely, uprgrade an existing install to the Insiders Edition:
2023-11-15 19:27:14 +00:00
curl -sL https://install.raspap.com | bash -s -- --upgrade --insiders --name <name> --token <token>
Invoke remotely, perform an unattended update to the latest release version:
curl -sL https://install.raspap.com | bash -s -- --yes --update --path /var/www/html
2023-11-15 18:13:56 +00:00
EOF
exit
}
set -eo pipefail
2020-12-15 15:04:55 +00:00
function _main() {
# set defaults
repo="RaspAP/raspap-webgui" # override with -r, --repo option
2021-04-07 06:17:05 +00:00
repo_common="$repo"
_parse_params "$@"
_setup_colors
_log_output
_load_installer
2020-12-15 15:04:55 +00:00
}
2019-11-07 08:44:13 +00:00
2020-12-15 15:04:55 +00:00
function _parse_params() {
2021-03-10 06:27:29 +00:00
# default option values
2020-12-15 15:04:55 +00:00
assume_yes=0
upgrade=0
update=0
2020-12-15 15:04:55 +00:00
ovpn_option=1
adblock_option=1
2023-11-03 08:48:48 +00:00
wg_option=1
insiders=0
minwrite=0
acctoken=""
path=""
2020-12-15 15:04:55 +00:00
while :; do
case "${1-}" in
2020-12-15 15:04:55 +00:00
-y|--yes|--assume-yes)
assume_yes=1
apt_option="-y"
;;
-o|--openvpn)
ovpn_option="$2"
shift
;;
-a|--adblock)
adblock_option="$2"
shift
;;
2023-11-03 08:48:48 +00:00
-w|--wireguard)
wg_option="$2"
shift
;;
2020-12-15 15:04:55 +00:00
-c|--cert|--certificate)
install_cert=1
;;
-r|--repo|--repository)
repo="$2"
2021-04-07 06:17:05 +00:00
repo_common="$repo"
2020-12-15 15:04:55 +00:00
shift
;;
-b|--branch)
branch="$2"
shift
;;
-h|--help)
_usage
;;
-u|--upgrade)
upgrade=1
;;
2021-02-22 16:08:24 +00:00
-i|--insiders)
2023-04-06 12:38:23 +00:00
insiders=1
;;
-m|--minwrite)
minwrite=1
;;
-t|--token)
acctoken="$2"
2021-03-14 17:03:11 +00:00
shift
2021-02-22 16:08:24 +00:00
;;
-n|--name)
username="$2"
shift
;;
-d|--update)
update=1
;;
-p|--path)
path="$2"
shift
;;
2020-12-15 15:04:55 +00:00
-v|--version)
_version
;;
2022-06-08 16:16:56 +00:00
-n|--uninstall)
uninstall=1
;;
2020-12-15 15:04:55 +00:00
-*|--*)
echo "Unknown option: $1"
_usage
exit 1
;;
*)
break
;;
esac
shift
2020-12-15 15:04:55 +00:00
done
}
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"
if [ -f "$LOGFILE_PATH/raspap_install.log" ]; then
sudo rm "$LOGFILE_PATH/raspap_install.log"
fi
exec > >(tee -i $LOGFILE_PATH/raspap_install.log)
exec 2>&1
}
2020-12-15 15:04:55 +00:00
function _version() {
_get_release
echo -e "RaspAP v${RASPAP_RELEASE} - Simple wireless AP setup & management for Debian-based devices"
2020-12-15 15:04:55 +00:00
exit
}
2019-11-07 08:44:13 +00:00
# Outputs a welcome message
2020-03-23 09:31:18 +00:00
function _display_welcome() {
echo -e "${ANSI_RASPBERRY}\n"
2019-11-07 08:44:13 +00:00
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"
2021-03-10 06:27:29 +00:00
echo -e " dP version ${RASPAP_RELEASE}"
echo -e "${ANSI_GREEN}"
echo -e "The Quick Installer will guide you through a few easy steps${ANSI_RESET}\n\n"
2019-11-07 08:44:13 +00:00
}
# Fetch latest release from GitHub or RaspAP Installer API
function _get_release() {
2021-03-27 13:11:44 +00:00
readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' )
if [ "$insiders" == 1 ]; then
2021-03-27 13:11:44 +00:00
repo="RaspAP/raspap-insiders"
2021-04-07 06:17:05 +00:00
repo_common="RaspAP/raspap-webgui"
2021-03-27 13:11:44 +00:00
readonly RASPAP_INSIDERS_LATEST=$(curl -s "https://api.raspap.com/repos/RaspAP/raspap-insiders/releases/latest/" | grep -Po '"tag_name": "\K.*?(?=")' )
readonly RASPAP_RELEASE="${RASPAP_INSIDERS_LATEST} Insiders"
2021-02-22 16:08:24 +00:00
else
2021-03-27 13:11:44 +00:00
readonly RASPAP_RELEASE="${RASPAP_LATEST}"
2021-02-22 16:08:24 +00:00
fi
}
2019-11-07 08:44:13 +00:00
# Outputs a RaspAP Install log line
2020-03-23 09:31:18 +00:00
function _install_log() {
echo -e "${ANSI_GREEN}RaspAP ${component}: $1${ANSI_RESET}"
2019-11-07 08:44:13 +00:00
}
2020-04-25 21:06:02 +00:00
# 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"
;;
3)
echo -e "[$ANSI_RASPBERRY ! important $ANSI_RESET] $2"
esac
2019-11-07 10:41:56 +00:00
}
2020-03-23 09:31:18 +00:00
function _update_system_packages() {
_install_log "Updating sources"
2020-12-15 15:04:55 +00:00
sudo apt-get update || _install_status 1 "Unable to update package list"
2016-06-16 10:03:29 +00:00
}
2019-12-09 12:07:57 +00:00
# Fetch required installer functions
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
2021-04-07 06:17:05 +00:00
UPDATE_URL="https://raw.githubusercontent.com/$repo_common/$branch/"
2022-06-08 16:16:56 +00:00
if [ "${install_cert:-}" = 1 ]; then
source="mkcert"
component="mkcert"
wget "${header[@]}" -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"
elif [ "${minwrite}" = 1 ]; then
source="minwrite"
component="Minwrite"
wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh
source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh
_install_minwrite || _install_status 1 "Unable to execute minimal write install"
2022-06-08 16:16:56 +00:00
elif [ "${uninstall}" = 1 ]; then
source="uninstall"
2023-04-06 12:38:23 +00:00
component="Uninstall"
2022-06-08 16:16:56 +00:00
wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh
source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh
_remove_raspap || _install_status 1 "Unable to uninstall RaspAP"
else
source="common"
component="Install"
2021-03-09 12:21:34 +00:00
wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh
source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh
if [ "$update" == 1 ]; then
_update_raspap || _install_status 1 "Unable to update RaspAP"
else
_install_raspap || _install_status 1 "Unable to install RaspAP"
fi
fi
}
_main "$@"