Unverified Commit 3cf38c96 authored by Kroese's avatar Kroese Committed by GitHub
Browse files

feat: Improved downloader (#701)

parent 64a8d74d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true"
RUN set -eu && \
    apt-get update && \
    apt-get --no-install-recommends -y install \
        bc \
        jq \
        tini \
        wget \
        7zip \
+2 −3
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ kubectl apply -f https://raw.githubusercontent.com/qemus/qemu/refs/heads/master/

  - Set the `BOOT` variable to the [operating system](#how-do-i-select-the-operating-system) you want to install.

  - Start the container and connect to [port 8006](http://localhost:8006) using your web browser.
  - Start the container and connect to [port 8006](http://127.0.0.1:8006/) using your web browser.

  - You will see the screen and can now install the OS of your choice using your keyboard and mouse.

@@ -98,9 +98,8 @@ kubectl apply -f https://raw.githubusercontent.com/qemus/qemu/refs/heads/master/
  | `alpine`   | Alpine Linux    | 60 MB    |
  | `arch`     | Arch Linux      | 1.2 GB   |
  | `cachy`    | CachyOS         | 2.6 GB   |
  | `centos`   | CentOS Stream   | 7.0 GB   |
  | `centos`   | CentOS          | 7.0 GB   |
  | `debian`   | Debian          | 3.3 GB   |
  | `endeavour`| EndeavourOS     | 3.0 GB   |
  | `fedora`   | Fedora          | 2.3 GB   |
  | `gentoo`   | Gentoo          | 3.6 GB   |
  | `kali`     | Kali Linux      | 3.8 GB   |
+126 −56
Original line number Diff line number Diff line
@@ -24,104 +24,181 @@ getURL() {
  local id="${1/ /}"
  local ret="$2"
  local url=""
  local arm=
  local arm=""
  local name=""
  local body=""
  local version=""

  case "${id,,}" in
    "alma" | "almalinux" | "alma-linux" )
      name="AlmaLinux"
      url="https://repo.almalinux.org/almalinux/9/live/x86_64/AlmaLinux-9.5-x86_64-Live-GNOME.iso"
      arm="https://repo.almalinux.org/almalinux/9/live/aarch64/AlmaLinux-9.5-aarch64-Live-GNOME.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://repo.almalinux.org/almalinux/9/live/x86_64/AlmaLinux-9-latest-x86_64-Live-GNOME.iso"
        arm="https://repo.almalinux.org/almalinux/9/live/aarch64/AlmaLinux-9-latest-aarch64-Live-GNOME.iso"
      fi ;;
    "alpine" | "alpinelinux" | "alpine-linux" )
      name="Alpine Linux"
      url="https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.1-x86_64.iso"
      arm="https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/aarch64/alpine-virt-3.19.1-aarch64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/latest-releases.yaml") || exit 65
        version=$(echo "$body" | awk '/"Xen"/{found=0} {if(found) print} /"Virtual"/{found=1}' | grep 'version:' | awk '{print $2}')
        url="https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-virt-$version-x86_64.iso"
        arm="https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/aarch64/alpine-virt-$version-aarch64.iso"
      fi ;;
    "arch" | "archlinux" | "arch-linux" )
      name="Arch Linux"
      url="https://geo.mirror.pkgbuild.com/iso/2025.03.01/archlinux-x86_64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://geo.mirror.pkgbuild.com/iso/latest/archlinux-x86_64.iso"
      fi ;;
    "cachy" | "cachyos" )
      name="CachyOS"
      url="https://cdn77.cachyos.org/ISO/desktop/250202/cachyos-desktop-linux-250202.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://cachyos.org/download/") || exit 65
        url=$(echo "$body" | tr '&' '\n' | grep "ISO/desktop" | grep -v 'iso.sha' | grep -v 'iso.sig' | cut -d';' -f2)
        arm=$(echo "$body" | tr '&' '\n' | grep "ISO/handheld" | grep -v 'iso.sha' | grep -v 'iso.sig' | cut -d';' -f2)
      fi ;;
    "centos" | "centosstream" | "centos-stream" )
      name="CentOS Stream"
      url="https://mirrors.xtom.de/centos-stream/10-stream/BaseOS/x86_64/iso/CentOS-Stream-10-latest-x86_64-dvd1.iso"
      arm="https://mirrors.xtom.de/centos-stream/10-stream/BaseOS/aarch64/iso/CentOS-Stream-10-latest-aarch64-dvd1.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://linuxsoft.cern.ch/centos-stream/") || exit 65
        version=$(echo "$body" | grep "\-stream" | cut -d'"' -f 6 | cut -d'-' -f 1 | head -n 1)
        url="https://mirrors.xtom.de/centos-stream/$version-stream/BaseOS/x86_64/iso/CentOS-Stream-$version-latest-x86_64-dvd1.iso"
        arm="https://mirrors.xtom.de/centos-stream/$version-stream/BaseOS/aarch64/iso/CentOS-Stream-$version-latest-aarch64-dvd1.iso"
      fi ;;
    "debian" )
      name="Debian"
      version=$(pipe "https://cdimage.debian.org/debian-cd/") || exit 65
      version=$(echo "$version" | grep '\.[0-9]/' | cut -d'>' -f 9 | cut -d'/' -f 1)
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://cdimage.debian.org/debian-cd/") || exit 65
        version=$(echo "$body" | grep '\.[0-9]/' | cut -d'>' -f 9 | cut -d'/' -f 1)
        url="https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-$version-amd64-standard.iso"
      arm="https://cdimage.debian.org/debian-cd/current/arm64/iso-dvd/debian-$version-arm64-DVD-1.iso" ;;
    "endeavour" | "endeavouros" )
      name="EndeavourOS"
      url="https://mirrors.gigenet.com/endeavouros/iso/EndeavourOS_Mercury-2025.02.08.iso" ;;
        arm="https://cdimage.debian.org/debian-cd/current/arm64/iso-dvd/debian-$version-arm64-DVD-1.iso"
      fi ;;
    "fedora" | "fedoralinux" | "fedora-linux" )
      name="Fedora Linux"
      url="https://download.fedoraproject.org/pub/fedora/linux/releases/41/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-41-1.4.iso"
      arm="https://eu.edge.kernel.org/fedora/releases/41/Workstation/aarch64/images/Fedora-Workstation-41-1.4.aarch64.raw.xz" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://getfedora.org/releases.json") || exit 65
        version=$(echo "$body" | jq -r 'map(.version) | unique | .[]' | sed 's/ /_/g' | sort -r | head -n 1)
        url=$(echo "$body" | jq -r "map(select(.arch==\"x86_64\" and .version==\"${version}\" and .variant==\"Workstation\" and .subvariant==\"Workstation\" )) | .[].link")
        arm=$(echo "$body" | jq -r "map(select(.arch==\"aarch64\" and .version==\"${version}\" and .variant==\"Workstation\" and .subvariant==\"Workstation\" )) | .[].link")
      fi ;;
    "gentoo" | "gentoolinux" | "gentoo-linux" )
      name="Gentoo Linux"
      url="https://distfiles.gentoo.org/releases/amd64/autobuilds/20250309T170330Z/livegui-amd64-20250309T170330Z.iso"
      arm="https://distfiles.gentoo.org/releases/arm64/autobuilds/20250309T234826Z/di-arm64-cloudinit-20250309T234826Z.qcow2" ;;
      if [[ "$ret" == "url" ]]; then
        if [[ "${ARCH,,}" != "arm64" ]]; then
          body=$(pipe "https://mirror.bytemark.co.uk/gentoo/releases/amd64/autobuilds/latest-iso.txt") || exit 65
          version=$(echo "$body" | grep livegui | cut -d' ' -f1)
          url="https://distfiles.gentoo.org/releases/amd64/autobuilds/$version"
        else
          body=$(pipe "https://mirror.bytemark.co.uk/gentoo/releases/arm64/autobuilds/latest-qcow2.txt")  || exit 65
          version=$(echo "$body" | grep cloudinit | cut -d' ' -f1)
          arm="https://distfiles.gentoo.org/releases/arm64/autobuilds/$version"
        fi
      fi ;;
    "kali" | "kalilinux" | "kali-linux" )
      name="Kali Linux"
      url="https://cdimage.kali.org/kali-2024.4/kali-linux-2024.4-live-amd64.iso"
      arm="https://cdimage.kali.org/kali-2024.4/kali-linux-2024.4-live-arm64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://cdimage.kali.org/current/?C=M;O=D") || exit 65
        version=$(echo "$body" | grep -o ">kali-linux-.*-live-amd64.iso" | head -n 1 | cut -c 2-)
        url="https://cdimage.kali.org/current/$version"
        version=$(echo "$body" | grep -o ">kali-linux-.*-live-arm64.iso" | head -n 1 | cut -c 2-)
        arm="https://cdimage.kali.org/current/$version"
      fi ;;
    "kubuntu" )
      name="Kubuntu"
      url="https://cdimage.ubuntu.com/kubuntu/releases/24.10/release/kubuntu-24.10-desktop-amd64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://cdimage.ubuntu.com/kubuntu/releases/24.10/release/kubuntu-24.10-desktop-amd64.iso"
      fi ;;
    "lmde" )
      name="Linux Mint Debian Edition"
      url="https://mirror.rackspace.com/linuxmint/iso/debian/lmde-6-cinnamon-64bit.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://mirror.rackspace.com/linuxmint/iso/debian/lmde-6-cinnamon-64bit.iso"
      fi ;;
    "macos" | "osx" )
      name="macOS"
      error "To install $name use: https://github.com/dockur/macos" && return 1 ;;
    "mint" | "linuxmint" | "linux-mint" )
      name="Linux Mint"
      url="https://mirrors.layeronline.com/linuxmint/stable/22.1/linuxmint-22.1-cinnamon-64bit.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://mirrors.layeronline.com/linuxmint/stable/22.1/linuxmint-22.1-cinnamon-64bit.iso"
      fi ;;
    "manjaro" )
      name="Manjaro"
      url="https://download.manjaro.org/kde/24.2.1/manjaro-kde-24.2.1-241216-linux612.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://gitlab.manjaro.org/web/iso-info/-/raw/master/file-info.json") || exit 65
        url=$(echo "$body" | jq -r .official.plasma.image)
      fi ;;
    "mx" | "mxlinux" | "mx-linux" )
      name="MX Linux"
      url="https://mirror.umd.edu/mxlinux-iso/MX/Final/Xfce/MX-23.5_x64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        version=$(curl --disable -Ils "https://sourceforge.net/projects/mx-linux/files/latest/download" | grep -i 'location:' | cut -d? -f1 | cut -d_ -f1 | cut -d- -f3) || exit 65
        url="https://mirror.umd.edu/mxlinux-iso/MX/Final/Xfce/MX-${version}_x64.iso"
      fi ;;
    "nixos" )
      name="NixOS"
      url="https://channels.nixos.org/nixos-24.11/latest-nixos-gnome-x86_64-linux.iso"
      arm="https://channels.nixos.org/nixos-24.11/latest-nixos-gnome-aarch64-linux.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://nix-channels.s3.amazonaws.com/?delimiter=/") || exit 65
        version=$(echo "$body" | grep -o -E 'nixos-[[:digit:]]+\.[[:digit:]]+' | cut -d- -f2 | sort -nru | head -n 1)
        url="https://channels.nixos.org/nixos-$version/latest-nixos-gnome-x86_64-linux.iso"
        arm="https://channels.nixos.org/nixos-$version/latest-nixos-gnome-aarch64-linux.iso"
      fi ;;
    "opensuse" | "open-suse" | "suse" )
      name="OpenSUSE"
      url="https://download.opensuse.org/distribution/leap/15.0/live/openSUSE-Leap-15.0-GNOME-Live-x86_64-Current.iso" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://download.opensuse.org/distribution/leap/") || exit 65
        version=$(echo "$body" | grep 'class="name"' | cut -d '/' -f2 | grep -v 42 | sort -r | head -n 1) 
        url="https://download.opensuse.org/distribution/leap/$version/installer/iso/agama-installer-Leap.x86_64-Leap.iso"
        arm="https://download.opensuse.org/distribution/leap/$version/installer/iso/agama-installer-Leap.aarch64-Leap.iso"
      fi ;;
    "oracle" | "oraclelinux" | "oracle-linux" )
      name="Oracle Linux"
      if [[ "$ret" == "url" ]]; then
        url="https://yum.oracle.com/ISOS/OracleLinux/OL9/u5/x86_64/OracleLinux-R9-U5-x86_64-boot.iso"
      arm="https://yum.oracle.com/ISOS/OracleLinux/OL9/u5/aarch64/OracleLinux-R9-U5-aarch64-boot-uek.iso" ;;
        arm="https://yum.oracle.com/ISOS/OracleLinux/OL9/u5/aarch64/OracleLinux-R9-U5-aarch64-boot-uek.iso"
      fi ;;
    "rocky" | "rockylinux" | "rocky-linux" )
      name="Rocky Linux"
      if [[ "$ret" == "url" ]]; then
        url="https://dl.rockylinux.org/pub/rocky/9/live/x86_64/Rocky-9-Workstation-x86_64-latest.iso"
      arm="https://dl.rockylinux.org/pub/rocky/9/live/aarch64/Rocky-9-Workstation-aarch64-latest.iso" ;;
        arm="https://dl.rockylinux.org/pub/rocky/9/live/aarch64/Rocky-9-Workstation-aarch64-latest.iso"
      fi ;;
    "slack" | "slackware" )
      name="Slackware"
      url="https://slackware.nl/slackware-live/slackware64-15.0-live/slackware64-live-15.0.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://slackware.nl/slackware-live/slackware64-current-live/slackware64-live-current.iso"
      fi ;;
    "tails" )
      name="Tails"
      url="https://download.tails.net/tails/stable/tails-amd64-6.13/tails-amd64-6.13.img" ;;
      if [[ "$ret" == "url" ]]; then
        body=$(pipe "https://tails.net/install/v2/Tails/amd64/stable/latest.json") || exit 65
        url=$(echo "$body" | jq -r '.installations[0]."installation-paths"[]|select(.type=="iso")|."target-files"[0].url')
      fi ;;
    "ubuntu" | "ubuntu-desktop" )
      name="Ubuntu Desktop"
      if [[ "$ret" == "url" ]]; then
        url="https://releases.ubuntu.com/24.04.2/ubuntu-24.04.2-desktop-amd64.iso"
      arm="https://cdimage.ubuntu.com/ubuntu/releases/24.10/release/ubuntu-24.10-desktop-arm64.iso" ;;
        arm="https://cdimage.ubuntu.com/ubuntu/releases/24.10/release/ubuntu-24.10-desktop-arm64.iso"
      fi ;;
    "ubuntus" | "ubuntu-server")
      name="Ubuntu Server"
      if [[ "$ret" == "url" ]]; then
        url="https://releases.ubuntu.com/24.04.2/ubuntu-24.04.2-live-server-amd64.iso"
      arm="https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.2-live-server-arm64.iso" ;;
        arm="https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.2-live-server-arm64.iso"
      fi ;;
    "windows" )
      name="Windows"
      error "To install $name use: https://github.com/dockur/windows" && return 1 ;;
    "xubuntu" )
      name="Xubuntu"
      url="https://mirror.us.leaseweb.net/ubuntu-cdimage/xubuntu/releases/24.04/release/xubuntu-24.04.2-desktop-amd64.iso" ;;
      if [[ "$ret" == "url" ]]; then
        url="https://mirror.us.leaseweb.net/ubuntu-cdimage/xubuntu/releases/24.04/release/xubuntu-24.04.2-desktop-amd64.iso"
      fi ;;
  esac

  case "${ret,,}" in
    "name" )
      echo "$name"
      ;;
    "url" )

      if [[ "${ARCH,,}" != "arm64" ]]; then
        if [ -n "$name" ] && [ -z "$url" ]; then
          error "No image for $name available!"
