forked from iiab/iiab-factory
-
Notifications
You must be signed in to change notification settings - Fork 0
/
iiab-upgrade
executable file
·542 lines (491 loc) · 22.9 KB
/
iiab-upgrade
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
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
#!/bin/bash
# jvonau
set -e # Exit on error (avoids snowballing)
export DEBIAN_FRONTEND=noninteractive # Bypass (most!) interactive questions
SCRIPT=iiab-upgrade
RELEASE=5
CURR_VER="" # Ansible version you currently have installed
GOOD_VER="2.10.1" # Trigger point for anisble forced reinstall
BASEDIR=/opt/iiab
CONFDIR=/etc/iiab
FLAGDIR=$CONFDIR/install-flags
IIABENV=$CONFDIR/iiab.env
IIABSTATE=$CONFDIR/iiab_state.yml
APT_PATH=/usr/bin/apt # Avoids problematic /usr/local/bin/apt on Linux Mint
REINSTALL=""
INTERACTIVE=0
UPDATE=0
MASTER=1
TEST=jv
#IIABTEST=iiab-ng-7.2
IIABTEST=""
MIN_RPI_KERN=1336
SELFUPDATE_SCRIPT="/tmp/.updateScript.sh"
# scrape the command line
if [ "$1" = "--interactive" ]; then
shift 1
INTERACTIVE=1
fi
if [ "$1" = "--upgrade" ]; then
shift 1
rm $FLAGS/iiab*complete || true
UPDATE=1
# REINSTALL="--reinstall"
fi
if [ "$1" = "--reinstall" ]; then
rm $FLAGS/iiab*complete || true
REINSTALL="--reinstall"
fi
# Verify that Raspbian is running a recent enough kernel. As Raspbian
# kernel 1333 has wifi issues https://github.com/iiab/iiab/issues/2497.
check_kernel(){
CURR_KERN=`uname -v | awk '{print $1}' | sed -e s'/#//'`
echo "Found Kernel ""$CURR_KERN"
if version_gt $MIN_RPI_KERN $CURR_KERN; then
echo -e "\033[31;5mWARNING: Kernel ""$MIN_RPI_KERN"" or higher required with Raspbian.\033[0m"
echo -e "\033[31;5mPLEASE RUN 'sudo apt update' then 'sudo apt install raspberrypi-kernel' then reboot.\033[0m"
echo -e "\033[31;5mTHEN recheck the kernel version with iiab-upgrade --kernel-check \033[0m"
echo -e "\033[31;5mPlease check with developers before running the below command"
echo -e "\033[31;5mTHEN IF NEC run 'sudo rpi-update' to install a more recent kernel \033[0m"
fi
}
if [ "$1" = "--kernel-check" ]; then
check_kernel
exit 0
fi
# Everything else needs to be run as root
if [ $(id -u) -ne 0 ]; then
echo -e "$SCRIPT must be run as root. Try 'sudo $SCRIPT'\n"
exit 1
fi
# Subroutines for upgrade logic
check_branch(){
git -C $BASEDIR/iiab branch | grep \* | grep release-7 | wc -l
}
function use_master(){
cd $BASEDIR
if [ -d iiab ]; then
cd iiab
git checkout -b master &> /dev/null || true # covers older curls of release-7.0
git config branch.master.remote origin || true # covers older curls of release-7.0
git config branch.master.merge refs/heads/master || true # covers older curls of release-7.0
fi
cd $BASEDIR
if [ -d iiab-admin-console ]; then
cd iiab-admin-console
git checkout -b master &> /dev/null || true # covers older curls of release-7.0
git config branch.master.remote origin || true # covers older curls of release-7.0
git config branch.master.merge refs/heads/master || true # covers older curls of release-7.0
fi
}
function upgrade_source(){
# assumes working dir is /opt/iiab/iiab just after the git pull
echo -e "\n checking upgrade source"
if [ -f upgrade_roles ]; then
echo " IIAB playing nice"
NEWREV=$(grep iiab_revision vars/default_vars.yml | awk '{print $1}')
upg_path=""
else
echo " IIAB still not playing nice"
for REV in $(cat $BASEDIR/iiab-factory/upgrade_roles | awk '{print $1}'); do
NEWREV=$REV
done
upg_path=$BASEDIR/iiab-factory/
fi
}
function update_master(){
cd $BASEDIR
if [ -d iiab ]; then
cd iiab
echo -e "\nUpdating iiab"
git checkout master
git pull -q
if ! [ x$IIABTEST == "x" ]; then
git branch -D $IIABTEST || true
git checkout -b $IIABTEST
git pull -q https://github.com/jvonau/IIAB-NG.git $IIABTEST
fi
fi
cd $BASEDIR
if [ -d iiab-admin-console ]; then
echo -e "\nUpdating iiab-admin-console"
cd iiab-admin-console
git checkout master
git pull -q
fi
}
function check_revision(){
if [ -f $IIABENV ]; then
source $IIABENV
OLDREV=$IIAB_REVISION
upgrade_source
if [ $NEWREV -gt $OLDREV ] && [ $STAGE -eq 9 ]; then
echo -e "\nNEW IIAB Revison $NEWREV Found\n"
UPDATE=1
fi
fi
}
function update_self() {
echo " *** Performing self-update"
cd $BASEDIR
if [ -d iiab-factory ]; then
echo -e "\nUpdating iiab-factory"
cd iiab-factory
git checkout master
git pull -q
if [ $TEST == "jv" ]; then
git branch -D jv || true
git checkout -b jv
git pull -q https://github.com/jvonau/iiab-factory.git master
fi
NEW_VERSION=$(grep RELEASE $SCRIPT | awk -F = '{print $2}' | head -n 1)
cp $SCRIPT /usr/sbin/$SCRIPT
echo "Latest $SCRIPT now installed"
if [ $NEW_VERSION -gt $RELEASE ]; then
echo " *** Relaunching $SCRIPT after update"
cat > "$SELFUPDATE_SCRIPT" << EOF
#!/bin/bash
exec /usr/sbin/$SCRIPT
EOF
exec /bin/bash $SELFUPDATE_SCRIPT
else
echo "Latest $SCRIPT is already running skipping re-exec"
fi
fi
}
# Subroutine compares software version numbers. Generates rare false positives
# like "1.0 > 1" and "2.4.0 > 2.4". Avoid risks by structuring conditionals w/
# a consistent # of decimal points e.g. "if version_gt w.x.y.z a.b.c.d; then"
version_gt() { [ "$(printf '%s\n' "$@" | sort -V | head -1)" != "$1" ]; }
# A. Subroutine for B. and D. Returns true (0) if username ($1) exists with password ($2)
check_user_pwd() {
# $meth (hashing method) is typically '6' which implies 5000 rounds
# of SHA-512 per /etc/login.defs -> /etc/pam.d/common-password
meth=$(grep "^$1:" /etc/shadow | cut -d: -f2 | cut -d$ -f2)
salt=$(grep "^$1:" /etc/shadow | cut -d: -f2 | cut -d$ -f3)
hash=$(grep "^$1:" /etc/shadow | cut -d: -f2 | cut -d$ -f4)
[ $(python3 -c "import crypt; print(crypt.crypt('$2', '\$$meth\$$salt'))") == "\$$meth\$$salt\$$hash" ]
}
# start exec here
T_Start=`date`
update_self
T_self=`date`
if [ `check_branch` -gt 0 ]; then
if whiptail --yesno "\nFound release-7.X branch would you like (re)install using the latest master?" 20 60 2 3>&1 1>&2 2>&3; then
echo "matched yes for master"
use_master
else
echo "remaning on release-7.X branch updating"
cd $BASEDIR/iiab
MASTER=0
git pull -q
fi
fi
if [ $INTERACTIVE == 1 ]; then
# B. Ask for password change if pi/raspberry default remains
if check_user_pwd "pi" "raspberry"; then
PASSWORD=$(whiptail --passwordbox "
Raspberry Pi's are COMPROMISED often if the default password is not changed!
What password do you want for GNU/Linux user 'pi' ?
press [Enter] for no change " 12 78 --title "password dialog" 3>&1 1>&2 2>&3)
echo pi:$PASSWORD | chpasswd 2>&1 > /dev/null || true # Overrides 'set -e'
fi
# C. Create user 'iiab-admin' as nec, with default password
if ! id -u iiab-admin > /dev/null 2> /dev/null; then
useradd iiab-admin
echo iiab-admin:g0adm1n | chpasswd
fi
if check_user_pwd "iiab-admin" "g0adm1n"; then
# D. Ask for password change if iiab-admin/g0adm1n default remains
PASSWORD2=$(whiptail --passwordbox "
User 'iiab-admin' retains default password 'g0adm1n' per http://FAQ.IIAB.IO
This is for login to Internet-in-a-Box's Admin Console (http://box.lan/admin)
What password do you want for GNU/Linux user 'iiab-admin' ?
press [Enter] for no change " 12 78 --title "password dialog" 3>&1 1>&2 2>&3)
echo iiab-admin:$PASSWORD2 | chpasswd 2>&1 > /dev/null || true # Overrides 'set -e'
fi
fi
if [ $MASTER == 1 ]; then
update_master
fi
check_revision
T_check=`date`
if [ -f $FLAGDIR/iiab-complete ] && [ $UPDATE == 0 ]; then
echo -e "\n\nIIAB INSTALLATION (/usr/sbin/iiab) IS ALREADY COMPLETE -- per existence of:"
echo -e "$FLAGDIR/iiab-complete -- nothing to do.\n"
exit 0
fi
mkdir -p $FLAGDIR
# E. Position & customize $CONFDIR/local_vars.yml
cd $CONFDIR
if [ -f local_vars.yml ]; then
# FUTURE: Test if their local_vars.yml is sufficiently version-compatible !
echo -e "\n\n EXISTING $CONFDIR/local_vars.yml is being used to install Internet-in-a-Box\n"
echo -e " 🚂 🚃 🚄 🚅 🚆 🚇 🚈 🚉 🚊 🚋 🚌 🚍 🚎 🚏 🚐 🚑 🚒 🚚 🚛 🚜 🚞 🚟 🚠 🚡 🚲\n"
echo -e " Google 'local_vars.yml' to learn more!"
else
echo -e "\n\nInstalling Internet-in-a-Box requires $CONFDIR/local_vars.yml"
echo -e "Do you want (1) 🚵 MIN-sized (2) 🚢🚣 MEDIUM-sized or (3) 🚂🚃🚃 BIG-sized?\n"
echo -e "These take about 1, 2 or 3 hours on an older Raspberry Pi 3 or 3 B+, depending"
echo -e "on Internet speed, CPU speed/temperature and microSD card/disk speed. Please"
echo -e "use a Raspberry Pi 4 or x86_64 to install in about an hour or less !\n"
echo -e 'See "What can I do with E-books and Internet-in-a-Box?" and "What services'
echo -e '(IIAB apps) are suggested during installation?" within http://FAQ.IIAB.IO\n'
echo -n "Please type 1, 2 or 3 then press [ENTER]: "
local_vars_size=""
if [ "$INTERACTIVE" == 1 ]; then
read local_vars_size < /dev/tty
fi
echo
case $local_vars_size in
1)
cp $BASEDIR/iiab/vars/local_vars_min.yml local_vars.yml
;;
3)
cp $BASEDIR/iiab/vars/local_vars_big.yml local_vars.yml
;;
*)
cp $BASEDIR/iiab/vars/local_vars_medium.yml local_vars.yml
;;
esac
echo -en "\nEdit /etc/iiab/local_vars.yml to customize your Internet-in-a-Box? [Y/n] "
ans="n"
if [ $INTERACTIVE == 1 ]; then
read ans < /dev/tty
fi
if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
exit 0
# echo -en "ctrl x to save and exit"
# sleep 2
# nano /etc/iiab/local_vars.yml
fi
fi
# F. Mandate OS SECURITY/UPDATES if 'apt update' has any (IF SO REBOOT)
# Educate implementer while waiting for 'apt update'
echo -e "\n\n ██████████████████████████████████████████████████████████████████████████████████████"
echo -e " ██ ██"
echo -e " ██ RUN 'sudo iiab-upgrade' IF THIS INSTALL SCRIPT EVER FAILS, TO TRY TO CONTINUE! ██"
echo -e " ██ ██"
echo -e " ██████████████████████████████████████████████████████████████████████████████████████"
echo -e "\n"
if [ $INTERACTIVE == 1 ]; then
echo -ne "\nHit [ENTER] to confirm you'll TRY TO RERUN 'sudo iiab' IF THERE IS A PROBLEM: "
read ans < /dev/tty
fi
echo -e "\n\n'apt update' is checking for OS updates...\n"
#echo -e "2019-07-11 TEMP WORKAROUND FOR RASPBIAN BUSTER'S testing->stable apt GLITCH...\nDetails @ https://github.com/iiab/iiab/issues/1856\n"
#apt -y update || true # Overrides 'set -e'
#echo -e "\nNOW THE REAL 'apt update' WILL RUN...\n"
# catch's ansible updates when apt runs
$APT_PATH -qq update > /tmp/apt.stdout 2> /tmp/apt.stderr || true # Overrides 'set -e'
if [ $(wc -c < /tmp/apt.stderr) -gt 82 ]; then # apt.stderr typically contains exactly 82 characters when there are no errors, no matter the primary locale, i.e. 3-line file "\nWARNING: apt does not have a stable CLI interface. Use with caution in scripts.\n\n" ...OR... in other cases more than 82, e.g. many lines of errors when apt is busy/locked/offline/etc
echo -e "'apt update' FAILED. VERIFY YOU'RE ONLINE and resolve all errors below:\n"
cat /tmp/apt.stderr
exit 1
elif grep -q 'apt list --upgradable' /tmp/apt.stdout; then # apt.stdout typically contains {"All packages are up to date.\n" [even if primary locale is French & Hindi!], "Todos los paquetes están actualizados.\n", "所有软件包均为最新。\n"} ...OR... {"5 packages can be upgraded. Run 'apt list --upgradable' to see them.\n" [even if primary locale is French & Hindi!], "Se puede actualizar 1 paquete. Ejecute «apt list --upgradable» para verlo.\n", "有 1 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。\n"}
cat /tmp/apt.stdout
if [ "$INTERACTIVE" == 1 ]; then
echo -e "\nYour OS will now be upgraded...this takes time. THEN IT WILL AUTO-REBOOT.\n"
echo -n "Hit [ENTER] to confirm you'll RUN 'sudo iiab' AFTER IT REBOOTS: "
read ans < /dev/tty
echo
$APT_PATH -y dist-upgrade
reboot
exit 0 # Nec to avoid both output lines below (that confuse implementers!)
else
$APT_PATH -y dist-upgrade
fi
fi
cat /tmp/apt.stdout # "All packages are up to date.\n"
T_apt=`date`
# think version_gt is choking on 2913 vs 2101 with the .'s removed but my 2.10.1 install skipped
# ansible correctly when good_ver was 2.9.13. Changed back on the fly to 2.9.13 while live testing
# and the install appears to not skip when 2.9.13 == 2.9.13 and we end up with the noted apt error.
if ! [ $(command -v ansible-playbook) ]; then # "command -v" is POSIX compliant; also catches built-in commands like "cd"
echo -e "Install Ansible..."
$BASEDIR/iiab/scripts/ansible
else
CURR_VER=`ansible --version | head -1 | awk '{print $2}'` # To match iiab-install. Was: CURR_VER=`ansible --version | head -n 1 | cut -f 2 -d " "`
echo -e "\n\nCURRENTLY INSTALLED ANSIBLE: $CURR_VER"
if version_gt $CURR_VER $GOOD_VER || [ $CURR_VER == $GOOD_VER ]; then
echo -e "$CURR_VER is >= $GOOD_VER, skipping install!"
else
echo -e "(Re)Install Ansible..."
$APT_PATH -y remove ansible
$BASEDIR/iiab/scripts/ansible
fi
fi
T_ansible=`date`
######################### INTERACTIVE STUFF IS ABOVE #########################
# G. If RPi, lower reserve disk space from ~5% to 1%
#if [ -f /proc/device-tree/model ] && grep -qi raspberry /proc/device-tree/model; then
if [ $INTERACTIVE == 1 ] && [ -e /dev/mmcblk0p2 ]; then
echo -e "\n\nFound microSD card /dev/mmcblk0p2: Lower its reserve disk space from ~5% to 1%\n"
tune2fs -m 1 /dev/mmcblk0p2
fi
# I. Install Ansible + 2 IIAB repos
#echo -e "\n\nINSTALL ANSIBLE + CORE IIAB SOFTWARE + ADMIN CONSOLE / CONTENT PACK MENUS...\n"
echo -e "\n┌──────────────────────────────────────────────────────────────────────────────┐"
echo -e "│ │"
echo -e "│ NOW UPGRADE IIAB SOFTWARE! If glitches arise (connectivity or otherwise) │"
echo -e "│ │"
echo -e "│ PLEASE TRY TO CONTINUE BY RE-RUNNING SCRIPT 'sudo iiab-upgrade' │"
echo -e "│ │"
echo -e "└──────────────────────────────────────────────────────────────────────────────┘"
cd $BASEDIR/iiab/
if [ $UPDATE == 1 ]; then
echo "upg_path is $upg_path"
echo "OLDREV is $OLDREV"
input="$upg_path/upgrade_roles"
while IFS= read -r REV
do
echo "REV is $REV"
if [ $(echo $REV | awk '{print $1}') -gt $OLDREV ]; then
echo "found REV $REV"
force=$(echo $REV | awk '{print $2}')
if [ "$force" == "calibre-web" ]; then # role directory & installed marker differ
force=calibreweb
elif [ "$force" == "httpd" ]; then # role directory & installed marker differ
force=apache
elif [ "$force" == "osm-vector-maps" ]; then # role directory & installed marker differ
force=osm_vector_maps
fi
echo -e "REV has $force - removing from iiab_state.yml\\n"
sed -i "/^$force/d" $IIABSTATE
fi
done < "$input"
if [ $OLDREV -lt 10 ]; then
./runrole www_base
fi
if [ -f /etc/systemd/system/udev-reload ]; then
systemctl disable udev-reload
fi
./iiab-configure
if ! [ -f upgrade_roles ]; then
echo "manually update $IIABENV with IIAB_REVISION while 2500 is sidelined"
sed -i "s/^IIAB_REVISION=.*/IIAB_REVISION=$NEWREV/" $IIABENV
fi
else
./iiab-install $REINSTALL
fi
T_iiab=`date`
echo -e "Install Admin Console... (also runs iiab-get-kiwix-cat to d/l Kiwix catalog, and installs Dynamic Menuing for /library/www/html/home/index.html)\n"
if ! grep -q '^admin_console_install:\s\+[fF]alse\b' /etc/iiab/local_vars.yml ; then
if [ ! -f $FLAGDIR/iiab-admin-console-complete ] || [ $UPDATE == 1 ]; then
cd $BASEDIR/iiab-admin-console
./install
touch $FLAGDIR/iiab-admin-console-complete
else
echo -e "ADMIN CONSOLE INSTALLATION IS ALREADY COMPLETE -- per existence of:"
echo -e "$FLAGDIR/iiab-admin-console-complete\n"
fi
if grep -q '^admin_console_enabled: False' /etc/iiab/local_vars.yml ; then
echo -e "'admin_console_enabled: False' is in /etc/iiab/local_vars.yml"
echo -e "...so let's try to DISABLE & STOP Admin Console's iiab-cmdsrv.service"
systemctl disable iiab-cmdsrv
systemctl stop iiab-cmdsrv
fi
else
echo -e "LET'S NOT TRY TO INSTALL ADMIN CONSOLE -- because:"
echo -e "'admin_console_install: False' is in /etc/iiab/local_vars.yml\n"
fi
T_console=`date`
# J. KA Lite prep
if [ -d /library/ka-lite ]; then
echo -e "\n\nKA LITE REQUIRES 2 THINGS...\n"
echo -e "Register with KA Lite - just the anonymous registration...\n"
# /usr/bin/kalite venv wrapper invokes 'export KALITE_HOME=/library/ka-lite'
if [ ! -f $FLAGDIR/kalite-zone-complete ]; then
echo -e "Now running 'kalite manage generate_zone' ...\n"
kalite manage generate_zone || true # Overrides 'set -e'
touch $FLAGDIR/kalite-zone-complete
else
echo -e "'kalite manage generate_zone' IS ALREADY COMPLETE -- per existence of:"
echo -e "$FLAGDIR/kalite-zone-complete\n"
fi
echo -e "\nInstall KA Lite's mandatory 0.9 GB English Pack... en.zip\n"
if [ ! -f $FLAGDIR/kalite-en.zip-complete ]; then
#echo -e 'Now retrieving it...\n'
cd /tmp
if [ -f en.zip ]; then
if [ $(wc -c < en.zip) -ne 929916955 ]; then
echo -e "\nERROR: /tmp/en.zip must be 929,916,955 bytes to proceed.\n" >&2
exit 1
else
echo -e "\nUsing existing /tmp/en.zip whose 929,916,955 byte size is correct!\n"
fi
else
wget http://pantry.learningequality.org/downloads/ka-lite/0.17/content/contentpacks/en.zip
fi
echo -e 'Now installing /tmp/en.zip into /library/ka-lite/content/*\n'
kalite manage retrievecontentpack local en en.zip
touch $FLAGDIR/kalite-en.zip-complete
else
echo -e 'kalite zip already done'
fi
fi
T_kalite=`date`
# WARNING: /tmp/en.zip (and all stuff in /tmp) is auto-deleted during reboots
# NEW WAY ABOVE - since 2018-07-03 - installs KA Lite's mandatory English Pack
#
# kalite manage retrievecontentpack download en
# OLD WAY ABOVE - fails w/ sev ISPs per https://github.com/iiab/iiab/issues/871
# K. Start BitTorrent downloads, e.g. if $CONFDIR/local_vars.yml requested any
if [ $INTERACTIVE == 1 ] && (systemctl -q is-active transmission-daemon); then
echo -e "\n\nSTARTING BITTORRENT DOWNLOAD(S) for KA Lite...Please Monitor: http://box:9091\n"
transmission-remote -n Admin:changeme -t all --start
fi
touch $FLAGDIR/iiab-complete
# L. Educate Implementers prior to rebooting!
echo -e "\n\n ┌───────────────────────────────────────────────────────────┐"
echo -e " │ │"
echo -e " │ INTERNET-IN-A-BOX (IIAB) SOFTWARE INSTALL IS COMPLETE │"
echo -e " │ │"
echo -e " └───────────────────────────────────────────────────────────┘\n"
echo -e "(1A) A couple minutes after you reboot (below) try to connect any laptop to"
echo -e 'Wi-Fi hotspot "Internet in a Box". If this works, verify that you can browse'
echo -e "to http://box or http://box.lan or http://172.18.96.1\n"
echo -e "(1B) IF THOSE 3 DON'T WORK, try http://box.local from any device connected to"
echo -e "your usual network. Or try http://localhost from your IIAB itself!\n"
echo -e "(1C) IF ALL 5 ABOVE DON'T WORK, ask the person who set up the network/router"
echo -e "in your building for the IP address of your IIAB, so you can browse to it"
echo -e "using (something like) http://192.168.0.100\n"
echo -e '(2) ADD CONTENT using http://box.lan/admin (changing "box.lan" to be as above!)'
echo -e 'PLEASE READ "What are the default passwords?" and "How do I customize my'
echo -e 'Internet-in-a-Box home page?" at http://FAQ.IIAB.IO\n'
echo -e "(3) Please run the 'iiab-diagnostics' command, to generate a URL summarizing"
echo -e "your IIAB configuration, for volunteers seeking to help you. We strongly"
echo -e "encourage you to share this URL also when connecting with others in the IIAB"
echo -e "global community, learning from other initiatives in your region and beyond!\n"
#echo -e "(3) If you're installing IIAB over Wi-Fi (instead of Ethernet) remember to run"
#echo -e "'iiab-hotspot-on' at the VERY END, when you're ready to ACTIVATE YOUR IIAB's"
#echo -e "INTERNAL WI-FI HOTSPOT. CAUTION: this permanently kills your IIAB's Internet"
#echo -e "(over Wi-Fi anyway) until you later run 'iiab-hotspot-off'. CAVEAT: these"
#echo -e "two commands only work with Raspberry Pi as of 2019-09-30.\n"
if [ -f /etc/rpi-issue ]; then
check_kernel
fi
# cleanup
if [ -f $SELFUPDATE_SCRIPT ]; then
rm $SELFUPDATE_SCRIPT
fi
T_End=`date`
echo "iiab-upgrade run start: $T_Start"
echo "time to self update: $T_self"
echo "time to revision check: $T_check"
echo "time to apt upgrade: $T_apt"
echo "time to ansible: $T_ansible"
echo "time to iiab: $T_iiab"
echo "time to admin-console $T_console"
echo "time to kailte config: $T_kalite"
echo "iiab-upgrade run end: $T_End"
if [ $INTERACTIVE == 1 ]; then
echo -ne "HIT [Y] [Enter] TO REBOOT, [Enter] to exit, CONFIRMING YOU'VE" '"photographed" THE ABOVE PARAGRAPHS: '
ans=n
read ans < /dev/tty
if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
reboot
fi
fi
echo -e "Remember to reboot"
exit 0