Created
July 20, 2019 18:16
-
-
Save SDRausty/a2a4274434742b6ff1bee442a360a5d0 to your computer and use it in GitHub Desktop.
setupTermuxArch.sh from https://github.com/TermuxArch/TermuxArch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/env bash | |
# Copyright 2017-2018 by SDRausty. All rights reserved. 🌎 🌍 🌏 🌐 🗺 | |
# Hosted sdrausty.github.io/TermuxArch courtesy https://pages.github.com | |
# https://sdrausty.github.io/TermuxArch/README has info about this project. | |
# https://sdrausty.github.io/TermuxArch/CONTRIBUTORS Thank you for your help. | |
# _STANDARD_="function name" && STANDARD="variable name" are under construction. | |
################################################################################ | |
IFS=$'\n\t' | |
set -Eeuo pipefail | |
shopt -s nullglob globstar | |
unset LD_PRELOAD | |
VERSIONID="v1.6.7.id5677" | |
## INIT FUNCTIONS ############################################################## | |
_ARG2DIR_() { # Argument as ROOTDIR. | |
ARG2="${@:2:1}" | |
if [[ -z "${ARG2:-}" ]] | |
then | |
ROOTDIR=/arch | |
_PREPTERMUXARCH_ | |
else | |
ROOTDIR=/"$ARG2" | |
_PREPTERMUXARCH_ | |
fi | |
} | |
_BSDTARIF_() { | |
if [[ ! -x "$(command -v bsdtar)" ]] || [[ ! -x "$PREFIX"/bin/bsdtar ]] | |
then | |
APTIN+="bsdtar " | |
APTON+=(bsdtar) | |
fi | |
} | |
_CHK_() { | |
if "$PREFIX"/bin/applets/sha512sum -c termuxarchchecksum.sha512 1>/dev/null ; then | |
_CHKSELF_ "$@" | |
printf "\\e[0;34m%s \\e[1;34m%s \\e[1;32m%s\\e[0m\\n" " 🕛 > 🕜" "TermuxArch $VERSIONID integrity:" "OK" | |
_LOADCONF_ | |
. archlinuxconfig.sh | |
. espritfunctions.sh | |
. getimagefunctions.sh | |
. knownconfigurations.sh | |
. maintenanceroutines.sh | |
. necessaryfunctions.sh | |
. printoutstatements.sh | |
if [[ "$OPT" = bloom ]] ; then | |
rm -f termuxarchchecksum.sha512 | |
fi | |
if [[ "$OPT" = manual ]] ; then | |
_MANUAL_ | |
fi | |
else | |
_PRINTSHA512SYSCHKER_ | |
fi | |
} | |
_CHKDWN_() { | |
if "$PREFIX"/bin/applets/sha512sum -c setupTermuxArch.sha512 1>/dev/null | |
then | |
printf "\\e[0;34m%s\\e[1;34m%s%s\\e[1;32m%s\\n\\n" " 🕛 > 🕐 " "TermuxArch download: " "OK" | |
proot --link2symlink -0 "$PREFIX"/bin/applets/tar xf setupTermuxArch.tar.gz | |
else | |
_PRINTSHA512SYSCHKER_ | |
fi | |
} | |
_CHKSELF_() { | |
if [[ -f "setupTermuxArch.tmp" ]] | |
then # compare the two versions: | |
if [[ "$(<setupTermuxArch.sh)" != "$(<setupTermuxArch.tmp)" ]] # the two versions are not equal: | |
then # copy the newer version to update: | |
cp setupTermuxArch.sh "${WDIR}setupTermuxArch.sh" | |
printf "\\e[0;32m%s\\e[1;34m: \\e[1;32mUPDATED\\n\\e[1;32mRESTARTED\\e[1;34m: \\e[0;32m%s %s \\n\\n\\e[0m" "${0##*/}" "${0##*/}" "$ARGS" | |
. "${WDIR}setupTermuxArch.sh" "$@" | |
fi | |
fi | |
} | |
_DEPENDBP_() { | |
if [[ "$CPUABI" = "$CPUABIX86" ]] || [[ "$CPUABI" = "$CPUABIX86_64" ]] | |
then | |
_BSDTARIF_ | |
_PROOTIF_ | |
else | |
_PROOTIF_ | |
fi | |
} | |
_DEPENDDM_() { # Checks and sets dm. | |
for pkg in "${!ADM[@]}" | |
do | |
if [[ -x "$PREFIX"/bin/"${ADM[$pkg]}" ]] | |
then | |
dm="$pkg" | |
echo | |
echo "Found download tool \`$pkg\`; Continuing…" | |
break | |
fi | |
done | |
} | |
_DEPENDTM_() { # Checks and sets tm. | |
for pkg in "${!ATM[@]}" | |
do | |
if [[ -x "$PREFIX"/bin/"${ATM[$pkg]}" ]] | |
then | |
tm="$pkg" | |
echo | |
echo "Found tar tool \`$pkg\`; Continuing…" | |
break | |
fi | |
done | |
} | |
_DEPENDIFDM_() { # checks if download tool is set and sets install if available. | |
for pkg in "${!ADM[@]}" # check from available toolset and set one for install if available on device. | |
do # check for both set dm and if tool exists on device. | |
if [[ "$dm" = "$pkg" ]] && [[ ! -x "$PREFIX"/bin/"${ADM[$pkg]}" ]] | |
then # sets both download tool for install and exception check. | |
APTIN+="$pkg " | |
APTON+=("${ADM[$pkg]}") | |
echo | |
echo "Setting download tool \`$pkg\` for install; Continuing…" | |
fi | |
done | |
} | |
depends() { # Checks for missing commands. | |
printf "\\e[1;34mChecking prerequisites…\\n\\e[1;32m" | |
ADM=([aria2]=aria2c [axel]=axel [curl]=curl [lftp]=lftpget [wget]=wget) | |
ATM=([busybox]=applets/tar [tar]=tar [bsdtar]=bsdtar) | |
if [[ "$dm" != "" ]] | |
then | |
_DEPENDIFDM_ | |
fi | |
if [[ "$dm" = "" ]] | |
then | |
_DEPENDDM_ | |
fi | |
# Sets and installs lftp if nothing else was found, installed and set. | |
if [[ "$dm" = "" ]] | |
then | |
dm=lftp | |
APTIN+="lftp " | |
APTON+=(lftp) | |
echo "Setting download tool \`lftp\` for install; Continuing…" | |
fi | |
_DEPENDBP_ | |
# # Installs missing commands. | |
_TAPIN_ "$APTIN" | |
# # Checks whether install missing commands was successful. | |
# _PECHK_ "$APTON" | |
echo | |
echo "Using ${dm:-lftp} to manage downloads." | |
printf "\\n\\e[0;34m 🕛 > 🕧 \\e[1;34mPrerequisites: \\e[1;32mOK \\e[1;34mDownloading TermuxArch…\\n\\n\\e[0;32m" | |
} | |
dependsblock() { | |
depends | |
if [[ -f archlinuxconfig.sh ]] && [[ -f espritfunctions.sh ]] && [[ -f getimagefunctions.sh ]] && [[ -f knownconfigurations.sh ]] && [[ -f maintenanceroutines.sh ]] && [[ -f necessaryfunctions.sh ]] && [[ -f printoutstatements.sh ]] && [[ -f setupTermuxArch.sh ]] ; then | |
. archlinuxconfig.sh | |
. espritfunctions.sh | |
. getimagefunctions.sh | |
. knownconfigurations.sh | |
. maintenanceroutines.sh | |
. necessaryfunctions.sh | |
. printoutstatements.sh | |
if [[ "$OPT" = manual ]] ; then | |
_MANUAL_ | |
fi | |
else | |
cd "$TAMPDIR" | |
dwnl | |
if [[ -f "${WDIR}setupTermuxArch.sh" ]] ; then | |
cp "${WDIR}setupTermuxArch.sh" setupTermuxArch.tmp | |
fi | |
_CHKDWN_ | |
_CHK_ "$@" | |
fi | |
} | |
dwnl() { # Downloads TermuxArch from Github. | |
if [[ "$DFL" = "/gen" ]] | |
then # get development version from: | |
FILE[sha]="https://raw.githubusercontent.com/sdrausty/gensTermuxArch/master/setupTermuxArch.sha512" | |
FILE[tar]="https://raw.githubusercontent.com/sdrausty/gensTermuxArch/master/setupTermuxArch.tar.gz" | |
else # get stable version from: | |
FILE[sha]="https://raw.githubusercontent.com/sdrausty/TermuxArch/master/setupTermuxArch.sha512" | |
FILE[tar]="https://raw.githubusercontent.com/sdrausty/TermuxArch/master/setupTermuxArch.tar.gz" | |
fi | |
if [[ "$dm" = aria2 ]] | |
then # use https://github.com/aria2/aria2 | |
"${ADM[aria2]}" -Z "${FILE[sha]}" "${FILE[tar]}" | |
elif [[ "$dm" = axel ]] | |
then # use https://github.com/mopp/Axel | |
"${ADM[axel]}" "${FILE[sha]}" | |
"${ADM[axel]}" "${FILE[tar]}" | |
elif [[ "$dm" = curl ]] | |
then # use https://github.com/curl/curl | |
"${ADM[curl]}" "$DMVERBOSE" -OL "${FILE[sha]}" -OL "${FILE[tar]}" | |
elif [[ "$dm" = wget ]] | |
then # use https://github.com/mirror/wget | |
"${ADM[wget]}" "$DMVERBOSE" -N --show-progress "${FILE[sha]}" "${FILE[tar]}" | |
else # use https://github.com/lavv17/lftp | |
"${ADM[lftp]}" -c "${FILE[sha]}" "${FILE[tar]}" | |
fi | |
printf "\\n\\e[1;32m" | |
} | |
intro() { | |
printf "\033]2;%s\007" "bash setupTermuxArch.sh $ARGS 📲" | |
_SETROOT_EXCEPTION_ | |
if [[ -d "$INSTALLDIR" ]] && [[ -f "$INSTALLDIR"/bin/env ]] && [[ -f "$INSTALLDIR"/bin/we ]] && [[ -f "$INSTALLDIR"/bin/pacman ]];then | |
printf "\\n\\e[0;33m%s\\e[1;33m%s\\e[0;33m.\\e[0m\\n\\n" "TermuxArch WARNING! " "The root directory structure is correct; Cannot continue setupTermuxArch.sh install! See \`setupTermuxArch.sh help\` and \`$STARTBIN help\` for more information" | |
exit 205 | |
fi | |
printf "\\n\\e[0;34m 🕛 > 🕛 \\e[1;34mTermuxArch $VERSIONID shall attempt to install Linux in \\e[0;32m$INSTALLDIR\\e[1;34m. Arch Linux in Termux PRoot shall be available upon successful completion. To run this BASH script again, use \`!!\`. Ensure background data is not restricted. Check the wireless connection if you do not see one o'clock 🕐 below. " | |
dependsblock "$@" | |
if [[ "$lcc" = "1" ]] ; then | |
loadimage "$@" | |
else | |
_MAINBLOCK_ | |
fi | |
} | |
introbloom() { # Bloom = `setupTermuxArch.sh manual verbose` | |
OPT=bloom | |
printf "\033]2;%s\007" "bash setupTermuxArch.sh bloom 📲" | |
printf "\\n\\e[0;34m 🕛 > 🕛 \\e[1;34mTermuxArch $VERSIONID bloom option. Run \\e[1;32mbash setupTermuxArch.sh help \\e[1;34mfor additional information. Ensure background data is not restricted. Check the wireless connection if you do not see one o'clock 🕐 below. " | |
_PREPTERMUXARCH_ | |
dependsblock "$@" | |
bloom | |
} | |
_INTROSYSINFO_() { | |
printf "\033]2;%s\007" "bash setupTermuxArch.sh sysinfo 📲" | |
_SETROOT_EXCEPTION_ | |
printf "\\n\\e[0;34m 🕛 > 🕛 \\e[1;34mTermuxArch $VERSIONID shall create a system information file. Ensure background data is not restricted. Run \\e[0;32mbash setupTermuxArch.sh help \\e[1;34mfor additional information. Check the wireless connection if you do not see one o'clock 🕐 below. " | |
dependsblock "$@" | |
_SYSINFO_ "$@" | |
} | |
introrefresh() { | |
printf '\033]2; bash setupTermuxArch.sh refresh 📲 \007' | |
_SETROOT_EXCEPTION_ | |
if [[ ! -d "$INSTALLDIR" ]] || [[ ! -f "$INSTALLDIR"/bin/env ]] || [[ ! -f "$INSTALLDIR"/bin/we ]] || [[ ! -d "$INSTALLDIR"/root/bin ]];then | |
printf "\\n\\e[0;33m%s\\e[1;33m%s\\e[0;33m.\\e[0m\\n\\n" "TermuxArch WARNING! " "The root directory structure is incorrect; Cannot continue setupTermuxArch.sh refresh! See \`setupTermuxArch.sh help\` and \`$STARTBIN help\` for more information" | |
exit 204 | |
fi | |
printf "\\n\\e[0;34m 🕛 > 🕛 \\e[1;34mTermuxArch $VERSIONID shall refresh your TermuxArch files in \\e[0;32m$INSTALLDIR\\e[1;34m. Ensure background data is not restricted. Run \\e[0;32mbash setupTermuxArch.sh help \\e[1;34mfor additional information. Check the wireless connection if you do not see one o'clock 🕐 below. " | |
dependsblock "$@" | |
refreshsys "$@" | |
} | |
introstnd() { | |
printf '\033]2; %s\007' " bash setupTermuxArch.sh $ARGS 📲 " | |
_SETROOT_EXCEPTION_ | |
printf "\\n\\e[0;34m%s \\e[1;34m%s \\e[0;32m%s\\e[1;34m%s \\e[0;32m%s \\e[1;34m%s" " 🕛 > 🕛" "TermuxArch $VERSIONID shall $introstndidstmt your TermuxArch files in" "$INSTALLDIR" ". Ensure background data is not restricted. Run " "bash setupTermuxArch.sh help" "for additional information. Check the wireless connection if you do not see one o'clock 🕐 below. " | |
} | |
introstndidstmt() { # depends $introstndid | |
printf "the TermuxArch files in \\e[0;32m%s\\e[1;34m. " "$INSTALLDIR" | |
} | |
_LOADCONF_() { | |
if [[ -f "${WDIR}setupTermuxArchConfigs.sh" ]] ; then | |
. "${WDIR}setupTermuxArchConfigs.sh" | |
_PRINTCONFLOADED_ | |
else | |
. knownconfigurations.sh | |
fi | |
} | |
_MANUAL_() { | |
printf '\033]2; `bash setupTermuxArch.sh manual` 📲 \007' | |
_EDITORS_ | |
if [[ -f "${WDIR}setupTermuxArchConfigs.sh" ]] ; then | |
"$ed" "${WDIR}setupTermuxArchConfigs.sh" | |
. "${WDIR}setupTermuxArchConfigs.sh" | |
_PRINTCONFLOADED_ | |
else | |
cp knownconfigurations.sh "${WDIR}setupTermuxArchConfigs.sh" | |
sed -i "7s/.*/\# The architecture of this device is $CPUABI; Adjust configurations in the appropriate section. Change CMIRROR (https:\/\/wiki.archlinux.org\/index.php\/Mirrors and https:\/\/archlinuxarm.org\/about\/CMIRRORs) to desired geographic location to resolve 404 and checksum issues. /" "${WDIR}setupTermuxArchConfigs.sh" | |
"$ed" "${WDIR}setupTermuxArchConfigs.sh" | |
. "${WDIR}setupTermuxArchConfigs.sh" | |
_PRINTCONFLOADED_ | |
fi | |
} | |
_NAMEINSTALLDIR_() { | |
if [[ "$ROOTDIR" = "" ]] ; then | |
ROOTDIR=arch | |
fi | |
INSTALLDIR="$(echo "$HOME/${ROOTDIR%/}" |sed 's#//*#/#g')" | |
} | |
_NAMESTARTARCH_() { # ${@%/} removes trailing slash | |
DARCH="$(echo "${ROOTDIR%/}" |sed 's#//*#/#g')" | |
if [[ "$DARCH" = "/arch" ]] ; then | |
AARCH="" | |
STARTBI2=arch | |
else | |
AARCH="$(echo "$DARCH" |sed 's/\//\+/g')" | |
STARTBI2=arch | |
fi | |
declare -g STARTBIN=start"$STARTBI2$AARCH" | |
} | |
_OPT1_() { | |
if [[ -z "${2:-}" ]] ; then | |
_ARG2DIR_ "$@" | |
elif [[ "$2" = [Bb]* ]] ; then | |
echo Setting mode to bloom. | |
introbloom "$@" | |
elif [[ "$2" = [Dd]* ]] || [[ "$2" = [Ss]* ]] ; then | |
echo Setting mode to sysinfo. | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
elif [[ "$2" = [Ii]* ]] ; then | |
echo Setting mode to install. | |
shift | |
_ARG2DIR_ "$@" | |
elif [[ "$2" = [Mm]* ]] ; then | |
echo Setting mode to manual. | |
OPT=manual | |
_OPT2_ "$@" | |
elif [[ "$2" = [Rr][Ee]* ]] ; then | |
echo | |
echo Setting mode to refresh. | |
shift | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
elif [[ "$2" = [Rr]* ]] ; then | |
LCR="1" | |
printf "\\n\\e[1;32m%s\\e[1;34m: \\e[0;32m%s \`%s\` %s\\n\\e[0m" "Setting mode" "minimal refresh; Use" "${0##*/} re[fresh]" "for full refresh." | |
shift | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
else | |
_ARG2DIR_ "$@" | |
fi | |
} | |
_OPT2_() { | |
if [[ -z "${3:-}" ]] ; then | |
shift | |
_ARG2DIR_ "$@" | |
intro "$@" | |
elif [[ "$3" = [Ii]* ]] ; then | |
echo Setting mode to install. | |
shift 2 | |
_ARG2DIR_ "$@" | |
intro "$@" | |
elif [[ "$3" = [Rr][Ee]* ]] ; then | |
echo | |
echo Setting mode to refresh. | |
shift 2 | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
elif [[ "$3" = [Rr]* ]] ; then | |
LCR="1" | |
printf "\\n\\e[1;32m%s\\e[1;34m: \\e[0;32m%s \`%s\` %s\\n\\e[0m" "Setting mode" "minimal refresh; Use" "${0##*/} re[fresh]" "for full refresh." | |
shift 2 | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
else | |
shift | |
_ARG2DIR_ "$@" | |
intro "$@" | |
fi | |
} | |
pe() { | |
printf "\\n\\e[7;1;31m%s\\e[0;1;32m %s\\n\\n\\e[0m" "PREREQUISITE EXCEPTION!" "RUN ${0##*/} $ARGS AGAIN…" | |
printf "\\e]2;%s %s\\007" "RUN ${0##*/} $ARGS" "AGAIN…" | |
exit | |
} | |
_PECHK_() { | |
if [[ "$APTON" != "" ]] ; then | |
pe @APTON | |
fi | |
for pkg in "${!ADM[@]}" ; do | |
if [[ -x "$PREFIX"/bin/"${ADM[$pkg]}" ]] ; then | |
: | |
fi | |
done | |
} | |
_PREPTMPDIR_() { | |
mkdir -p "$INSTALLDIR/tmp" | |
chmod 777 "$INSTALLDIR/tmp" | |
chmod +t "$INSTALLDIR/tmp" | |
TAMPDIR="$INSTALLDIR/tmp/setupTermuxArch$$" | |
mkdir -p "$TAMPDIR" | |
} | |
_PREPTERMUXARCH_() { | |
_NAMEINSTALLDIR_ | |
_NAMESTARTARCH_ | |
_PREPTMPDIR_ | |
} | |
_PRINTCONFLOADED_() { | |
printf "\\n\\e[0;34m%s \\e[1;34m%s \\e[0;32m%s\\e[1;32m%s \\e[1;34m%s \\e[1;32m%s\\n" " 🕛 > 🕑" "TermuxArch configuration" "$WDIR" "setupTermuxArchConfigs.sh" "loaded:" "OK" | |
} | |
_PRINTSHA512SYSCHKER_() { | |
printf "\\n\\e[07;1m\\e[31;1m\\n%s \\e[34;1m\\e[30;1m%s \\n\\e[0;0m\\n" " 🔆 WARNING sha512sum mismatch! Setup initialization mismatch!" " Try again, initialization was not successful this time. Wait a little while. Then run \`bash setupTermuxArch.sh\` again…" | |
printf '\033]2; Run `bash setupTermuxArch.sh %s` again…\007' "$ARGS" | |
exit | |
} | |
_PRINTSTARTBIN_USAGE_() { | |
printf "\\n\\e[1;38;5;155m" | |
_NAMESTARTARCH_ | |
if [[ -x "$(command -v "$STARTBIN")" ]] ; then | |
echo "$STARTBIN" help | |
"$STARTBIN" help | |
fi | |
} | |
_PRINTUSAGE_() { | |
printf "\\n\\e[1;33m %s \\e[0;32m%s \\e[1;34m%s\\n" "HELP" "${0##*/} help" "shall output the help screen." | |
printf "\\n\\e[1;33m %s \\e[0;32m%s \\e[1;34m%s\\n" "TERSE" "${0##*/} he[lp]" "shall output the terse help screen." | |
printf "\\n\\e[1;33m %s \\e[0;32m%s \\e[1;34m%s\\n" "VERBOSE" "${0##*/} h" "shall output the verbose help screen." | |
printf "\\n\\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\n\\n%s \\e[0;32m%s\\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s\\e[1;34m%s\\n" "Usage information for" "${0##*/}" "$VERSIONID. Arguments can abbreviated to one, two and three letters each; Two and three letter arguments are acceptable. For example," "bash ${0##*/} cs" "shall use" "curl" "to download TermuxArch and produce a" "setupTermuxArchSysInfo$STIME.log" "system information file." "User configurable variables are in" "setupTermuxArchConfigs.sh" ". To create this file from" "kownconfigurations.sh" "in the working directory, run" "bash ${0##*/} manual" "to create and edit" "setupTermuxArchConfigs.sh" "." | |
printf "\\n\\e[1;33m %s\\e[1;34m %s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s\\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s\\n" "INSTALL" "Run" "./${0##*/}" "without arguments in a bash shell to install Arch Linux in Termux. " "bash ${0##*/} curl" "shall envoke" "curl" "as the download manager. Copy" "knownconfigurations.sh" "to" "setupTermuxArchConfigs.sh" "with" "bash ${0##*/} manual" "to edit preferred CMIRROR site and to access more options. After editing" "setupTermuxArchConfigs.sh" ", run" "bash ${0##*/}" "and" "setupTermuxArchConfigs.sh" "loads automatically from the working directory. Change CMIRROR to desired geographic location to resolve download errors." | |
printf "\\n\\e[1;33m %s \\e[0;32m%s \\e[1;34m%s\\n" "PURGE" "${0##*/} purge" "shall uninstall Arch Linux from Termux." | |
printf "\\n\\e[1;33m %s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s \\e[1;34m%s \\e[0;32m%s\\e[1;34m%s \\n\\n" "SYSINFO" "${0##*/} sysinfo" "shall create" "setupTermuxArchSysInfo$STIME.log" "and populate it with system information. Post this file along with detailed information at" "https://github.com/sdrausty/TermuxArch/issues" ". If screenshots will help in resolving an issue better, include these along with information from the system information log file in a post as well." | |
if [[ "$lcc" = 1 ]] ; then | |
printf "\\n\\e[1;38;5;149m" | |
awk 'NR>=600 && NR<=900' "${0##*/}" | awk '$1 == "##"' | awk '{ $1 = ""; print }' | awk '1;{print ""}' | |
fi | |
_PRINTSTARTBIN_USAGE_ | |
} | |
_PROOTIF_() { | |
if [[ ! -x "$(command -v proot)" ]] || [[ ! -x "$PREFIX"/bin/proot ]] ; then | |
APTIN+="proot " | |
APTON+=(proot) | |
fi | |
} | |
_RMARCH_() { | |
_NAMESTARTARCH_ | |
_NAMEINSTALLDIR_ | |
while true; do | |
printf "\\n\\e[1;30m" | |
read -n 1 -p "Uninstall $INSTALLDIR? [Y|n] " RUANSWER | |
if [[ "$RUANSWER" = [Ee]* ]] || [[ "$RUANSWER" = [Nn]* ]] || [[ "$RUANSWER" = [Qq]* ]] ; then | |
break | |
elif [[ "$RUANSWER" = [Yy]* ]] || [[ "$RUANSWER" = "" ]] ; then | |
printf "\\e[30mUninstalling $INSTALLDIR…\\n" | |
if [[ -e "$PREFIX/bin/$STARTBIN" ]] ; then | |
rm -f "$PREFIX/bin/$STARTBIN" | |
else | |
printf "Uninstalling $PREFIX/bin/$STARTBIN: nothing to do for $PREFIX/bin/$STARTBIN.\\n" | |
fi | |
if [[ -e "$HOME/bin/$STARTBIN" ]] ; then | |
rm -f "$HOME/bin/$STARTBIN" | |
else | |
printf "Uninstalling $HOME/bin/$STARTBIN: nothing to do for $HOME/bin/$STARTBIN.\\n" | |
fi | |
if [[ -d "$INSTALLDIR" ]] ; then | |
_RMARCHRM_ | |
else | |
printf "Uninstalling $INSTALLDIR: nothing to do for $INSTALLDIR.\\n" | |
fi | |
printf "Uninstalling $INSTALLDIR: \\e[1;32mDone\\n\\e[30m" | |
break | |
else | |
printf "\\nYou answered \\e[33;1m$RUANSWER\\e[30m.\\n\\nAnswer \\e[32mYes\\e[30m or \\e[1;31mNo\\e[30m. [\\e[32my\\e[30m|\\e[1;31mn\\e[30m]\\n" | |
fi | |
done | |
printf "\\e[0m\\n" | |
} | |
_RMARCHRM_() { | |
_SETROOT_EXCEPTION_ | |
rm -rf "${INSTALLDIR:?}"/* 2>/dev/null ||: | |
find "$INSTALLDIR" -type d -exec chmod 700 {} \; 2>/dev/null ||: | |
rm -rf "$INSTALLDIR" 2>/dev/null ||: | |
} | |
_RMARCHQ_() { | |
if [[ -d "$INSTALLDIR" ]] ; then | |
printf "\\n\\e[0;33m %s \\e[1;33m%s \\e[0;33m%s\\n\\n\\e[1;30m%s\\n" "TermuxArch:" "DIRECTORY WARNING! $INSTALLDIR/" "directory detected." "Purge $INSTALLDIR as requested?" | |
_RMARCH_ | |
fi | |
} | |
_TAPIN_() { | |
if [[ "$APTIN" != "" ]] ; then | |
printf "\\n\\e[1;34mInstalling \\e[0;32m%s\\b\\e[1;34m…\\n\\n\\e[1;32m" "$APTIN" | |
pkg install "$APTIN" -o APT::Keep-Downloaded-Packages="true" --yes | |
printf "\\n\\e[1;34mInstalling \\e[0;32m%s\\b\\e[1;34m: \\e[1;32mDONE\\n\\e[0m" "$APTIN" | |
fi | |
} | |
_SETROOT_EXCEPTION_() { | |
if [[ "$INSTALLDIR" = "$HOME" ]] || [[ "$INSTALLDIR" = "$HOME"/ ]] || [[ "$INSTALLDIR" = "$HOME"/.. ]] || [[ "$INSTALLDIR" = "$HOME"/../ ]] || [[ "$INSTALLDIR" = "$HOME"/../.. ]] || [[ "$INSTALLDIR" = "$HOME"/../../ ]] ; then | |
printf '\033]2;%s\007' "Rootdir exception. Run bash setupTermuxArch.sh $ARGS again with different options…" | |
printf "\\n\\e[1;31m%s\\n\\n\\e[0m" "Rootdir exception. Run the script $ARGS again with different options…" | |
exit | |
fi | |
} | |
_SETROOT_() { | |
if [[ "$CPUABI" = "$CPUABIX86" ]] ; then | |
# ROOTDIR=/root.i686 | |
ROOTDIR=/arch | |
elif [[ "$CPUABI" = "$CPUABIX86_64" ]] ; then | |
# ROOTDIR=/root.x86_64 | |
ROOTDIR=/arch | |
else | |
ROOTDIR=/arch | |
fi | |
} | |
standardid() { | |
introstndid="$1" | |
introstndidstmt="$(printf "%s \\e[0;32m%s" "$1 the TermuxArch files in" "$INSTALLDIR")" | |
introstnd | |
} | |
_STANDARDIF_() { | |
if [[ -x "$(command -v proot)" ]] && [[ -x "$PREFIX"/bin/proot ]] ; then | |
: | |
else | |
APTIN+="proot " | |
APTON+=(proot) | |
fi | |
} | |
_STRPERROR_() { # Run on script error. | |
local RV="$?" | |
printf "\\e[?25h\\n\\e[1;48;5;138m %s\\e[0m\\n" "TermuxArch WARNING: Generated script signal ${RV:-unknown} near or at line number ${1:-unknown} by \`${2:-command}\`!" | |
if [[ "$RV" = 4 ]] ; then | |
printf "\\n\\e[1;48;5;139m %s\\e[0m\\n" "Ensure background data is not restricted. Check the wireless connection." | |
fi | |
printf "\\n" | |
exit 201 | |
} | |
_STRPEXIT_() { # Run on exit. | |
local RV="$?" | |
rm -rf "$TAMPDIR" | |
sleep 0.04 | |
if [[ "$RV" = 0 ]] ; then | |
printf "\\a\\e[0;32m%s %s \\a\\e[0m$VERSIONID\\e[1;34m: \\a\\e[1;32m%s\\e[0m\\n\\n\\a\\e[0m" "${0##*/}" "$ARGS" "DONE 🏁 " | |
printf "\\e]2; %s: %s \\007" "${0##*/} $ARGS" "DONE 🏁 " | |
else | |
printf "\\a\\e[0;32m%s %s \\a\\e[0m$VERSIONID\\e[1;34m: \\a\\e[1;32m%s %s\\e[0m\\n\\n\\a\\e[0m" "${0##*/}" "$ARGS" "[Exit Signal $RV]" "DONE 🏁 " | |
printf "\033]2; %s: %s %s \\007" "${0##*/} $ARGS" "[Exit Signal $RV]" "DONE 🏁 " | |
fi | |
printf "\\e[?25h\\e[0m" | |
set +Eeuo pipefail | |
exit | |
} | |
_STRPSIGNAL_() { # Run on signal. | |
printf "\\e[?25h\\e[1;7;38;5;0mTermuxArch WARNING: Signal $? received!\\e[0m\\n" | |
rm -rf "$TAMPDIR" | |
exit 211 | |
} | |
_STRPQUIT_() { # Run on quit. | |
printf "\\e[?25h\\e[1;7;38;5;0mTermuxArch WARNING: Quit signal $? received!\\e[0m\\n" | |
exit 221 | |
} | |
## User Information: Configurable variables such as mirrors and download manager options are in `setupTermuxArchConfigs.sh`. Working with `kownconfigurations.sh` in the working directory is simple. `bash setupTermuxArch.sh manual` shall create `setupTermuxArchConfigs.sh` in the working directory for editing; See `setupTermuxArch.sh help` for more information. | |
declare -A ADM ## Declare associative array for all available download tools. | |
declare -A ATM ## Declare associative array for all available tar tools. | |
declare -a ARGS="$@" ## Declare arguments as string. | |
declare APTIN="" ## apt install string | |
declare APTON="" ## exception string | |
declare COMMANDIF="" | |
declare CPUABI="" | |
declare CPUABI5="armeabi" ## Used for development. | |
declare CPUABI7="armeabi-v7a" ## Used for development. | |
declare CPUABI8="arm64-v8a" ## Used for development. | |
declare CPUABIX86="x86" ## Used for development. | |
declare CPUABIX86_64="x86_64" ## Used for development. | |
declare DFL="" ## Used for development. | |
declare DMVERBOSE="-q" ## -v for verbose download manager output from curl and wget; for verbose output throughout runtime also change in `setupTermuxArchConfigs.sh` when using `setupTermuxArch.sh m[anual]`. | |
declare ed="" | |
declare dm="" | |
declare FSTND="" | |
declare -A FILE | |
declare INSTALLDIR="" | |
declare lcc="" | |
declare lcp="" | |
declare OPT="" | |
declare ROOTDIR="" | |
declare WDIR="$PWD/" | |
declare STI="" ## Generates pseudo random number. | |
declare STIME="" ## Generates pseudo random number. | |
trap "_STRPERROR_ $LINENO $BASH_COMMAND $?" ERR | |
trap _STRPEXIT_ EXIT | |
trap _STRPSIGNAL_ HUP INT TERM | |
trap _STRPQUIT_ QUIT | |
if [[ -z "${TAMPDIR:-}" ]] ; then | |
TAMPDIR="" | |
fi | |
_SETROOT_ | |
## TERMUXARCH FEATURES INCLUDE: | |
## 1) Sets timezone and locales from device, | |
## 2) Tests for correct OS, | |
COMMANDIF="$(command -v getprop)" ||: | |
if [[ "$COMMANDIF" = "" ]] ; then | |
printf "\\n\\e[1;48;5;138m %s\\e[0m\\n\\n" "TermuxArch WARNING: Run \`bash ${0##*/}\` and \`./${0##*/}\` from the BASH shell in the OS system in Termux, e.g., Amazon Fire, Android and Chromebook." | |
exit | |
fi | |
## 3) Generates pseudo random number to create uniq strings, | |
if [[ -r /proc/sys/kernel/random/uuid ]] ; then | |
STI="$(cat /proc/sys/kernel/random/uuid)" | |
STIM="${STI//-}" | |
STIME="${STIM:0:3}" | |
else | |
STI="$(date +%s)" | |
STIME="$(echo "${STI:7:4}"|rev)" | |
fi | |
ONES="$(date +%s)" | |
ONESA="${ONES: -1}" | |
STIME="$ONESA$STIME" | |
## 4) Gets device information via `getprop`, | |
CPUABI="$(getprop ro.product.cpu.abi)" | |
## 5) And all options are optional for install. | |
## THESE OPTIONS ARE AVAILABLE FOR YOUR CONVENIENCE: | |
## OPTIONS[a]: `setupTermuxArch.sh [HOW] [DO] [WHERE]` | |
## GRAMMAR[a]: `setupTermuxArch.sh [HOW] [DO] [WHERE]` | |
## OPTIONS[b]: `setupTermuxArch.sh [~/|./|/absolute/path/]image.tar.gz [WHERE]` | |
## GRAMMAR[b]: `setupTermuxArch.sh [WHAT] [WHERE]` | |
## DEFAULTS ARE IMPLIED AND CAN BE OMITTED. | |
## SYNTAX[1]: [HOW (aria2|axel|curl|lftp|wget (default1: present on system (default2: lftp)))] | |
## SYNTAX[2]: [DO (help|install|manual|purge|refresh|sysinfo (default: install))] | |
## SYNTAX[3]: [WHERE (default: arch)] Install in userspace, not external storage. | |
## USAGE[1]: `setupTermuxArch.sh wget sysinfo` shall use wget as the download manager and produce a system information file in the working directory. This can be abbreviated to `setupTermuxArch.sh ws` and `setupTermuxArch.sh w s`. | |
## USAGE[2]: `setupTermuxArch.sh wget manual customdir` shall install the installation in customdir with wget and use manual mode during instalation. | |
## USAGE[3]: `setupTermuxArch.sh wget refresh customdir` shall refresh this installation using wget as the download manager. | |
## >>>>>>>>>>>>>>>>>> | |
## >> OPTION HELP >> | |
## >>>>>>>>>>>>>>>>>> | |
## [] Run default Arch Linux install. | |
if [[ -z "${1:-}" ]] ; then | |
_PREPTERMUXARCH_ | |
intro "$@" | |
## [./path/systemimage.tar.gz [customdir]] Use path to system image file; install directory argument is optional. A systemimage.tar.gz file can be substituted for network install: `setupTermuxArch.sh ./[path/]systemimage.tar.gz` and `setupTermuxArch.sh /absolutepath/systemimage.tar.gz`. | |
elif [[ "${ARGS:0:1}" = . ]] ; then | |
echo | |
echo Setting mode to copy system image. | |
lcc="1" | |
lcp="1" | |
_ARG2DIR_ "$@" | |
intro "$@" | |
## [systemimage.tar.gz [customdir]] Install directory argument is optional. A systemimage.tar.gz file can substituted for network install. | |
# elif [[ "${WDIR}${ARGS}" = *.tar.gz* ]] ; then | |
elif [[ "$ARGS" = *.tar.gz* ]] ; then | |
echo | |
echo Setting mode to copy system image. | |
lcc="1" | |
lcp="0" | |
_ARG2DIR_ "$@" | |
intro "$@" | |
## [axd|axs] Get device system information with `axel`. | |
elif [[ "${1//-}" = [Aa][Xx][Dd]* ]] || [[ "${1//-}" = [Aa][Xx][Ss]* ]] ; then | |
echo | |
echo Getting device system information with \`axel\`. | |
dm=axel | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [ax[el] [customdir]|axi [customdir]] Install Arch Linux with `axel`. | |
elif [[ "${1//-}" = [Aa][Xx]* ]] || [[ "${1//-}" = [Aa][Xx][Ii]* ]] ; then | |
echo | |
echo Setting \`axel\` as download manager. | |
dm=axel | |
_OPT1_ "$@" | |
intro "$@" | |
## [ad|as] Get device system information with `aria2c`. | |
elif [[ "${1//-}" = [Aa][Dd]* ]] || [[ "${1//-}" = [Aa][Ss]* ]] ; then | |
echo | |
echo Getting device system information with \`aria2c\`. | |
dm=aria2 | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [a[ria2c] [customdir]|ai [customdir]] Install Arch Linux with `aria2c`. | |
elif [[ "${1//-}" = [Aa]* ]] ; then | |
echo | |
echo Setting \`aria2c\` as download manager. | |
dm=aria2 | |
_OPT1_ "$@" | |
intro "$@" | |
## [b[loom]] Create and run a local copy of TermuxArch in TermuxArchBloom. Useful for running a customized setupTermuxArch.sh locally, for developing and hacking TermuxArch. | |
elif [[ "${1//-}" = [Bb]* ]] ; then | |
echo | |
echo Setting mode to bloom. | |
introbloom "$@" | |
## [cd|cs] Get device system information with `curl`. | |
elif [[ "${1//-}" = [Cc][Dd]* ]] || [[ "${1//-}" = [Cc][Ss]* ]] ; then | |
echo | |
echo Getting device system information with \`curl\`. | |
dm=curl | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [c[url] [customdir]|ci [customdir]] Install Arch Linux with `curl`. | |
elif [[ "${1//-}" = [Cc][Ii]* ]] || [[ "${1//-}" = [Cc]* ]] ; then | |
echo | |
echo Setting \`curl\` as download manager. | |
dm=curl | |
_OPT1_ "$@" | |
intro "$@" | |
## [d[ebug]|s[ysinfo]] Generate system information. | |
elif [[ "${1//-}" = [Dd]* ]] || [[ "${1//-}" = [Ss]* ]] ; then | |
echo | |
echo Setting mode to sysinfo. | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [he[lp]|?] Display terse builtin help. | |
elif [[ "${1//-}" = [Hh][Ee]* ]] || [[ "${1//-}" = [?]* ]] ; then | |
_ARG2DIR_ "$@" | |
_PRINTUSAGE_ "$@" | |
## [h] Display verbose builtin help. | |
elif [[ "${1//-}" = [Hh]* ]] ; then | |
lcc="1" | |
_ARG2DIR_ "$@" | |
_PRINTUSAGE_ "$@" | |
## [i[nstall] [customdir]] Install Arch Linux in a custom directory. Instructions: Install in USERSPACE. $HOME is appended to installation directory. To install Arch Linux in $HOME/customdir use `bash setupTermuxArch.sh install customdir`. In bash shell use `./setupTermuxArch.sh install customdir`. All options can be abbreviated to one, two and three letters. Hence `./setupTermuxArch.sh install customdir` can be run as `./setupTermuxArch.sh i customdir` in BASH. | |
elif [[ "${1//-}" = [Ii]* ]] ; then | |
echo | |
echo Setting mode to install. | |
_OPT1_ "$@" | |
intro "$@" | |
## [ld|ls] Get device system information with `lftp`. | |
elif [[ "${1//-}" = [Ll][Dd]* ]] || [[ "${1//-}" = [Ll][Ss]* ]] ; then | |
echo | |
echo Getting device system information with \`lftp\`. | |
dm=lftp | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [l[ftp] [customdir]] Install Arch Linux with `lftp`. | |
elif [[ "${1//-}" = [Ll]* ]] ; then | |
echo | |
echo Setting \`lftp\` as download manager. | |
dm=lftp | |
_OPT1_ "$@" | |
intro "$@" | |
## [m[anual]] Manual Arch Linux install, useful for resolving download issues. | |
elif [[ "${1//-}" = [Mm]* ]] ; then | |
echo | |
echo Setting mode to manual. | |
OPT=manual | |
_OPT1_ "$@" | |
intro "$@" | |
## [o[ption]] Option under development. | |
elif [[ "${1//-}" = [Oo]* ]] ; then | |
echo | |
echo Setting mode to option. | |
lcc="1" | |
_PRINTUSAGE_ "$@" | |
# _OPT0_ "$@" | |
## [p[urge] [customdir]] Remove Arch Linux. | |
elif [[ "${1//-}" = [Pp]* ]] ; then | |
echo | |
echo Setting mode to purge. | |
_ARG2DIR_ "$@" | |
_RMARCHQ_ | |
## [ref[resh] [customdir]] Refresh the Arch Linux in Termux PRoot scripts created by TermuxArch and the installation itself. Useful for refreshing the installation, kets, locales and the TermuxArch generated scripts to their newest versions. | |
elif [[ "${1//-}" = [Rr][Ee][Ff]* ]] ; then | |
echo | |
echo Setting mode to refresh. | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
## [ref [customdir]] Refresh the Arch Linux in Termux PRoot scripts created by TermuxArch. Useful for refreshing locales, the TermuxArch generated scripts with user directories to their newest versions. | |
elif [[ "${1//-}" = [Rr][Ee] ]] ; then | |
LCR="2" | |
echo | |
echo Setting mode to minimal refresh and refresh user directories. | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
## [r [customdir]] Refresh the Arch Linux in Termux PRoot scripts created by TermuxArch. Useful for refreshing locales and the TermuxArch generated scripts to their newest versions. | |
elif [[ "${1//-}" = [Rr] ]] ; then | |
LCR="1" | |
printf "\\n\\e[1;32m%s\\e[1;34m: \\e[0;32m%s \`%s\` %s\\n\\e[0m" "Setting mode" "minimal refresh; Use" "${0##*/} re[fresh]" "for full refresh." | |
_ARG2DIR_ "$@" | |
introrefresh "$@" | |
## [wd|ws] Get device system information with `wget`. | |
elif [[ "${1//-}" = [Ww][Dd]* ]] || [[ "${1//-}" = [Ww][Ss]* ]] ; then | |
echo | |
echo Getting device system information with \`wget\`. | |
dm=wget | |
shift | |
_ARG2DIR_ "$@" | |
_INTROSYSINFO_ "$@" | |
## [w[get] [customdir]] Install Arch Linux with `wget`. | |
elif [[ "${1//-}" = [Ww]* ]] ; then | |
echo | |
echo Setting \`wget\` as download manager. | |
dm=wget | |
_OPT1_ "$@" | |
intro "$@" | |
else | |
_PRINTUSAGE_ | |
fi | |
# EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
TermuxArch
This Termux bash shell script will attempt to set up Arch Linux on Amazon Fire OS, Android and Chromebook using Termux.
Install Arch Linux into a Termux PRoot container with
bash setupTermuxArch.sh
. After succesfull installation start the container withstartarch
.See https://sdrausty.github.io/TermuxArch/docs/install for options how to run
setupTermuxArch.sh
on device.See https://sdrausty.github.io/docsTermuxArch/startingArch for options how to start the Arch Linux container
startarch
on device.This repository uses submodules. To get all the pieces of this repository run:
after cloning in the root directory of this repository.
Thank you for making this project work better and please contribute 🔆 Contributors and Notice to Contributors have more information about this project.