@@ -134,13 +211,6 @@ getURL() {
        fi
      fi

  case "${ret,,}" in
    "test" )
      ;;
    "name" )
      echo "$name"
      ;;
    *)
      if [[ "${ARCH,,}" != "arm64" ]]; then
        echo "$url"
      else
+2 −4
Original line number Diff line number Diff line
@@ -222,10 +222,8 @@ if [ -z "$BOOT" ] || [[ "$BOOT" == *"example.com/image.iso" ]]; then
  error "No value specified for the BOOT variable." && exit 64
fi

! getURL "$BOOT" "test" && exit 34

url=$(getURL "$BOOT" "url")
name=$(getURL "$BOOT" "name")
url=$(getURL "$BOOT" "url") || exit 34
name=$(getURL "$BOOT" "name") || exit 34

[ -n "$url" ] && BOOT="$url"

+6 −0
Original line number Diff line number Diff line
@@ -69,6 +69,12 @@ CPU="${CPU// 8 Core/}"
CPU="${CPU// 16 Core/}"
CPU="${CPU// 32 Core/}"
CPU="${CPU// 64 Core/}"
CPU="${CPU//10th Gen /}"
CPU="${CPU//11th Gen /}"
CPU="${CPU//12th Gen /}"
CPU="${CPU//13th Gen /}"
CPU="${CPU//14th Gen /}"
CPU="${CPU//15th Gen /}"
CPU="${CPU// Processor/}"
CPU="${CPU// Quad core/}"
CPU="${CPU// Core TM/ Core}"