-
-
Save jetfir3/e25e74a42e7c7ac2c808a537b12dc768 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env bash | |
| # Download VMware Workstation for Linux | |
| # Handles legacy versions (12.x - 17.6.3) from Cloudflare CDN cache and | |
| # newer versions (17.6.4+) from Archive.org. | |
| # | |
| # Use '-k' to keep the CDN download file compressed, exiting after download. (Ignored for v17.6.4+) | |
| # Use '-v <Version>' to specify desired version directly. | |
| BASE_URL="https://softwareupdate-prod.broadcom.com/cds/vmw-desktop/" | |
| CDN_MIRROR="softwareupdate-prod.broadcom.com:443:softwareupdate-prod.broadcom.com.cdn.cloudflare.net:443" | |
| declare -A ARCHIVE_URLS | |
| ARCHIVE_URLS["17.6.4"]="https://archive.org/download/vmware-workstation-full-17.6.4-24832109.x86_64/VMware-Workstation-Full-17.6.4-24832109.x86_64.bundle" | |
| # Cloudflare CDN metadata | |
| read -r -d '' XML_DATA << 'EOF' | |
| <metalist> | |
| <metadata><version>12.0.0</version><url>ws/12.0.0/2985596/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.0.1/3160714/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.1.0/3272444/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.1.1/3770994/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.0/4352439/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.1/4542065/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.2/4638234/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.3/5115892/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.4/5192485/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.5/5234757/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.6/5528349/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.7/5813279/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.8/7098237/linux/core/</url></metadata> | |
| <metadata><version>12.0.0</version><url>ws/12.5.9/7535481/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.0.0/6661328/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.0/7370693/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.1/7528167/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.2/8497320/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.3/9474260/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.4/10722678/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.5/10950780/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.6/12368378/linux/core/</url></metadata> | |
| <metadata><version>14.0.0</version><url>ws/14.1.7/12989993/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.0.0/10134415/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.0.1/10737736/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.0.2/10952284/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.0.3/12422535/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.0.4/12990004/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.1.0/13591040/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.0/14665864/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.1/15018445/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.2/15785246/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.5/16285975/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.6/16341506/linux/core/</url></metadata> | |
| <metadata><version>15.0.0</version><url>ws/15.5.7/17171714/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.0.0/16894299/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.1.0/17198959/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.1.1/17801498/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.1.2/17966106/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.2.0/18760230/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.2.1/18811642/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.2.3/19376536/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.2.4/20089737/linux/core/</url></metadata> | |
| <metadata><version>16.0.0</version><url>ws/16.2.5/20904516/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.0.0/20800274/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.0.1/21139696/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.0.2/21581411/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.5.0/22583795/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.5.1/23298084/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.5.2/23775571/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.6.0/24238078/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.6.1/24319023/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.6.2/24409262/linux/core/</url></metadata> | |
| <metadata><version>17.0.0</version><url>ws/17.6.3/24583834/linux/core/</url></metadata> | |
| </metalist> | |
| EOF | |
| KEEP_COMPRESSED=false | |
| USER_VERSION="" | |
| VERSION="" | |
| BUILD="" | |
| while getopts "kv:" opt; do | |
| case $opt in | |
| k) KEEP_COMPRESSED=true ;; | |
| v) USER_VERSION=$OPTARG ;; | |
| *) echo "Usage: $0 [-k] [-v VERSION]" >&2; exit 1 ;; | |
| esac | |
| done | |
| requirements_check() { | |
| command -v curl >/dev/null 2>&1 || { echo "Error: curl is required but not installed." >&2; exit 1; } | |
| command -v grep >/dev/null 2>&1 || { echo "Error: grep is required but not installed." >&2; exit 1; } | |
| command -v awk >/dev/null 2>&1 || { echo "Error: awk is required but not installed." >&2; exit 1; } | |
| command -v sed >/dev/null 2>&1 || { echo "Error: sed is required but not installed." >&2; exit 1; } | |
| command -v tar >/dev/null 2>&1 || { echo "Error: tar is required but not installed." >&2; exit 1; } | |
| command -v sort >/dev/null 2>&1 || { echo "Error: sort is required but not installed." >&2; exit 1; } | |
| } | |
| requirements_check | |
| if [[ $(uname | tr '[:upper:]' '[:lower:]') != "linux"* ]]; then | |
| KEEP_COMPRESSED=true | |
| echo "Warning: Not running on Linux. Forcing keep compressed." >&2 | |
| fi | |
| if sort --version 2>/dev/null | grep -q "GNU coreutils"; then | |
| SORT_CMD="sort -V" | |
| SORT_UNIQUE_CMD="sort -uV" | |
| else | |
| SORT_CMD="sort -t. -k1,1n -k2,2n -k3,3n -k4,4n" | |
| SORT_UNIQUE_CMD="sort -t. -k1,1n -k2,2n -k3,3n -k4,4n -u" | |
| fi | |
| version_gte() { | |
| printf '%s\n%s\n' "$1" "$2" | eval "$SORT_CMD" | head -n 1 | grep -q "^$2$" | |
| } | |
| get_all_available_versions() { | |
| local cdn_versions | |
| cdn_versions=$(echo "$XML_DATA" | grep -oP 'ws/\K[0-9]+\.[0-9]+\.[0-9]+' | eval "$SORT_UNIQUE_CMD") | |
| local archive_versions | |
| archive_versions=$(printf "%s\n" "${!ARCHIVE_URLS[@]}") | |
| printf "%s\n%s" "$cdn_versions" "$archive_versions" | eval "$SORT_UNIQUE_CMD" | |
| } | |
| get_build_for_cdn_version() { | |
| local target_version="$1" | |
| echo "$XML_DATA" | grep "<url>ws/${target_version}/" | sed -n 's%.*<url>ws/'"$target_version"'/\([0-9]*\)/.*%\1%p' | |
| } | |
| if [[ -n "$USER_VERSION" ]]; then | |
| VERSION="$USER_VERSION" | |
| else | |
| echo "Available versions:" | |
| mapfile -t all_versions < <(get_all_available_versions) | |
| [[ ${#all_versions[@]} -eq 0 ]] && { echo "No available versions found." >&2; exit 1; } | |
| PS3="Select a version: " | |
| select ver in "${all_versions[@]}"; do | |
| [[ -n "$ver" ]] && { VERSION=$ver; break; } || echo "Invalid selection. Please try again." | |
| done | |
| fi | |
| if [[ -v "ARCHIVE_URLS[$VERSION]" ]]; then | |
| DOWNLOAD_URL="${ARCHIVE_URLS[$VERSION]}" | |
| DOWNLOAD_DIR="${HOME}" | |
| DOWNLOAD_FILE="${DOWNLOAD_DIR}/$(basename "${DOWNLOAD_URL}")" | |
| echo "Selected new version: $VERSION" | |
| echo "Downloading from Archive.org..." | |
| if [[ "$KEEP_COMPRESSED" = true ]]; then | |
| echo "Info: -k flag is ignored for versions 17.6.4 and newer as they are not compressed." | |
| fi | |
| curl -L --progress-bar -f -o "${DOWNLOAD_FILE}" "${DOWNLOAD_URL}" || { | |
| echo "Error: Download failed for ${DOWNLOAD_URL}." >&2 | |
| exit 1 | |
| } | |
| echo "Setting permissions..." | |
| chmod +x "${DOWNLOAD_FILE}" | |
| echo -e "\nFinished. You can now run the installer bundle." | |
| echo "VMware Workstation bundle location: ${DOWNLOAD_FILE}" | |
| else | |
| BUILD=$(get_build_for_cdn_version "$VERSION") | |
| [[ -z "$BUILD" ]] && { echo "Error: Version ${VERSION} not found in the embedded XML data." >&2; exit 1; } | |
| echo "Selected legacy version: $VERSION with build: $BUILD" | |
| DOWNLOAD_URL="${BASE_URL}ws/${VERSION}/${BUILD}/linux/core/VMware-Workstation-${VERSION}-${BUILD}.x86_64.bundle.tar" | |
| DOWNLOAD_DIR="${HOME}" | |
| DOWNLOAD_FILE="${DOWNLOAD_DIR}/VMware-Workstation-${VERSION}-${BUILD}.x86_64.bundle.tar" | |
| EXTRACT_DIR="${DOWNLOAD_DIR}/VMware-Workstation-${VERSION}-${BUILD}" | |
| BUNDLE_PATH="${EXTRACT_DIR}/VMware-Workstation-${VERSION}-${BUILD}.x86_64.bundle" | |
| echo "Downloading VMware Workstation v${VERSION} (${BUILD}) from CDN cache..." | |
| mkdir -p "${DOWNLOAD_DIR}" | |
| check_url() { | |
| curl -s --head --connect-to "$CDN_MIRROR" "$1" | head -n 1 | grep "200" >/dev/null | |
| } | |
| check_url "$DOWNLOAD_URL" || { echo "Error: Installer file not found at $DOWNLOAD_URL via CDN." >&2; exit 1; } | |
| curl -k -q --progress-bar -f -o "${DOWNLOAD_FILE}" --connect-to "$CDN_MIRROR" "${DOWNLOAD_URL}" || { | |
| echo "Error: Download failed for ${DOWNLOAD_URL}." >&2 | |
| exit 1 | |
| } | |
| if [[ "$KEEP_COMPRESSED" = true ]]; then | |
| echo -e "\nFinished. Downloaded file location: ${DOWNLOAD_FILE}" | |
| exit 0 | |
| fi | |
| echo "Extracting tar..." | |
| mkdir -p "${EXTRACT_DIR}" && \ | |
| tar -xf "${DOWNLOAD_FILE}" -C "${EXTRACT_DIR}" || { | |
| echo "Error: Extraction of tar file failed. File may be corrupt." >&2 | |
| echo "Downloaded file location: ${DOWNLOAD_FILE}" >&2 | |
| rm -rf "${EXTRACT_DIR}" | |
| exit 1 | |
| } | |
| echo "Cleaning up..." | |
| chmod +x "${EXTRACT_DIR}/VMware-Workstation-${VERSION}-${BUILD}.x86_64.bundle" | |
| rm -f "${DOWNLOAD_FILE}" "${EXTRACT_DIR}/descriptor.xml" 2>/dev/null | |
| echo -e "\nFinished. You can now run the installer bundle." | |
| echo "VMware Workstation bundle location: ${BUNDLE_PATH}" | |
| fi |
Not working for me:
z87:~/Downloads$ bash <(curl -sSL https://gist.github.com/jetfir3/e25e74a42e7c7ac2c808a537b12dc768/raw/download_workstation.sh) -k -v 16.1.2
Selected legacy version: 16.1.2 with build: 17966106
Downloading VMware Workstation v16.1.2 (17966106) from CDN cache...
Error: Installer file not found at https://softwareupdate-prod.broadcom.com/cds/vmw-desktop/ws/16.1.2/17966106/linux/core/VMware-Workstation-16.1.2-17966106.x86_64.bundle.tar via CDN.
Not working for me:
it appears the builds are no longer cached by cloudflare. so, for now, only the latest build which is hosted on archive.org will work.
Damn... I really needed one of the older versions. Thanks for getting back, though! Archive org has the version I'm looking for, but it's for a Windows host. I need the Linux build.
Damn... I really needed one of the older versions. Thanks for getting back, though! Archive org has the version I'm looking for, but it's for a Windows host. I need the Linux build.
https://github.com/201853910/VMwareWorkstation/releases
Puxa... eu realmente precisava de uma das versões antigas. Obrigado por responder! O Archive.org tem a versão que estou procurando, mas é para Windows. Eu preciso da versão para Linux.
https://github.com/201853910/VMwareWorkstation/releases
thankyou so much!
-kto keep download file compressed, exiting after download (ignored for v17.6.4 and higher)-v VERSIONto specify the desired version (12.0.0 or higher required)Run directly with:
Example with arguments:
VMware Tools:
https://packages-prod.broadcom.com/tools/
Latest - https://packages-prod.broadcom.com/tools/releases/latest/
Legacy / macOS - https://packages-prod.broadcom.com/tools/frozen/
Linux / Windows - https://packages-prod.broadcom.com/tools/releases/
VMware Download scripts for other platforms: