mirror of
				https://github.com/iiab/iiab.git
				synced 2025-03-09 15:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			7.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash -e
 | |
| # "-e" tries to exit right away on error.
 | |
| 
 | |
| # Upgrade IIAB core software (apt updates, Ansible, Admin Console, etc).
 | |
| 
 | |
| # Also with a focus on upgrading IIAB Calibre-Web, if that's installed:
 | |
| # https://github.com/iiab/calibre-web/wiki
 | |
| 
 | |
| # 2024-07-18 fixes underway, thanks to:
 | |
| # https://stackoverflow.com/questions/21096478/overwrite-executing-bash-script-files
 | |
| # https://stackoverflow.com/questions/2285403/how-to-make-shell-scripts-robust-to-source-being-changed-as-they-run
 | |
| # https://stackoverflow.com/questions/2336977/can-a-shell-script-indicate-that-its-lines-be-loaded-into-memory-initially
 | |
| 
 | |
| {
 | |
|     if [[ $(id -un) != "root" ]]; then
 | |
|         echo -e "\nPlease run: sudo iiab-update\n"
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     if [[ $1 == "-f" || $1 == "--fast" ]]; then
 | |
|         echo -e "\n\n\e[44;1mAttempting a FAST upgrade of IIAB Calibre-Web...\e[0m\n"
 | |
|         echo -e "\n\e[33m'iiab-update -f' DOES NOT apply apt updates.\e[0m"
 | |
|     else
 | |
|         echo -e "\n\n\e[44;1mUpgrading IIAB core software: (apt updates, Ansible, Admin Console, etc)\e[0m\n"
 | |
|         echo -e "\n\e[44;1mOr try 'iiab-update -f' for a FAST upgrade of IIAB Calibre-Web!\e[0m\n\n"
 | |
|         echo -e "\e[4mNow running: apt update\e[0m\n"
 | |
|         apt update
 | |
|         echo -e "\n\e[4mNow running: apt dist-upgrade -y\e[0m\n"
 | |
|         apt dist-upgrade -y
 | |
|         echo -e "\n\e[4mNow running: apt autoremove -y\e[0m\n"
 | |
|         apt autoremove -y
 | |
|     fi
 | |
| 
 | |
|     cd /opt/iiab/iiab
 | |
|     if [[ $(git branch --show-current) != "master" || $(git status --porcelain --untracked-files=no) != "" ]]; then    # Permit detritus, e.g. untracked files like adm-run-roles-tmp.yml
 | |
|         echo -e "\n\n\e[41;1mIn /opt/iiab/iiab, (1) 'git branch' MUST show current branch 'master' and (2) 'git status' must show NO MODIFIED FILES.\e[0m\n\n"
 | |
|         exit 1
 | |
|     fi
 | |
|     echo -e "\n\n\e[4mNow running: git pull https://github.com/iiab/iiab --no-rebase --no-edit\e[0m\n"
 | |
|     git pull https://github.com/iiab/iiab --no-rebase --no-edit
 | |
|     echo
 | |
|     if grep -q 'tailscale_installed: True' /etc/iiab/iiab_state.yml; then
 | |
|         echo -e "\e[4mNow running: cp -u roles/tailscale/templates/iiab-vpn /usr/bin\e[0m\n"
 | |
|         cp -u roles/tailscale/templates/iiab-vpn /usr/bin
 | |
|     fi
 | |
|     if [[ $1 == "-f" || $1 == "--fast" ]]; then    # Otherwise ./runrole does it below! (as Ansible runs roles/0-init)
 | |
|         cd scripts
 | |
|         echo -e "\e[4mNow running: cp -u iiab-update iiab-summary iiab-diagnostics iiab-root-login /usr/bin\e[0m\n"
 | |
|         cp -u iiab-update iiab-summary iiab-diagnostics iiab-root-login /usr/bin
 | |
|     fi
 | |
| 
 | |
|     if [[ $1 == "-f" || $1 == "--fast" ]]; then
 | |
|         echo -e "\n\e[33m'iiab-update -f' DOES NOT upgrade Ansible.\e[0m\n\n"
 | |
|     else
 | |
|         echo -e "\n\n\e[4mNow running: scripts/ansible\e[0m"
 | |
|         scripts/ansible
 | |
|     fi
 | |
| 
 | |
|     if grep -q 'calibreweb_installed: True' /etc/iiab/iiab_state.yml; then
 | |
|         if [[ $1 == "-f" || $1 == "--fast" ]]; then
 | |
|             echo -e "\e[4mNow running: pipx uninstall xklb    # THIS ALSO UNINSTALLS yt-dlp\e[0m\n"
 | |
|             pipx uninstall xklb
 | |
|             echo -e "\n\e[4mNow running: pipx install xklb      # THIS ALSO INSTALLS yt-dlp\e[0m\n"
 | |
|             pipx install xklb
 | |
|             echo -e "\n\e[4mNow running: yt-dlp --version\e[0m\n"
 | |
|             yt-dlp --version
 | |
|             echo -e '\n\e[4mNeed better YouTube scraping? Run this for the latest yt-dlp "nightly" release:\e[0m\n\n\e[1mpipx inject --pip-args="--upgrade --pre" -f xklb yt-dlp[default]\e[0m\n'
 | |
|             # NEED BETTER/EXPERIMENTAL YouTube SCRAPING?  UNCOMMENT THE NEXT LINE:
 | |
|             # pipx inject --pip-args="--upgrade --pre" -f xklb yt-dlp[default]
 | |
|             #
 | |
|             # https://github.com/yt-dlp/yt-dlp-nightly-builds/releases
 | |
|             # https://pypi.org/project/yt-dlp/#history
 | |
|             cd /usr/local/calibre-web-py3
 | |
|             if [[ $(git branch --show-current) != "master" || $(git status --porcelain --untracked-files=no) != "" ]]; then    # Permit venv detritus, e.g. untracked files like these 5: bin/ include/ lib/ lib64 pyvenv.cfg
 | |
|                 echo -e "\n\e[41;1mIn /usr/local/calibre-web-py3, (1) 'git branch' MUST show current branch 'master' and (2) 'git status' must show NO MODIFIED FILES.\e[0m\n\n"
 | |
|                 exit 1
 | |
|             fi
 | |
|             echo -e "\e[4mNow running: systemctl stop calibre-web\e[0m\n"
 | |
|             systemctl stop calibre-web
 | |
|             echo -e "\e[4mNow running: git pull https://github.com/iiab/calibre-web --no-rebase --no-edit\e[0m\n"
 | |
|             git pull https://github.com/iiab/calibre-web --no-rebase --no-edit
 | |
|             echo -e "\n\e[4mNow running: bin/pip install -r requirements.txt --prefer-binary\e[0m\n"
 | |
|             bin/pip install -r requirements.txt --prefer-binary > /dev/null
 | |
|             echo -e "\e[4mNow running: systemctl restart calibre-web\e[0m\n"
 | |
|             systemctl restart calibre-web
 | |
|         else
 | |
|             cd /opt/iiab/iiab
 | |
|             echo -e "\n\e[4mNow running: ./runrole --reinstall calibre-web\e[0m\n"
 | |
|             ./runrole --reinstall calibre-web
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     # 2024-07-17: Run Admin Console stanza last for safety -- it failed ~50% of the
 | |
|     # time over 20 tests for me -- leading to 3+ different kinds of errors right
 | |
|     # after "(Restarting CMDSRV" e.g. "syntax error near unexpected token" was the
 | |
|     # most common error -- once the error was "command not found" -- and another
 | |
|     # time Admin Console's ./install VERY MYSTERIOUSLY RAN TWICE!
 | |
|     #
 | |
|     # Any chance this get_oer2go_catalog error ~15 lines up...might be related ?
 | |
|     #
 | |
|     # ...
 | |
|     # Finished writing to /etc/iiab/kiwix_catalog.json
 | |
|     # SUCCESS/opt/admin/cmdsrv/scripts/get_oer2go_catalog:52: SyntaxWarning: invalid escape sequence '\<'
 | |
|     #   php_parser = re.compile('\<\?php echo .+? \?>')
 | |
|     # Skipping module not needed by Internet in a Box 12 en-PhET
 | |
|     # ...
 | |
|     # [ ~15 lines ]
 | |
|     # ...
 | |
|     # (Restarting CMDSRV
 | |
|     # ...
 | |
|     # [ VARIOUS ERRORS SOMETIMES HAPPEN HERE ]
 | |
| 
 | |
|     if [ -d /opt/admin ]; then
 | |
|         if [[ $1 == "-f" || $1 == "--fast" ]]; then
 | |
|             echo -e "\n\e[33m'iiab-update -f' DOES NOT upgrade Admin Console.\e[0m"
 | |
|         else
 | |
|             cd /opt/iiab/iiab-admin-console
 | |
|             if [[ $(git branch --show-current) != "master" || $(git status --porcelain) != "" ]]; then
 | |
|                 echo -e "\n\n\e[41;1mIn /opt/iiab/iiab-admin-console, (1) 'git branch' MUST show current branch 'master' and (2) 'git status' must show NO MODIFIED FILES.\e[0m\n\n"
 | |
|                 exit 1
 | |
|             fi
 | |
|             GITHASH1=$(git rev-parse HEAD)
 | |
|             echo -e "\n\e[4mNow running: git pull https://github.com/iiab/iiab-admin-console --no-rebase --no-edit\e[0m\n"
 | |
|             git pull https://github.com/iiab/iiab-admin-console --no-rebase --no-edit
 | |
|             GITHASH2=$(git rev-parse HEAD)
 | |
|             if [[ $GITHASH1 != $GITHASH2 ]]; then
 | |
|                 echo -e "\n\e[4mNow running: ./install\e[0m\n"
 | |
|                 ./install
 | |
|             else
 | |
|                 echo -e "\n\e[33mSkipping Admin Console './install' — as it appears up-to-date!\e[0m"
 | |
|             fi
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     if [[ $1 == "-f" || $1 == "--fast" ]]; then
 | |
|         echo -e "\n\n\e[44;1m'iiab-update -f' COMPLETE!\e[0m\n"
 | |
|         echo -e "\e[44;1mIf Calibre-Web fails, please try 'iiab-update' WITHOUT '-f'\e[0m\n\n"    # \e[7m == reverse video (e.g. black on white)
 | |
|     else
 | |
|         echo -e "\n\n\e[44;1miiab-update COMPLETE!\e[0m\n\n"
 | |
|     fi
 | |
| 
 | |
|     exit    # https://stackoverflow.com/questions/2285403/how-to-make-shell-scripts-robust-to-source-being-changed-as-they-run
 | |
| }
 |