-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathraspbian.sh
executable file
·275 lines (247 loc) · 9.16 KB
/
raspbian.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
#!/bin/bash
#
# RaspAP Quick Installer
# Author: @billz <[email protected]>
# Author URI: https://github.com/billz/
# License: GNU General Public License v3.0
# License URI: https://github.com/raspap/raspap-webgui/blob/master/LICENSE
#
# Usage: raspbian.sh options
#
# Installs an instance of RaspAP.
#
# 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 <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)
# -r, --repo, --repository <name> Overrides the default GitHub repo (RaspAP/raspap-webgui)
# -b, --branch <name> Overrides the default git branch (master)
# -t, --token <accesstoken> Specify a GitHub token to access a private repository
# -u, --upgrade Upgrades an existing installation to the latest release version
# -i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders)
# -v, --version Outputs release info and exits
# -n, --uninstall Loads and executes the uninstaller
# -h, --help Outputs usage notes 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/raspap/raspap-webgui/master/installers/common.sh
# - or -
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/mkcert.sh
# - or -
# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/uninstall.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 -eo pipefail
function _main() {
# set defaults
repo="RaspAP/raspap-webgui" # override with -r, --repo option
repo_common="$repo"
_parse_params "$@"
_setup_colors
_log_output
_load_installer
}
function _parse_params() {
# default option values
assume_yes=0
upgrade=0
ovpn_option=1
adblock_option=1
insiders=0
acctoken=""
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"
repo_common="$repo"
shift
;;
-b|--branch)
branch="$2"
shift
;;
-h|--help)
_usage
;;
-u|--upgrade)
upgrade=1
;;
-i|--insiders)
insiders=1
;;
-t|--token)
acctoken="$2"
shift
;;
-v|--version)
_version
;;
-n|--uninstall)
uninstall=1
;;
-*|--*)
echo "Unknown option: $1"
_usage
exit 1
;;
*)
break
;;
esac
shift
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"
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 <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)
-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
-u, --upgrade Upgrades an existing installation to the latest release version
-i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders)
-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:
curl -sL https://install.raspap.com | bash -s -- --yes --openvpn 1 --adblock 0
Invoke remotely, uprgrade an existing install to the Insiders Edition:
curl -sL https://install.raspap.com | bash -s -- --upgrade --insiders
EOF
exit
}
function _version() {
_get_release
echo -e "RaspAP v${RASPAP_RELEASE} - Simple wireless AP setup & management for Debian-based devices"
exit
}
# 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_RELEASE}"
echo -e "${ANSI_GREEN}"
echo -e "The Quick Installer will guide you through a few easy steps${ANSI_RESET}\n\n"
}
# Fetch latest release from GitHub or RaspAP Installer API
function _get_release() {
readonly RASPAP_LATEST=$(curl -s "https://api.github.com/repos/$repo/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")' )
if [ "$insiders" == 1 ]; then
repo="RaspAP/raspap-insiders"
repo_common="RaspAP/raspap-webgui"
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"
else
readonly RASPAP_RELEASE="${RASPAP_LATEST}"
fi
}
# 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_status 1 "Unable to update package list"
}
# 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
# add optional auth token header if defined with -t, --token option
header=()
if [[ ! -z "$acctoken" ]]; then
header=(--header "Authorization: token $acctoken")
fi
UPDATE_URL="https://raw.githubusercontent.com/$repo_common/$branch/"
header=()
if [[ ! -z "$acctoken" ]]; then
header=(--header "Authorization: token $acctoken")
fi
if [ "${install_cert:-}" = 1 ]; then
source="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 [ "${uninstall}" = 1 ]; then
source="uninstall"
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"
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_raspap || _install_status 1 "Unable to install RaspAP"
fi
}
_main "$@"