mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	feat: add automatic Windows 10 and 11 iso downloads. Close #563
This commit is contained in:
		
							parent
							
								
									4ce607e681
								
							
						
					
					
						commit
						008478d85e
					
				
					 2 changed files with 25 additions and 136 deletions
				
			
		|  | @ -30,7 +30,7 @@ Windows**. | ||||||
| ## Features | ## Features | ||||||
| 
 | 
 | ||||||
| -   **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra | -   **macOS** Monterey, Big Sur, Catalina, Mojave & High Sierra | ||||||
| -   **Windows** 8.1, 10 and 11 including TPM 2.0 | -   **Windows** 10 and 11 including TPM 2.0 | ||||||
| -   [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu | -   [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu | ||||||
|     flavours](https://ubuntu.com/download/flavours)** |     flavours](https://ubuntu.com/download/flavours)** | ||||||
| -   **Over 360 operating system editions are supported!** | -   **Over 360 operating system editions are supported!** | ||||||
|  | @ -460,17 +460,16 @@ Now reboot, and the App Store should work. | ||||||
| 
 | 
 | ||||||
| ## Windows 10 & 11 Guests | ## Windows 10 & 11 Guests | ||||||
| 
 | 
 | ||||||
| `quickget` can not download | `quickget` can download | ||||||
| [Windows10](https://www.microsoft.com/software-download/windows10) and | [Windows10](https://www.microsoft.com/software-download/windows10) and | ||||||
| [Windows 11](https://www.microsoft.com/software-download/windows11) | [Windows 11](https://www.microsoft.com/software-download/windows11) | ||||||
| automatically, but does automatically create an optimised virtual | automatically and create an optimised virtual  machine configuration. | ||||||
| machine configuration that you can just add an Windows .iso image to. |  | ||||||
| This configuration also includes the [VirtIO drivers for | This configuration also includes the [VirtIO drivers for | ||||||
| Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/). | Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/). | ||||||
| 
 | 
 | ||||||
| ``` bash | ``` bash | ||||||
| quickget windows 11 | quickget windows 11 | ||||||
| quickemu --vm windows-11.conf | quickemu --vm windows-11-22H2.conf | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| -   Complete the installation as you normally would. | -   Complete the installation as you normally would. | ||||||
|  |  | ||||||
							
								
								
									
										152
									
								
								quickget
									
										
									
									
									
								
							
							
						
						
									
										152
									
								
								quickget
									
										
									
									
									
								
							|  | @ -694,48 +694,7 @@ function releases_vxlinux() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function releases_windows() { | function releases_windows() { | ||||||
|     echo 8 10 11 |     echo 10 11 | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function languages_windows() { |  | ||||||
|     LANGS=(Arabic |  | ||||||
|     "Brazilian Portuguese" |  | ||||||
|     Bulgarian |  | ||||||
|     "Chinese (Simplified)" |  | ||||||
|     "Chinese (Traditional)" |  | ||||||
|     Croatian |  | ||||||
|     Czech |  | ||||||
|     Danish |  | ||||||
|     Dutch |  | ||||||
|     English |  | ||||||
|     "English International" |  | ||||||
|     Estonian |  | ||||||
|     Finnish |  | ||||||
|     French |  | ||||||
|     "French Canadian" |  | ||||||
|     German |  | ||||||
|     Greek |  | ||||||
|     Hebrew |  | ||||||
|     Hungarian |  | ||||||
|     Italian |  | ||||||
|     Japanese |  | ||||||
|     Korean |  | ||||||
|     Latvian |  | ||||||
|     Lithuanian |  | ||||||
|     Norwegian |  | ||||||
|     Polish |  | ||||||
|     Portuguese |  | ||||||
|     Romanian |  | ||||||
|     Russian |  | ||||||
|     "Serbian Latin" |  | ||||||
|     Slovak |  | ||||||
|     Slovenian |  | ||||||
|     Spanish |  | ||||||
|     "Spanish (Mexico)" |  | ||||||
|     Swedish |  | ||||||
|     Thai |  | ||||||
|     Turkish |  | ||||||
|     Ukrainian) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function releases_xerolinux() { | function releases_xerolinux() { | ||||||
|  | @ -2167,92 +2126,35 @@ function unattended_windows() { | ||||||
| EOF | EOF | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function dbg_windows() { |  | ||||||
|   local DEBUG=0 |  | ||||||
|   if [ ${DEBUG} -eq 1 ]; then |  | ||||||
|     echo "${1}" |  | ||||||
|   fi |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| # Adapted from https://gist.github.com/hongkongkiwi/15a5bf16437315df256c118c163607cb |  | ||||||
| function get_windows() { | function get_windows() { | ||||||
|     # Use the API to automatically download a Windows .iso image |     # Use the iTechtics CDN to download the ISOs. | ||||||
|     # The API we were using is unmaintained and not currently functional |     # - https://www.itechtics.com/windows-10-download-iso/ | ||||||
|  |     # - https://www.itechtics.com/windows-11-download-iso/ | ||||||
|     #  0 : Prompt for a manual ISO download |     #  0 : Prompt for a manual ISO download | ||||||
|     #  1 : Use the API for automated download |     #  1 : Download automatically | ||||||
|     local API_GUIDED_DOWNLOAD=0 |     local AUTO_DOWNLOAD=1 | ||||||
| 
 |  | ||||||
|     local ARCH="x64" |  | ||||||
|     local INDEX=0 |  | ||||||
|     local LANG_CODE="en" |  | ||||||
|     local LANG_EDITION="${1}" |  | ||||||
|     local LATEST_WINDOWS_VERSION="" |  | ||||||
|     local WINDOWS_NAME="" |  | ||||||
|     local WINDOWS_ISO_URL="" |  | ||||||
|     local VERSION_ID="" |  | ||||||
|     local EDITION_ID="" |  | ||||||
|     local LANGUAGE_ID="" |  | ||||||
|     local FILE_NAME="" |  | ||||||
|     local ARCH_ID="" |  | ||||||
|     local DOWNLOAD_INFO="" |  | ||||||
|     local DOWNLOAD_ID="" |  | ||||||
|     local DOWNLOAD_URL="" |     local DOWNLOAD_URL="" | ||||||
| 
 | 
 | ||||||
|     if [ ${API_GUIDED_DOWNLOAD} -eq 1 ]; then |     if [ ${AUTO_DOWNLOAD} -eq 1 ]; then | ||||||
|         # Ignore the most recent Windows 10 release for now. |         # Ignore the most recent Windows 10 release for now. | ||||||
|         case ${RELEASE} in |         case ${RELEASE} in | ||||||
|         10) INDEX=0;; |             10) DOWNLOAD_URL="https://www.itechtics.com/?dl_id=173" | ||||||
|         11) INDEX=0;; |                 EDITION="22H2" | ||||||
|  |                 FILE_NAME="Win${RELEASE}_${EDITION}_EnglishInternational_x64v1.iso" | ||||||
|  |                 FILE_HASH="dc3982ad27e2d4e03b680630c28f824cb78bcd47" | ||||||
|  |                 ;; | ||||||
|  |             11) DOWNLOAD_URL="https://www.itechtics.com/?dl_id=168" | ||||||
|  |                 EDITION="22H2" | ||||||
|  |                 FILE_NAME="Win${RELEASE}_${EDITION}_English_x64v1.iso" | ||||||
|  |                 FILE_HASH="c5341ba26e420684468fa4d4ab434823c9d1b61f" | ||||||
|  |                 ;; | ||||||
|         esac |         esac | ||||||
| 
 | 
 | ||||||
|         echo "Getting Windows ${RELEASE} URL..." |         echo "Downloading Windows ${RELEASE} ${EDITION}..." | ||||||
|         WINDOWS_VERSIONS=$(wget -4 -q -O- "https://tb.rg-adguard.net/php/get_version.php?type_id=1" | jq '.versions | sort_by(-(.version_id | tonumber))') |  | ||||||
|         dbg_windows "${WINDOWS_VERSIONS}" |  | ||||||
|         LATEST_WINDOWS_VERSION=$(echo "${WINDOWS_VERSIONS}" | jq -c 'map(select(.name | contains("Windows '"${RELEASE}"'")))['${INDEX}']') |  | ||||||
|         dbg_windows "${LATEST_WINDOWS_VERSION}" |  | ||||||
|         WINDOWS_NAME=$(echo "${LATEST_WINDOWS_VERSION}" | jq -r .name) |  | ||||||
|         dbg_windows "${WINDOWS_NAME}" |  | ||||||
|         VERSION_ID=$(echo "${LATEST_WINDOWS_VERSION}" | jq -r .version_id) |  | ||||||
|         dbg_windows "${VERSION_ID}" |  | ||||||
| 
 |  | ||||||
|         case ${RELEASE} in |  | ||||||
|             8) EDITION_ID=$(wget -4 -q -O- "https://tb.rg-adguard.net/php/get_edition.php?version_id=${VERSION_ID}&lang=name_${LANG_CODE}" | jq -r '.editions[] | select(.name_'${LANG_CODE}'=="Windows 8.1 Pro + Core").edition_id');; |  | ||||||
|             10|11) EDITION_ID=$(wget -4 -q -O- "https://tb.rg-adguard.net/php/get_edition.php?version_id=${VERSION_ID}&lang=name_${LANG_CODE}" | jq -r '.editions[] | select(.name_'${LANG_CODE}'=="Windows '"${RELEASE}"'").edition_id');; |  | ||||||
|         esac |  | ||||||
|         dbg_windows "${EDITION_ID}" |  | ||||||
| 
 |  | ||||||
|         LANGUAGE_ID=$(wget -4 -q -O- "https://tb.rg-adguard.net/php/get_language.php?edition_id=${EDITION_ID}&lang=name_${LANG_CODE}" | jq -r '.languages[] | select(.name_'${LANG_CODE}'=="'"${LANG_EDITION}"'").language_id') |  | ||||||
|         dbg_windows "${LANGUAGE_ID}" |  | ||||||
|         ARCH_INFO=$(wget -4 -q -O- "https://tb.rg-adguard.net/php/get_arch.php?language_id=${LANGUAGE_ID}") |  | ||||||
|         dbg_windows "${ARCH_INFO}" |  | ||||||
|         FILE_NAME=$(echo "${ARCH_INFO}" | jq -r '.archs[] | select(.name | contains("'${ARCH}'")).name') |  | ||||||
|         dbg_windows "${FILE_NAME}" |  | ||||||
|         ARCH_ID=$(echo "${ARCH_INFO}" | jq -r '.archs[] | select(.name | contains("'${ARCH}'")).arch_id') |  | ||||||
|         dbg_windows "${ARCH_ID}" |  | ||||||
|         DOWNLOAD_INFO=$(wget -4 -q -O- "https://tb.rg-adguard.net/dl.php?fileName=${ARCH_ID}&lang=en") |  | ||||||
|         dbg_windows "${DOWNLOAD_INFO}" |  | ||||||
|         DOWNLOAD_SHA1=$(echo "${DOWNLOAD_INFO}" | sed -e 's/<[^>]*>//g' | grep -o -P '(?<=SHA1: ).*(?= expire)' | sed 's/Link//') |  | ||||||
|         dbg_windows "${DOWNLOAD_SHA1}" |  | ||||||
|         DOWNLOAD_ID=$(echo "${DOWNLOAD_INFO}" | grep -oP '(?<=https:\/\/tb\.rg-adguard\.net/dl\.php\?go=)[0-9a-z]+') |  | ||||||
|         dbg_windows "${DOWNLOAD_ID}" |  | ||||||
|         REDIRECT_URL="https://tb.rg-adguard.net/dl.php?go=${DOWNLOAD_ID}" |  | ||||||
|         dbg_windows "${REDIRECT_URL}" |  | ||||||
|         DOWNLOAD_URL=$(curl --head --silent --write-out "%{redirect_url}\n" --output /dev/null "${REDIRECT_URL}") |  | ||||||
|         dbg_windows "${DOWNLOAD_URL}" |  | ||||||
| 
 |  | ||||||
|         MS_BASE_URL="https://software.download.prss.microsoft.com/" |  | ||||||
|         if [[ ! ${DOWNLOAD_URL} =~ ^${MS_BASE_URL} ]]; then |  | ||||||
|             echo "Download URL not leading to Microsoft CDN" |  | ||||||
|             exit 1 |  | ||||||
|         fi |  | ||||||
| 
 |  | ||||||
|         echo "Downloading ${WINDOWS_NAME}..." |  | ||||||
|         web_get "${DOWNLOAD_URL}" "${VM_PATH}" "${FILE_NAME}" |         web_get "${DOWNLOAD_URL}" "${VM_PATH}" "${FILE_NAME}" | ||||||
| 
 | 
 | ||||||
|         # Windows 10 doesn't include a SHA1, so only check the integrity if the SHA1 is available. |         check_hash "${FILE_NAME}" "${FILE_HASH}" | ||||||
|         if [ -n "${DOWNLOAD_SHA1}" ]; then |  | ||||||
|             check_hash "${FILE_NAME}" "${DOWNLOAD_SHA1}" |  | ||||||
|         fi |  | ||||||
|     else |     else | ||||||
|         case ${RELEASE} in |         case ${RELEASE} in | ||||||
|             10) WINDOWS_ISO_URL="https://www.microsoft.com/software-download/windows10";; |             10) WINDOWS_ISO_URL="https://www.microsoft.com/software-download/windows10";; | ||||||
|  | @ -2281,7 +2183,7 @@ function get_windows() { | ||||||
|             ;; |             ;; | ||||||
|     esac |     esac | ||||||
| 
 | 
 | ||||||
|     case "${API_GUIDED_DOWNLOAD}" in |     case "${AUTO_DOWNLOAD}" in | ||||||
|         0) make_vm_config "windows-${RELEASE}.iso" "virtio-win.iso";; |         0) make_vm_config "windows-${RELEASE}.iso" "virtio-win.iso";; | ||||||
|         1) make_vm_config "${FILE_NAME}" "virtio-win.iso";; |         1) make_vm_config "${FILE_NAME}" "virtio-win.iso";; | ||||||
|     esac |     esac | ||||||
|  | @ -2335,7 +2237,6 @@ if ((BASH_VERSINFO[0] < 4)); then | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| LANGS=() | LANGS=() | ||||||
| languages_windows |  | ||||||
| 
 | 
 | ||||||
| if [ -n "${1}" ]; then | if [ -n "${1}" ]; then | ||||||
|     OS="${1,,}" |     OS="${1,,}" | ||||||
|  | @ -2411,20 +2312,9 @@ if [ -n "${2}" ]; then | ||||||
|         validate_release releases_deepin |         validate_release releases_deepin | ||||||
|         get_deepin |         get_deepin | ||||||
|     elif [ "${OS}" == "windows" ]; then |     elif [ "${OS}" == "windows" ]; then | ||||||
|         LANG="English International" |  | ||||||
|         if [ -n "${3}" ]; then |  | ||||||
|             LANG="${3}" |  | ||||||
|             if [[ ! ${LANGS[*]} =~ "${LANG}" ]]; then |  | ||||||
|                 echo -e "ERROR! ${LANG} is not a supported Windows language:\n" |  | ||||||
|                 for LANG in "${LANGS[@]}"; do |  | ||||||
|                   echo -n "${LANG} " |  | ||||||
|                 done |  | ||||||
|                 exit 1 |  | ||||||
|             fi |  | ||||||
|         fi |  | ||||||
|         # Windows doesn't use create_vm() |         # Windows doesn't use create_vm() | ||||||
|         validate_release releases_windows |         validate_release releases_windows | ||||||
|         get_windows "${LANG}" |         get_windows | ||||||
|     else |     else | ||||||
|         validate_release "releases_${OS}" |         validate_release "releases_${OS}" | ||||||
|         create_vm "$("get_${OS}")" |         create_vm "$("get_${OS}")" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue