Loading Dockerfile +1 −1 Original line number Diff line number Diff line ARG VERSION_ARG="latest" FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.14 / / COPY --from=qemux/qemu-docker:6.15 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" Loading src/define.sh +1 −75 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ set -Eeuo pipefail : "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${EDITION:=""}" : "${MANUAL:=""}" : "${REMOVE:=""}" : "${VERSION:=""}" Loading Loading @@ -1110,66 +1111,12 @@ isESD() { return 1 } isMG() { local id="$1" local lang="$2" case "${id,,}" in "win11${PLATFORM,,}" ) return 0 ;; "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) return 0 ;; "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) return 0 ;; "win10${PLATFORM,,}" ) return 0 ;; "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) return 0 ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) return 0 ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) return 0 ;; "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) return 0 ;; "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) return 0 ;; "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) return 0 ;; "winxpx86" | "winxpx64" ) return 0 ;; esac return 1 } validVersion() { local id="$1" local lang="$2" local url isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 Loading Loading @@ -1207,27 +1154,6 @@ addFolder() { return 0 } migrateFiles() { local base="$1" local version="$2" local file="" [ -f "$base" ] && return 0 [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso" [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso" [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso" [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso" [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 mv -f "$STORAGE/$file" "$base" || return 1 return 0 } prepareInstall() { local dir="$2" Loading src/install.sh +5 −2 Original line number Diff line number Diff line Loading @@ -76,8 +76,6 @@ startInstall() { BOOT="$STORAGE/$file" ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57 fi skipInstall "$BOOT" && return 1 Loading Loading @@ -668,6 +666,11 @@ updateXML() { sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" fi if [ -n "$EDITION" ]; then [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" fi return 0 } Loading src/mido.sh +4 −266 Original line number Diff line number Diff line Loading @@ -242,10 +242,10 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." if [[ "$enterprise_type" == "iot" ]]; then filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" else filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" if ! echo "$iso_download_page_html" | grep -io "$filter" > /dev/null; then filter="https://go.microsoft.com/fwlink/p/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" fi iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { Loading Loading @@ -429,243 +429,6 @@ getCatalog() { return 0 } getMG() { local version="$1" local lang="$2" local desc="$3" local locale="" local culture="" local language="" local user_agent="" user_agent=$(get_agent) language=$(getLanguage "$lang" "desc") culture=$(getLanguage "$lang" "culture") local msg="Requesting download link from massgrave.dev..." info "$msg" && html "$msg" local pattern="" local locale="${culture,,}" local platform="${PLATFORM,,}" local url="https://massgrave.dev/" if [[ "${PLATFORM,,}" != "arm64" ]]; then case "${version,,}" in "win11${PLATFORM,,}" ) url+="windows_11_links" pattern="consumer" ;; "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) url+="windows_11_links" pattern="business" ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_ltsc_links" pattern="11_enterprise_ltsc" ;; "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) url+="windows_ltsc_links" pattern="11_iot" ;; "win10${PLATFORM,,}" ) url+="windows_10_links" pattern="consumer" ;; "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) url+="windows_10_links" pattern="business" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_ltsc_links" pattern="10_enterprise_ltsc" ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) url+="windows_ltsc_links" pattern="10_iot" ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) url+="windows_8.1_links" pattern="8.1_enterprise" locale=$(getLanguage "$lang" "code") [[ "$locale" == "sr" ]] && locale="sr-latn" ;; "win2025" | "win2025-eval" ) url+="windows_server_links" pattern="server_2025" ;; "win2022" | "win2022-eval" ) url+="windows_server_links" pattern="server_2022" ;; "win2019" | "win2019-eval" ) url+="windows_server_links" pattern="server_2019" ;; "win2016" | "win2016-eval" ) url+="windows_server_links" pattern="server_2016" locale=$(getLanguage "$lang" "code") [[ "$locale" == "hk" ]] && locale="ct" [[ "$locale" == "tw" ]] && locale="ct" ;; "win2012r2" | "win2012r2-eval" ) url+="windows_server_links" pattern="server_2012_r2" locale=$(getLanguage "$lang" "code") ;; "win2008r2" | "win2008r2-eval" ) url+="windows_server_links" pattern="server_2008_r2" locale=$(getLanguage "$lang" "code") ;; "win7x64" | "win7x64-enterprise" ) url+="windows_7_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "win7x64-ultimate" ) url+="windows_7_links" pattern="ultimate" locale=$(getLanguage "$lang" "code") ;; "win7x86" | "win7x86-enterprise" ) platform="x86" url+="windows_7_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "win7x86-ultimate" ) platform="x86" url+="windows_7_links" pattern="ultimate" locale=$(getLanguage "$lang" "code") ;; "winvistax64" | "winvistax64-enterprise" ) url+="windows_vista_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "winvistax64-ultimate" ) url+="windows_vista_links" pattern="sp2" locale=$(getLanguage "$lang" "code") ;; "winvistax86" | "winvistax86-enterprise" ) platform="x86" url+="windows_vista_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "winvistax86-ultimate" ) platform="x86" url+="windows_vista_links" pattern="sp2" locale=$(getLanguage "$lang" "code") ;; "winxpx86" ) platform="x86" url+="windows_xp_links" pattern="xp" locale=$(getLanguage "$lang" "code") [[ "$locale" == "pt" ]] && locale="pt-br" [[ "$locale" == "pp" ]] && locale="pt-pt" [[ "$locale" == "cn" ]] && locale="zh-hans" [[ "$locale" == "hk" ]] && locale="zh-hk" [[ "$locale" == "tw" ]] && locale="zh-tw" ;; "winxpx64" ) url+="windows_xp_links" pattern="xp" locale=$(getLanguage "$lang" "code") ;; esac else case "${version,,}" in "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) url+="windows_arm_links" pattern="11_business" ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_arm_links" pattern="11_iot_enterprise_ltsc" ;; "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) url+="windows_arm_links" pattern="Pro_10" locale="$language" [[ "$locale" == "Chinese" ]] && locale="ChnSimp" [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_arm_links" pattern="10_iot_enterprise_ltsc" ;; esac fi local body="" [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error "$?" "Massgrave" return $? } local list="" list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') local page="$result" if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." fi return 1 fi [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { handle_curl_error "$?" "Massgrave" return $? } if [[ "${result,,}" == *"content-type: text"* ]]; then body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { handle_curl_error "$?" "Massgrave" return $? } list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') page=$(echo "$list" | sed 's/&/\&/g;') if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." fi return 1 fi fi MG_URL="$page" return 0 } getESD() { local dir="$1" Loading Loading @@ -950,31 +713,6 @@ downloadImage() { done if isMG "$version" "$lang"; then if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try a diferent method now..." fi tried="y" success="n" if getMG "$version" "$lang" "$desc"; then success="y" else info "$msg" && html "$msg" && sleep "$delay" getMG "$version" "$lang" "$desc" && success="y" fi if [[ "$success" == "y" ]]; then downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 rm -f "$iso" fi fi return 1 } Loading Loading
Dockerfile +1 −1 Original line number Diff line number Diff line ARG VERSION_ARG="latest" FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.14 / / COPY --from=qemux/qemu-docker:6.15 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" Loading
src/define.sh +1 −75 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ set -Eeuo pipefail : "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${EDITION:=""}" : "${MANUAL:=""}" : "${REMOVE:=""}" : "${VERSION:=""}" Loading Loading @@ -1110,66 +1111,12 @@ isESD() { return 1 } isMG() { local id="$1" local lang="$2" case "${id,,}" in "win11${PLATFORM,,}" ) return 0 ;; "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) return 0 ;; "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) return 0 ;; "win10${PLATFORM,,}" ) return 0 ;; "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) return 0 ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) return 0 ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) return 0 ;; "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) return 0 ;; "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) return 0 ;; "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) return 0 ;; "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) return 0 ;; "winxpx86" | "winxpx64" ) return 0 ;; esac return 1 } validVersion() { local id="$1" local lang="$2" local url isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 Loading Loading @@ -1207,27 +1154,6 @@ addFolder() { return 0 } migrateFiles() { local base="$1" local version="$2" local file="" [ -f "$base" ] && return 0 [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso" [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso" [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso" [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso" [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 mv -f "$STORAGE/$file" "$base" || return 1 return 0 } prepareInstall() { local dir="$2" Loading
src/install.sh +5 −2 Original line number Diff line number Diff line Loading @@ -76,8 +76,6 @@ startInstall() { BOOT="$STORAGE/$file" ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57 fi skipInstall "$BOOT" && return 1 Loading Loading @@ -668,6 +666,11 @@ updateXML() { sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" fi if [ -n "$EDITION" ]; then [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" fi return 0 } Loading
src/mido.sh +4 −266 Original line number Diff line number Diff line Loading @@ -242,10 +242,10 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." if [[ "$enterprise_type" == "iot" ]]; then filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" else filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" if ! echo "$iso_download_page_html" | grep -io "$filter" > /dev/null; then filter="https://go.microsoft.com/fwlink/p/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" fi iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { Loading Loading @@ -429,243 +429,6 @@ getCatalog() { return 0 } getMG() { local version="$1" local lang="$2" local desc="$3" local locale="" local culture="" local language="" local user_agent="" user_agent=$(get_agent) language=$(getLanguage "$lang" "desc") culture=$(getLanguage "$lang" "culture") local msg="Requesting download link from massgrave.dev..." info "$msg" && html "$msg" local pattern="" local locale="${culture,,}" local platform="${PLATFORM,,}" local url="https://massgrave.dev/" if [[ "${PLATFORM,,}" != "arm64" ]]; then case "${version,,}" in "win11${PLATFORM,,}" ) url+="windows_11_links" pattern="consumer" ;; "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) url+="windows_11_links" pattern="business" ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_ltsc_links" pattern="11_enterprise_ltsc" ;; "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) url+="windows_ltsc_links" pattern="11_iot" ;; "win10${PLATFORM,,}" ) url+="windows_10_links" pattern="consumer" ;; "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) url+="windows_10_links" pattern="business" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_ltsc_links" pattern="10_enterprise_ltsc" ;; "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) url+="windows_ltsc_links" pattern="10_iot" ;; "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) url+="windows_8.1_links" pattern="8.1_enterprise" locale=$(getLanguage "$lang" "code") [[ "$locale" == "sr" ]] && locale="sr-latn" ;; "win2025" | "win2025-eval" ) url+="windows_server_links" pattern="server_2025" ;; "win2022" | "win2022-eval" ) url+="windows_server_links" pattern="server_2022" ;; "win2019" | "win2019-eval" ) url+="windows_server_links" pattern="server_2019" ;; "win2016" | "win2016-eval" ) url+="windows_server_links" pattern="server_2016" locale=$(getLanguage "$lang" "code") [[ "$locale" == "hk" ]] && locale="ct" [[ "$locale" == "tw" ]] && locale="ct" ;; "win2012r2" | "win2012r2-eval" ) url+="windows_server_links" pattern="server_2012_r2" locale=$(getLanguage "$lang" "code") ;; "win2008r2" | "win2008r2-eval" ) url+="windows_server_links" pattern="server_2008_r2" locale=$(getLanguage "$lang" "code") ;; "win7x64" | "win7x64-enterprise" ) url+="windows_7_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "win7x64-ultimate" ) url+="windows_7_links" pattern="ultimate" locale=$(getLanguage "$lang" "code") ;; "win7x86" | "win7x86-enterprise" ) platform="x86" url+="windows_7_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "win7x86-ultimate" ) platform="x86" url+="windows_7_links" pattern="ultimate" locale=$(getLanguage "$lang" "code") ;; "winvistax64" | "winvistax64-enterprise" ) url+="windows_vista_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "winvistax64-ultimate" ) url+="windows_vista_links" pattern="sp2" locale=$(getLanguage "$lang" "code") ;; "winvistax86" | "winvistax86-enterprise" ) platform="x86" url+="windows_vista_links" pattern="enterprise" locale=$(getLanguage "$lang" "code") ;; "winvistax86-ultimate" ) platform="x86" url+="windows_vista_links" pattern="sp2" locale=$(getLanguage "$lang" "code") ;; "winxpx86" ) platform="x86" url+="windows_xp_links" pattern="xp" locale=$(getLanguage "$lang" "code") [[ "$locale" == "pt" ]] && locale="pt-br" [[ "$locale" == "pp" ]] && locale="pt-pt" [[ "$locale" == "cn" ]] && locale="zh-hans" [[ "$locale" == "hk" ]] && locale="zh-hk" [[ "$locale" == "tw" ]] && locale="zh-tw" ;; "winxpx64" ) url+="windows_xp_links" pattern="xp" locale=$(getLanguage "$lang" "code") ;; esac else case "${version,,}" in "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) url+="windows_arm_links" pattern="11_business" ;; "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_arm_links" pattern="11_iot_enterprise_ltsc" ;; "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) url+="windows_arm_links" pattern="Pro_10" locale="$language" [[ "$locale" == "Chinese" ]] && locale="ChnSimp" [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" ;; "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) url+="windows_arm_links" pattern="10_iot_enterprise_ltsc" ;; esac fi local body="" [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error "$?" "Massgrave" return $? } local list="" list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') local page="$result" if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." fi return 1 fi [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { handle_curl_error "$?" "Massgrave" return $? } if [[ "${result,,}" == *"content-type: text"* ]]; then body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { handle_curl_error "$?" "Massgrave" return $? } list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') page=$(echo "$list" | sed 's/&/\&/g;') if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." fi return 1 fi fi MG_URL="$page" return 0 } getESD() { local dir="$1" Loading Loading @@ -950,31 +713,6 @@ downloadImage() { done if isMG "$version" "$lang"; then if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try a diferent method now..." fi tried="y" success="n" if getMG "$version" "$lang" "$desc"; then success="y" else info "$msg" && html "$msg" && sleep "$delay" getMG "$version" "$lang" "$desc" && success="y" fi if [[ "$success" == "y" ]]; then downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 rm -f "$iso" fi fi return 1 } Loading