diff --git a/7.2-install.txt b/7.2-install.txt new file mode 100644 index 00000000..56a650ae --- /dev/null +++ b/7.2-install.txt @@ -0,0 +1,125 @@ +#!/bin/bash +# Copied https://github.com/jvonau/iiab-factory/master/7.2-install.txt +# Copied from: https://github.com/jvonau/iiab-factory/blob/jv-pi-gen/install.txt +# Copied from: https://github.com/iiab/iiab-factory/blob/master/install.txt +# To install Internet-in-a-Box (IIAB) 7.2 / pre-release onto Raspberry Pi OS, +# Ubuntu 20.04 or Debian 10, run this 1-line installer: +# +# curl https://raw.githubusercontent.com/jvonau/iiab-factory/master/7.2-install.txt | sudo bash +# +# 1. WHEN YOU RUN 1-LINE INSTALLER FROM ABOVE +# YOU THEN NEED TO TYPE IN YOUR PASSWORD IF ON UBUNTU/DEBIAN/ETC (for sudo) +# ^^^ ^^^^ ^^^^ ^^ ^^^^ ^^ ^^^^ ^^^^^^^^ +# +# 2. WARNING: NOOBS IS *NOT* SUPPORTED, as its partitioning is very different. +# On a Raspberry Pi, WE RECOMMEND YOU INSTALL THE LATEST RASPBERRY PI OS: +# https://www.raspberrypi.org/documentation/installation/installing-images/README.md +# To attempt IIAB 7.2 on another Linux see the full/manual instructions: +# https://github.com/iiab/iiab/wiki/IIAB-Installation#do-everything-from-scratch + +# 3. An Ethernet cable is HIGHLY RECOMMENDED during installation, as this is +# more reliable than Wi-Fi (and faster!) + +# 4. Run 'sudo raspi-config' on RPi, to set LOCALISATION OPTIONS + +# 5. OPTIONAL: if you have slow/pricey Internet, pre-position KA Lite's +# mandatory 0.9 GB English Pack (en.zip) within /tmp -- you can grab a copy +# from http://pantry.learningequality.org/downloads/ka-lite/0.17/content/contentpacks/en.zip + +# 6. Follow on-screen instructions (TYPE 'sudo iiab-upgrade' TO RESUME IF EVER NECESS!) + +# 7. About 1-2 hours later, it will announce that INTERNET-IN-A-BOX (IIAB) +# SOFTWARE INSTALL IS COMPLETE, prompting you to reboot...TO ADD CONTENT! + +# Thanks For Building Your Own Library To Serve One & All +# +# DRAFT IIAB 7.2 Release Notes: +# https://github.com/iiab/iiab/wiki/IIAB-7.2-Release-Notes +# +# Write to bugs @ iiab.io if you find issues, Thank You! Special Thanks to the +# countries+communities+volunteers who worked non-stop to bring about IIAB 7.2! +# +# IIAB Development Team +# http://FAQ.IIAB.IO + +set -e # Exit on error (avoids snowballing) +export DEBIAN_FRONTEND=noninteractive # Bypass (most!) interactive questions +BASE=/opt/iiab +BRANCH=release-7.2 +ADMBRANCH=master +OS=`grep ^ID= /etc/*elease|cut -d= -f2` +OS=${OS//\"/} +if [ -f /etc/rpi-issue ]; then + OS="raspbian" +fi +VERSION_ID=`grep VERSION_ID /etc/*elease | cut -d= -f2` +VERSION_ID=${VERSION_ID//\"/} +VERSION_ID=${VERSION_ID%%.*} +OS_VER=$OS-$VERSION_ID + +not_supported(){ + echo "Can't detect supported Distro" +} + +case $OS_VER in +"debian-10" | "ubuntu-20" | "linuxmint-20" | "raspbian-10") + ;; +*) + not_supported + exit 1 + ;; +esac + +# 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 + + +echo -e "\n\nDOWNLOAD (CLONE) IIAB'S 3 KEY REPOS INTO $BASE ...\n" +/usr/bin/apt -y install git nano whiptail +mkdir -p $BASE +cd $BASE +echo +if [ -d iiab-factory ]; then + echo -e "REPO iiab-factory EXISTS? -- updating master branch" + cd iiab-factory + git checkout master + git pull -q + echo -e "Creating branch $BRANCH" + git branch -D $BRANCH &> /dev/null || true + git checkout -b $BRANCH + cp --remove-destination $BASE/iiab-factory/iiab /usr/sbin/iiab + cp --remove-destination $BASE/iiab-factory/iiab-upgrade /usr/sbin/iiab-upgrade +else + echo -e "Cloning iiab-factory" + git clone https://github.com/iiab/iiab-factory --depth 1 + cd iiab-factory + echo -e "Creating branch $BRANCH" + git checkout -b $BRANCH + cp $BASE/iiab-factory/iiab /usr/sbin/iiab + cp $BASE/iiab-factory/iiab-upgrade /usr/sbin/iiab-upgrade +fi +cd $BASE +echo +if [ -d iiab ]; then + echo -e "REPO iiab EXISTS?" +else + cd iiab + git clone https://github.com/iiab/iiab --depth 10 --branch master + echo -e "Creating branch $BRANCH" + git checkout -b $BRANCH +fi +cd $BASE +echo +if [ -d iiab-admin-console ]; then + echo -e "REPO iiab-admin-console EXISTS?" +else + git clone https://github.com/iiab/iiab-admin-console --depth 1 --branch ADMBRANCH + echo -e "Creating branch $BRANCH" + git checkout -b $BRANCH +fi + +# Run install script! +/usr/sbin/iiab-upgrade --interactive diff --git a/iiab-upgrade b/iiab-upgrade new file mode 100755 index 00000000..3b1021ca --- /dev/null +++ b/iiab-upgrade @@ -0,0 +1,537 @@ +#!/bin/bash +# jvonau +set -e # Exit on error (avoids snowballing) +export DEBIAN_FRONTEND=noninteractive # Bypass (most!) interactive questions +SCRIPT=iiab-upgrade +RELEASE=4 +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 + 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 diff --git a/upgrade_roles b/upgrade_roles new file mode 100644 index 00000000..36aafafb --- /dev/null +++ b/upgrade_roles @@ -0,0 +1,13 @@ +1 osm_vector_maps +2 gitea +3 lokole +4 sugarizer +5 mediawiki +6 kolibri +7 gitea +8 phpMyAdmin +9 sugarizer +11 nodejs +12 udev +13 mongodb +14 kiwix diff --git a/upgrade_roles.txt b/upgrade_roles.txt new file mode 100644 index 00000000..46a3bbbe --- /dev/null +++ b/upgrade_roles.txt @@ -0,0 +1,23 @@ +# since there are really only two files in play don't depend on 2500 being in place +# tagged https://github.com/iiab/iiab/releases/tag/7.1.5-premap +# git 5d64c066627f664d2a20da50d4a249c3ca87529a as 0 revision stating point +# https://github.com/holta/iiab/compare/5GHz-warning-with-dual-wifi...iiab:master + +# pbx was non-installable prior to #2489 - no upgrade need +# #2515 would need a pass through the network role via ./iiab-network or ICO +1 osm-vector-maps #2487 +# mongodb #2487 #2584: bugfix for 64bit debian - upgrade on 64bit ubuntu +# - no change for 32bit OSs +2 gitea #2504 +3 lokole #2514 +4 sugarizer #2543 +5 mediawiki #2547 +6 kolibri #2555 actually is "latest deb" moving 14.2 -> 14.3 +7 gitea #2554 +8 phpMyAdmin #2568 +9 sugarizer #2569 +10 www_base #2581 #2583 for osm +11 nodejs #2606 Node.js 12.x -> 14.x +12 udev #2607 drop udev-restart handle via iiab-upgrade script +13 mongodb #2613 +14 kiwix #2615