From cc429e4ea5ad404c9f80d47a748dff5f988269eb Mon Sep 17 00:00:00 2001 From: AuxXxilium Date: Thu, 31 Oct 2024 22:03:59 +0100 Subject: [PATCH] tree: remove usage of syno api Signed-off-by: AuxXxilium --- files/initrd/opt/arc/arc.sh | 73 +++++++++++------------ files/initrd/opt/arc/include/compat.sh | 3 - files/initrd/opt/arc/include/consts.sh | 1 + files/initrd/opt/arc/include/functions.py | 72 ---------------------- files/initrd/opt/arc/include/storage.sh | 36 +++++++---- files/initrd/opt/arc/include/update.sh | 6 +- scripts/func.sh | 4 +- 7 files changed, 67 insertions(+), 128 deletions(-) diff --git a/files/initrd/opt/arc/arc.sh b/files/initrd/opt/arc/arc.sh index 2ad31ff8..c2f0762d 100755 --- a/files/initrd/opt/arc/arc.sh +++ b/files/initrd/opt/arc/arc.sh @@ -97,18 +97,13 @@ function arcModel() { # Loop menu RESTRICT=1 PS="$(readConfigEntriesArray "platforms" "${P_FILE}" | sort)" - MJ="$(python ${ARC_PATH}/include/functions.py getmodelsoffline -p "${PS[*]}")" - if [[ -z "${MJ}" || "${MJ}" == "[]" ]]; then - dialog --backtitle "$(backtitlep)" --title "Model" --title "Model" \ - --msgbox "Failed to get models, please try again!" 3 50 - return 1 - fi echo -n "" >"${TMP_PATH}/modellist" - echo "${MJ}" | jq -c '.[]' | while read -r item; do - name=$(echo "${item}" | jq -r '.name') - arch=$(echo "${item}" | jq -r '.arch') - echo "${name} ${arch}" >>"${TMP_PATH}/modellist" - done + while read -r P; do + PM="$(readConfigEntriesArray "${P}" "${D_FILE}" | sort)" + while read -r M; do + echo "${M} ${P}" >>"${TMP_PATH}/modellist" + done < <(echo "${PM}") + done < <(echo "${PS}") if [ "${ARCMODE}" == "config" ]; then while true; do echo -n "" >"${TMP_PATH}/menu" @@ -282,17 +277,14 @@ function arcVersion() { PAT_HASH="" URLVER="" while true; do - PJ="$(python ${ARC_PATH}/include/functions.py getpats -m "${MODEL}" -r "${PRODUCTVER}")" - PVS="$(echo "${PJ}" | jq -r '.[].release')" - [ -f "${TMP_PATH}/versions" ] && rm -f "${TMP_PATH}/versions" >/dev/null 2>&1 && touch "${TMP_PATH}/versions" - while IFS= read -r line; do - VERSION="${line}" - CHECK_URL=$(echo "${PJ}" | jq -r ".[] | select(.release == \"${VERSION}\") | .mLink") - if curl --head -skL -m 5 "${CHECK_URL}" | head -n 1 | grep -q "404\|403"; then - continue - else - echo "${VERSION}" >>"${TMP_PATH}/versions" - fi + PVS="$(readConfigEntriesArray "${PLATFORM}.\"${MODEL}\"" "${D_FILE}" | sort -r)" + echo -n "" >"${TMP_PATH}/versions" + while read -r V; do + if [ "${V:0:3}" != "${PRODUCTVER}" ]; then + continue + else + echo "${V}" >>"${TMP_PATH}/versions" + fi done < <(echo "${PVS}") DSMPVS="$(cat ${TMP_PATH}/versions)" dialog --backtitle "$(backtitlep)" --colors --title "DSM Version" \ @@ -301,10 +293,9 @@ function arcVersion() { RET=$? [ ${RET} -ne 0 ] && return PV=$(cat ${TMP_PATH}/resp) - PAT_URL=$(echo "${PJ}" | jq -r ".[] | select(.release == \"${PV}\") | .mLink") - PAT_HASH=$(echo "${PJ}" | jq -r ".[] | select(.release == \"${PV}\") | .mCheckSum") - URLVER="$(echo "${PV}" | cut -d'.' -f1,2)" - [ "${PRODUCTVER}" != "${URLVER}" ] && PRODUCTVER="${URLVER}" + PAT_URL="$(readConfigKey "${PLATFORM}.\"${MODEL}\".\"${PV}\".url" "${D_FILE}")" + PAT_HASH="$(readConfigKey "${PLATFORM}.\"${MODEL}\".\"${PV}\".hash" "${D_FILE}")" + [ "${PRODUCTVER}" != "${PV:0:3}" ] && PRODUCTVER="${PV:0:3}" writeConfigKey "productver" "${PRODUCTVER}" "${USER_CONFIG_FILE}" [ -n "${PAT_URL}" ] && [ -n "${PAT_HASH}" ] && VALID="true" && break done @@ -763,6 +754,7 @@ function make() { sleep 2 return 1 fi + STEP="boot" if [ -f "${ORI_ZIMAGE_FILE}" ] && [ -f "${ORI_RDGZ_FILE}" ] && [ -f "${MOD_ZIMAGE_FILE}" ] && [ -f "${MOD_RDGZ_FILE}" ]; then MODELID=$(echo ${MODEL} | sed 's/d$/D/; s/rp$/RP/; s/rp+/RP+/') writeConfigKey "modelid" "${MODELID}" "${USER_CONFIG_FILE}" @@ -810,35 +802,42 @@ function arcFinish() { ############################################################################### # Calls boot.sh to boot into DSM Reinstall Mode function juniorboot() { - if [ "${BUILDDONE}" == "false" ] && [ "${ARCMODE}" != "automated" ]; then + BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" + MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")" + MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")" + if [[ "${BUILDDONE}" == "false" && "${ARCMODE}" != "automated" ]] || [ "${MODEL}" != "${MODELID}" ]; then dialog --backtitle "$(backtitle)" --title "Alert" \ --yesno "Config changed, you need to rebuild the Loader?" 0 0 if [ $? -eq 0 ]; then arcSummary fi + else + dialog --backtitle "$(backtitle)" --title "Arc Boot" \ + --infobox "Booting DSM Reinstall Mode...\nPlease stay patient!" 4 30 + sleep 3 + rebootTo junior fi - dialog --backtitle "$(backtitle)" --title "Arc Boot" \ - --infobox "Booting DSM Reinstall Mode...\nPlease stay patient!" 4 30 - sleep 3 - rebootTo junior } ############################################################################### # Calls boot.sh to boot into DSM kernel/ramdisk function boot() { BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" - if [ "${BUILDDONE}" == "false" ] && [ "${ARCMODE}" != "automated" ]; then + MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")" + MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")" + if [[ "${BUILDDONE}" == "false" && "${ARCMODE}" != "automated" ]] || [ "${MODEL}" != "${MODELID}" ]; then dialog --backtitle "$(backtitle)" --title "Alert" \ --yesno "Config changed, you need to rebuild the Loader?" 0 0 if [ $? -eq 0 ]; then arcSummary fi + else + dialog --backtitle "$(backtitle)" --title "Arc Boot" \ + --infobox "Booting DSM...\nPlease stay patient!" 4 25 + sleep 2 + clear + exec boot.sh fi - dialog --backtitle "$(backtitle)" --title "Arc Boot" \ - --infobox "Booting DSM...\nPlease stay patient!" 4 25 - sleep 2 - clear - exec boot.sh } ############################################################################### diff --git a/files/initrd/opt/arc/include/compat.sh b/files/initrd/opt/arc/include/compat.sh index 8a3a108e..96bf8faf 100755 --- a/files/initrd/opt/arc/include/compat.sh +++ b/files/initrd/opt/arc/include/compat.sh @@ -1,4 +1 @@ ############################################################################### - -# Update Offline Configs -updateOffline \ No newline at end of file diff --git a/files/initrd/opt/arc/include/consts.sh b/files/initrd/opt/arc/include/consts.sh index d6421d59..f6b5673a 100755 --- a/files/initrd/opt/arc/include/consts.sh +++ b/files/initrd/opt/arc/include/consts.sh @@ -41,6 +41,7 @@ S_FILE="${MODEL_CONFIG_PATH}/serials.yml" S_FILE_ARC="${MODEL_CONFIG_PATH}/arc_serials.yml" S_FILE_ENC="${MODEL_CONFIG_PATH}/arc_serials.enc" P_FILE="${MODEL_CONFIG_PATH}/platforms.yml" +D_FILE="${MODEL_CONFIG_PATH}/data.yml" EXTRACTOR_PATH="${PART3_PATH}/extractor" EXTRACTOR_BIN="syno_extract_system_patch" \ No newline at end of file diff --git a/files/initrd/opt/arc/include/functions.py b/files/initrd/opt/arc/include/functions.py index 9977158c..aeca430c 100755 --- a/files/initrd/opt/arc/include/functions.py +++ b/files/initrd/opt/arc/include/functions.py @@ -284,77 +284,5 @@ def getpats4mv(model, version): pats = {k: pats[k] for k in sorted(pats.keys(), reverse=True)} print(json.dumps(pats, indent=4)) - -@cli.command() -@click.option("-m", "--model", type=str, required=True, help="The model of Syno.") -@click.option("-r", "--release", type=str, required=True, help="The release version of Syno.") -def getpats(model, release): - """ - Get all mLink, mCheckSum, and full release version for the specified model and release. - """ - import json - - try: - with open(os.path.join('/mnt/p3/configs/offline.json')) as file: - data = json.load(file) - - links = [] - for I in data["channel"]["item"]: - if not I["title"].startswith("DSM"): - continue - if release not in I["title"]: - continue - for J in I["model"]: - name = J["mLink"].split("/")[-1].split("_")[1].replace("%2B", "+") - if name == model: - full_release = I["title"].split(" ")[1] - links.append({ "release": full_release, "mLink": J["mLink"], "mCheckSum": J.get("mCheckSum", "N/A")}) - - if links: - print(json.dumps(links, indent=4)) - else: - print(f"No data found for model {model} and release {release}") - - except Exception as e: - print(f"Error: {e}") - -@cli.command() -@click.option("-p", "--platforms", type=str, help="The platforms of Syno.") -def getmodelsoffline(platforms=None): - """ - Get Syno Models from offline data. - """ - import json - - if platforms is not None and platforms != "": - PS = platforms.lower().replace(",", " ").split() - else: - PS = [] - - models = [] - try: - with open(os.path.join('/mnt/p3/configs/offline.json')) as file: - data = json.load(file) - - for I in data["channel"]["item"]: - if not I["title"].startswith("DSM"): - continue - for J in I["model"]: - arch = J["mUnique"].split("_")[1] - name = J["mLink"].split("/")[-1].split("_")[1].replace("%2B", "+") - if len(PS) > 0 and arch.lower() not in PS: - continue - if any(name == B["name"] for B in models): - continue - models.append({"name": name, "arch": arch}) - - models = sorted(models, key=lambda k: (k["arch"], k["name"])) - - except Exception as e: - print(f"Error: {e}") - - models.sort(key=lambda x: (x["arch"], x["name"])) - print(json.dumps(models, indent=4)) - if __name__ == "__main__": cli() \ No newline at end of file diff --git a/files/initrd/opt/arc/include/storage.sh b/files/initrd/opt/arc/include/storage.sh index 1283ba89..bdc9ba2b 100755 --- a/files/initrd/opt/arc/include/storage.sh +++ b/files/initrd/opt/arc/include/storage.sh @@ -152,17 +152,31 @@ function getmapSelection() { REMAP1="*" fi # Ask for Portmap - dialog --backtitle "$(backtitle)" --title "Sata Portmap" \ - --menu "Choose a Portmap for Sata!?\n* Recommended Option" 8 60 0 \ - 1 "DiskIdxMap: Active Ports ${REMAP1}" \ - 2 "DiskIdxMap: Max Ports ${REMAP2}" \ - 3 "SataRemap: Remove empty Ports ${REMAP3}" \ - 4 "AhciRemap: Remove empty Ports (new) ${REMAP4}" \ - 5 "Set my own Portmap in Config" \ - 2>"${TMP_PATH}/resp" - [ $? -ne 0 ] && return 1 - resp=$(cat "${TMP_PATH}/resp") - [ -z "${resp}" ] && return 1 + if [ "${STEP}" == "storagemap" ]; then + dialog --backtitle "$(backtitlep)" --title "Sata Portmap" \ + --menu "Choose a Portmap for Sata!?\n* Recommended Option" 8 60 0 \ + 1 "DiskIdxMap: Active Ports ${REMAP1}" \ + 2 "DiskIdxMap: Max Ports ${REMAP2}" \ + 3 "SataRemap: Remove empty Ports ${REMAP3}" \ + 4 "AhciRemap: Remove empty Ports (new) ${REMAP4}" \ + 5 "Set my own Portmap in Config" \ + 2>"${TMP_PATH}/resp" + [ $? -ne 0 ] && return 1 + resp=$(cat "${TMP_PATH}/resp") + [ -z "${resp}" ] && return 1 + else + dialog --backtitle "$(backtitle)" --title "Sata Portmap" \ + --menu "Choose a Portmap for Sata!?\n* Recommended Option" 8 60 0 \ + 1 "DiskIdxMap: Active Ports ${REMAP1}" \ + 2 "DiskIdxMap: Max Ports ${REMAP2}" \ + 3 "SataRemap: Remove empty Ports ${REMAP3}" \ + 4 "AhciRemap: Remove empty Ports (new) ${REMAP4}" \ + 5 "Set my own Portmap in Config" \ + 2>"${TMP_PATH}/resp" + [ $? -ne 0 ] && return 1 + resp=$(cat "${TMP_PATH}/resp") + [ -z "${resp}" ] && return 1 + fi if [ ${resp} -eq 1 ]; then writeConfigKey "arc.remap" "acports" "${USER_CONFIG_FILE}" elif [ ${resp} -eq 2 ]; then diff --git a/files/initrd/opt/arc/include/update.sh b/files/initrd/opt/arc/include/update.sh index 7de32f7f..0e33c1a5 100755 --- a/files/initrd/opt/arc/include/update.sh +++ b/files/initrd/opt/arc/include/update.sh @@ -433,9 +433,9 @@ function updateLKMs() { function updateOffline() { local ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")" if [ "${ARCOFFLINE}" != "true" ]; then - [ -f "${MODEL_CONFIG_PATH}/offline.json" ] && cp -f "${MODEL_CONFIG_PATH}/offline.json" "${MODEL_CONFIG_PATH}/offline.json.bak" - curl -skL "https://autoupdate.synology.com/os/v2" -o "${MODEL_CONFIG_PATH}/offline.json" - [ ! -f "${MODEL_CONFIG_PATH}/offline.json" ] && cp -f "${MODEL_CONFIG_PATH}/offline.json.bak" "${MODEL_CONFIG_PATH}/offline.json" + [ -f "${MODEL_CONFIG_PATH}/data.yml" ] && cp -f "${MODEL_CONFIG_PATH}/data.yml" "${MODEL_CONFIG_PATH}/data.yml.bak" + curl -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/refs/heads/main/data.yml" -o "${MODEL_CONFIG_PATH}/data.yml" + [ ! -f "${MODEL_CONFIG_PATH}/data.yml" ] && cp -f "${MODEL_CONFIG_PATH}/data.yml.bak" "${MODEL_CONFIG_PATH}/data.yml" fi return 0 } diff --git a/scripts/func.sh b/scripts/func.sh index fe40e8eb..56582970 100755 --- a/scripts/func.sh +++ b/scripts/func.sh @@ -244,8 +244,8 @@ function getOffline() { local DEST_PATH="${1}" [ ! -d "${DEST_PATH}" ] && mkdir -p "${DEST_PATH}" - rm -f "${DEST_PATH}/offline.json" - if curl -skL "https://autoupdate.synology.com/os/v2" -o "${DEST_PATH}/offline.json"; then + rm -f "${DEST_PATH}/data.yml" + if curl -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/refs/heads/main/data.yml" -o "${DEST_PATH}/data.yml"; then echo "Getting Offline end" else echo "Failed to get Offline"