From 7318561a63c67d88b531850d101bfa065c281986 Mon Sep 17 00:00:00 2001 From: Maxython Date: Tue, 26 Apr 2022 23:33:36 +0300 Subject: [PATCH] Added(generate-bootstrap.sh): Add package manager and repo base url mapping arrays and add validation --- scripts/generate-bootstraps.sh | 59 +++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/scripts/generate-bootstraps.sh b/scripts/generate-bootstraps.sh index d1a65b356..ae5733cfc 100755 --- a/scripts/generate-bootstraps.sh +++ b/scripts/generate-bootstraps.sh @@ -18,12 +18,22 @@ BOOTSTRAP_ANDROID10_COMPATIBLE=false # Override with option '--architectures'. TERMUX_ARCHITECTURES=("aarch64" "arm" "i686" "x86_64") -# This value specifies which package manager will be installed in bootstrap. -# The default is apt. +# The supported termux package managers. +TERMUX_PACKAGE_MANAGERS=("apt" "pacman") + +# The repository base urls mapping for package managers. +declare -A REPO_BASE_URLS=( + ["apt"]="https://packages.termux.org/apt/termux-main" + ["pacman"]="https://s3.amazonaws.com/termux-main.pacman" +) + +# The package manager that will be installed in bootstrap. +# The default is 'apt'. Can be changed by using the '--pm' option. TERMUX_PACKAGE_MANAGER="apt" -# Can be changed by using '--repository' option. -REPO_BASE_URL="https://packages.termux.org/apt/termux-main" +# The repository base url for package manager. +# Can be changed by using the '--repository' option. +REPO_BASE_URL="${REPO_BASE_URLS[${TERMUX_PACKAGE_MANAGER}]}" # A list of non-essential packages. By default it is empty, but can # be filled with option '--add'. @@ -285,7 +295,7 @@ show_usage() { echo " Multiple packages should be passed as" echo " comma-separated list." echo - echo " --pm Set up a package manager in bootstrap." + echo " --pm MANAGER Set up a package manager in bootstrap." echo " It can only be pacman or apt (the default is apt)." echo echo " --architectures ARCH_LIST Override default list of architectures" @@ -296,9 +306,10 @@ show_usage() { echo echo " -r, --repository URL Specify URL for APT repository from" echo " which packages will be downloaded." + echo " This must be passed after '--pm' option." echo echo "Architectures: ${TERMUX_ARCHITECTURES[*]}" - echo "Repository URL: ${REPO_BASE_URL}" + echo "Repository Base Url: ${REPO_BASE_URL}" echo "Prefix: ${TERMUX_PREFIX}" echo "Package manager: ${TERMUX_PACKAGE_MANAGER}" echo @@ -327,22 +338,15 @@ while (($# > 0)); do fi ;; --pm) - case "$2" in - "apt"|"pacman") - TERMUX_PACKAGE_MANAGER="$2" - if [ ${TERMUX_PACKAGE_MANAGER} = "apt" ]; then - REPO_BASE_URL="https://packages.termux.org/apt/termux-main" - else - REPO_BASE_URL="https://s3.amazonaws.com/termux-main.pacman" - fi - shift 1 - ;; - *) - echo "[!] Option '--pm' requires an argument." - show_usage - exit 1 - ;; - esac + if [ $# -gt 1 ] && [ -n "$2" ] && [[ $2 != -* ]]; then + TERMUX_PACKAGE_MANAGER="$2" + REPO_BASE_URL="${REPO_BASE_URLS[${TERMUX_PACKAGE_MANAGER}]}" + shift 1 + else + echo "[!] Option '--pm' requires an argument." 1>&2 + show_usage + exit 1 + fi ;; --architectures) if [ $# -gt 1 ] && [ -n "$2" ] && [[ $2 != -* ]]; then @@ -377,6 +381,17 @@ while (($# > 0)); do shift 1 done +if [[ "$TERMUX_PACKAGE_MANAGER" == *" "* ]] || [[ " ${TERMUX_PACKAGE_MANAGERS[*]} " != *" $TERMUX_PACKAGE_MANAGER "* ]]; then + echo "[!] Invalid package manager '$TERMUX_PACKAGE_MANAGER'" 1>&2 + echo "Supported package managers: '${TERMUX_PACKAGE_MANAGERS[*]}'" 1>&2 + exit 1 +fi + +if [ -z "$REPO_BASE_URL" ]; then + echo "[!] The repository base url is not set." 1>&2 + exit 1 +fi + for package_arch in "${TERMUX_ARCHITECTURES[@]}"; do BOOTSTRAP_ROOTFS="$BOOTSTRAP_TMPDIR/rootfs-${package_arch}" BOOTSTRAP_PKGDIR="$BOOTSTRAP_TMPDIR/packages-${package_arch}" -- 2.33.0