From 207faa64576483cc5009d0d4f47195ea5a5cac1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Fern=C3=A1ndez?= Date: Wed, 11 Jan 2023 09:49:14 +0100 Subject: [PATCH] Decouple dependency installation in a different script (#340) Co-authored-by: Howard20181 <40033067+Howard20181@users.noreply.github.com> --- scripts/install_deps.sh | 129 ++++++++++++++++++++++++++++++++++++++++ scripts/run.sh | 106 +-------------------------------- 2 files changed, 131 insertions(+), 104 deletions(-) create mode 100755 scripts/install_deps.sh diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh new file mode 100755 index 0000000..62e88ad --- /dev/null +++ b/scripts/install_deps.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# +# This file is part of MagiskOnWSALocal. +# +# MagiskOnWSALocal is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# MagiskOnWSALocal is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with MagiskOnWSALocal. If not, see . +# +# Copyright (C) 2022 LSPosed Contributors +# + +if [ ! "$BASH_VERSION" ]; then + echo "Please do not use sh to run this script, just execute it directly" 1>&2 + exit 1 +fi +cd "$(dirname "$0")" || exit 1 +SUDO="$(which sudo 2>/dev/null)" +abort() { + echo "Dependencies: an error has occurred, exit" + exit 1 +} +require_su() { + if test "$(id -u)" != "0"; then + if [ -z "$SUDO" ] && [ "$($SUDO id -u)" != "0" ]; then + echo "ROOT/SUDO is required to run this script" + abort + fi + fi +} +echo "Checking and ensuring dependencies" +check_dependencies() { + command -v whiptail >/dev/null 2>&1 || command -v dialog >/dev/null 2>&1 || NEED_INSTALL+=("whiptail") + command -v seinfo >/dev/null 2>&1 || NEED_INSTALL+=("setools") + command -v lzip >/dev/null 2>&1 || NEED_INSTALL+=("lzip") + if [ ! -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then + command -v wine64 >/dev/null 2>&1 || NEED_INSTALL+=("wine") + command -v winetricks >/dev/null 2>&1 || NEED_INSTALL+=("winetricks") + fi + command -v patchelf >/dev/null 2>&1 || NEED_INSTALL+=("patchelf") + command -v resize2fs >/dev/null 2>&1 || NEED_INSTALL+=("e2fsprogs") + command -v pip >/dev/null 2>&1 || NEED_INSTALL+=("python3-pip") + command -v aria2c >/dev/null 2>&1 || NEED_INSTALL+=("aria2") + command -v 7z > /dev/null 2>&1 || NEED_INSTALL+=("p7zip-full") + command -v setfattr > /dev/null 2>&1 || NEED_INSTALL+=("attr") + command -v xz > /dev/null 2>&1 || NEED_INSTALL+=("xz-utils") + command -v unzip > /dev/null 2>&1 || NEED_INSTALL+=("unzip") +} +check_dependencies +osrel=$(sed -n '/^ID_LIKE=/s/^.*=//p' /etc/os-release); +declare -A os_pm_install; +# os_pm_install["/etc/redhat-release"]=yum +# os_pm_install["/etc/arch-release"]=pacman +# os_pm_install["/etc/gentoo-release"]=emerge +os_pm_install["/etc/SuSE-release"]=zypper +os_pm_install["/etc/debian_version"]=apt-get +# os_pm_install["/etc/alpine-release"]=apk + +declare -A PM_UPDATE_MAP; +PM_UPDATE_MAP["yum"]="check-update" +PM_UPDATE_MAP["pacman"]="-Syu --noconfirm" +PM_UPDATE_MAP["emerge"]="-auDN @world" +PM_UPDATE_MAP["zypper"]="ref" +PM_UPDATE_MAP["apt-get"]="update" +PM_UPDATE_MAP["apk"]="update" + +declare -A PM_INSTALL_MAP; +PM_INSTALL_MAP["yum"]="install -y" +PM_INSTALL_MAP["pacman"]="-S --noconfirm --needed" +PM_INSTALL_MAP["emerge"]="-a" +PM_INSTALL_MAP["zypper"]="in -y" +PM_INSTALL_MAP["apt-get"]="install -y" +PM_INSTALL_MAP["apk"]="add" + +check_package_manager() { + for f in "${!os_pm_install[@]}"; do + if [[ -f $f ]]; then + PM="${os_pm_install[$f]}" + break + fi + done + if [[ "$osrel" = *"suse"* ]]; then + PM="zypper" + fi + if [ -n "$PM" ]; then + readarray -td ' ' UPDATE_OPTION <<<"${PM_UPDATE_MAP[$PM]} "; unset 'UPDATE_OPTION[-1]'; + readarray -td ' ' INSTALL_OPTION <<<"${PM_INSTALL_MAP[$PM]} "; unset 'INSTALL_OPTION[-1]'; + fi +} + +check_package_manager +if [ -n "${NEED_INSTALL[*]}" ]; then + if [ -z "$PM" ]; then + echo "Unable to determine package manager: Unsupported distros" + abort + else + if [ "$PM" = "zypper" ]; then + NEED_INSTALL_FIX=${NEED_INSTALL[*]} + { + NEED_INSTALL_FIX=${NEED_INSTALL_FIX//setools/setools-console} 2>&1 + NEED_INSTALL_FIX=${NEED_INSTALL_FIX//whiptail/dialog} 2>&1 + NEED_INSTALL_FIX=${NEED_INSTALL_FIX//xz-utils/xz} 2>&1 + } >> /dev/null + + readarray -td ' ' NEED_INSTALL <<<"$NEED_INSTALL_FIX "; unset 'NEED_INSTALL[-1]'; + elif [ "$PM" = "apk" ]; then + NEED_INSTALL_FIX=${NEED_INSTALL[*]} + readarray -td ' ' NEED_INSTALL <<<"${NEED_INSTALL_FIX//p7zip-full/p7zip} "; unset 'NEED_INSTALL[-1]'; + fi + require_su + if ! ($SUDO "$PM" "${UPDATE_OPTION[@]}" && $SUDO "$PM" "${INSTALL_OPTION[@]}" "${NEED_INSTALL[@]}") then abort; fi + fi +fi +pip list --disable-pip-version-check | grep -E "^requests " >/dev/null 2>&1 || python3 -m pip install requests + +if [ ! -f /proc/sys/fs/binfmt_misc/WSLInterop ] && which wine64 > /dev/null; then + winetricks list-installed | grep -E "^msxml6" >/dev/null 2>&1 || { + cp -r ../wine/.cache/* ~/.cache + winetricks msxml6 || abort + } +fi diff --git a/scripts/run.sh b/scripts/run.sh index 84e8ba6..96c4e8f 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -15,121 +15,19 @@ # You should have received a copy of the GNU Affero General Public License # along with MagiskOnWSALocal. If not, see . # -# Copyright (C) 2022 LSPosed Contributors +# Copyright (C) 2023 LSPosed Contributors # # DEBUG=--debug # CUSTOM_MAGISK=--magisk-custom - if [ ! "$BASH_VERSION" ]; then echo "Please do not use sh to run this script, just execute it directly" 1>&2 exit 1 fi cd "$(dirname "$0")" || exit 1 -SUDO="$(which sudo 2>/dev/null)" -abort() { - echo "Dependencies: an error has occurred, exit" - exit 1 -} -require_su() { - if test "$(id -u)" != "0"; then - if [ -z "$SUDO" ] && [ "$($SUDO id -u)" != "0" ]; then - echo "ROOT/SUDO is required to run this script" - abort - fi - fi -} -echo "Checking and ensuring dependencies" -check_dependencies() { - command -v whiptail >/dev/null 2>&1 || command -v dialog >/dev/null 2>&1 || NEED_INSTALL+=("whiptail") - command -v seinfo >/dev/null 2>&1 || NEED_INSTALL+=("setools") - command -v lzip >/dev/null 2>&1 || NEED_INSTALL+=("lzip") - if [ ! -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then - command -v wine64 >/dev/null 2>&1 || NEED_INSTALL+=("wine") - command -v winetricks >/dev/null 2>&1 || NEED_INSTALL+=("winetricks") - fi - command -v patchelf >/dev/null 2>&1 || NEED_INSTALL+=("patchelf") - command -v resize2fs >/dev/null 2>&1 || NEED_INSTALL+=("e2fsprogs") - command -v pip >/dev/null 2>&1 || NEED_INSTALL+=("python3-pip") - command -v aria2c >/dev/null 2>&1 || NEED_INSTALL+=("aria2") - command -v 7z > /dev/null 2>&1 || NEED_INSTALL+=("p7zip-full") - command -v setfattr > /dev/null 2>&1 || NEED_INSTALL+=("attr") - command -v xz > /dev/null 2>&1 || NEED_INSTALL+=("xz-utils") - command -v unzip > /dev/null 2>&1 || NEED_INSTALL+=("unzip") -} -check_dependencies -osrel=$(sed -n '/^ID_LIKE=/s/^.*=//p' /etc/os-release); -declare -A os_pm_install; -# os_pm_install["/etc/redhat-release"]=yum -# os_pm_install["/etc/arch-release"]=pacman -# os_pm_install["/etc/gentoo-release"]=emerge -os_pm_install["/etc/SuSE-release"]=zypper -os_pm_install["/etc/debian_version"]=apt-get -# os_pm_install["/etc/alpine-release"]=apk -declare -A PM_UPDATE_MAP; -PM_UPDATE_MAP["yum"]="check-update" -PM_UPDATE_MAP["pacman"]="-Syu --noconfirm" -PM_UPDATE_MAP["emerge"]="-auDN @world" -PM_UPDATE_MAP["zypper"]="ref" -PM_UPDATE_MAP["apt-get"]="update" -PM_UPDATE_MAP["apk"]="update" +./install_deps.sh -declare -A PM_INSTALL_MAP; -PM_INSTALL_MAP["yum"]="install -y" -PM_INSTALL_MAP["pacman"]="-S --noconfirm --needed" -PM_INSTALL_MAP["emerge"]="-a" -PM_INSTALL_MAP["zypper"]="in -y" -PM_INSTALL_MAP["apt-get"]="install -y" -PM_INSTALL_MAP["apk"]="add" - -check_package_manager() { - for f in "${!os_pm_install[@]}"; do - if [[ -f $f ]]; then - PM="${os_pm_install[$f]}" - break - fi - done - if [[ "$osrel" = *"suse"* ]]; then - PM="zypper" - fi - if [ -n "$PM" ]; then - readarray -td ' ' UPDATE_OPTION <<<"${PM_UPDATE_MAP[$PM]} "; unset 'UPDATE_OPTION[-1]'; - readarray -td ' ' INSTALL_OPTION <<<"${PM_INSTALL_MAP[$PM]} "; unset 'INSTALL_OPTION[-1]'; - fi -} - -check_package_manager -if [ -n "${NEED_INSTALL[*]}" ]; then - if [ -z "$PM" ]; then - echo "Unable to determine package manager: Unsupported distros" - abort - else - if [ "$PM" = "zypper" ]; then - NEED_INSTALL_FIX=${NEED_INSTALL[*]} - { - NEED_INSTALL_FIX=${NEED_INSTALL_FIX//setools/setools-console} 2>&1 - NEED_INSTALL_FIX=${NEED_INSTALL_FIX//whiptail/dialog} 2>&1 - NEED_INSTALL_FIX=${NEED_INSTALL_FIX//xz-utils/xz} 2>&1 - } >> /dev/null - - readarray -td ' ' NEED_INSTALL <<<"$NEED_INSTALL_FIX "; unset 'NEED_INSTALL[-1]'; - elif [ "$PM" = "apk" ]; then - NEED_INSTALL_FIX=${NEED_INSTALL[*]} - readarray -td ' ' NEED_INSTALL <<<"${NEED_INSTALL_FIX//p7zip-full/p7zip} "; unset 'NEED_INSTALL[-1]'; - fi - require_su - if ! ($SUDO "$PM" "${UPDATE_OPTION[@]}" && $SUDO "$PM" "${INSTALL_OPTION[@]}" "${NEED_INSTALL[@]}") then abort; fi - fi -fi -pip list --disable-pip-version-check | grep -E "^requests " >/dev/null 2>&1 || python3 -m pip install requests - -if [ ! -f /proc/sys/fs/binfmt_misc/WSLInterop ] && which wine64 > /dev/null; then - winetricks list-installed | grep -E "^msxml6" >/dev/null 2>&1 || { - cp -r ../wine/.cache/* ~/.cache - winetricks msxml6 || abort - } -fi WHIPTAIL=$(command -v whiptail 2>/dev/null) DIALOG=$(command -v dialog 2>/dev/null) DIALOG=${WHIPTAIL:-$DIALOG}