diff --git a/README.md b/README.md index 78ac412..c744d8a 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,30 @@ comprehensive support for macOS and Windows**. * **Windows** 8.1, 10 and 11 including TPM 2.0 * [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu flavours](https://ubuntu.com/download/flavours)** * [Debian](https://www.debian.org/) (bullseye with all the official and non-free DE variants) - * [Fedora](https://getfedora.org/) & openSUSE ([Leap](https://get.opensuse.org/leap/), [Tumbleweed](https://get.opensuse.org/tumbleweed/), [MicroOS](https://microos.opensuse.org/)) + * [Fedora](https://getfedora.org/) + & openSUSE ([Leap](https://get.opensuse.org/leap/) + , [Tumbleweed](https://get.opensuse.org/tumbleweed/) + , [MicroOS](https://microos.opensuse.org/)) * [Alma Linux](https://almalinux.org/) - * [Linux Mint](https://linuxmint.com/) (Cinnamon, MATE, and XFCE), [elementary OS](https://elementary.io/), [Pop!_OS](https://pop.system76.com/) - * [Arch Linux](https://www.archlinux.org/), [Kali](https://www.kali.org/),[Garuda](https://garudalinux.org/), [ZorinOS](https://zorin.com/os/) & [NixOS](https://nixos.org/) - * [Oracle Linux](https://www.oracle.com/linux/) and [Rocky Linux](https://rockylinux.org/) + * [Alpine Linux](https://www.alpinelinux.org/) + * [Linux Mint](https://linuxmint.com/) (Cinnamon, MATE, and XFCE) + , [elementary OS](https://elementary.io/) + , [Pop!_OS](https://pop.system76.com/) + * [Arch Linux](https://www.archlinux.org/) + , [ArcoLinux](https://www.arcolinux.info/) + , [CachyOS](https://cachyos.org/) + , [Kali](https://www.kali.org/) + , [Garuda](https://garudalinux.org/) + , [Gentoo Linux](https://www.gentoo.org/) + , [Manjaro](https://manjaro.org) + , [NixOS](https://nixos.org/) + & [ZorinOS](https://zorin.com/os/) + * [Oracle Linux](https://www.oracle.com/linux/) + and [Rocky Linux](https://rockylinux.org/) * [Regolith Linux](https://regolith-linux.org/) (Release 1.6 and latest 2.0.0 pre-release ) - * [FreeBSD](https://www.freebsd.org/) & [OpenBSD](https://www.openbsd.org/) + * [FreeBSD](https://www.freebsd.org/) + & [OpenBSD](https://www.openbsd.org/) + * [Haiku](https://www.haiku-os.org/) * Full SPICE support including host/guest clipboard sharing * VirtIO-webdavd file sharing for Linux and Windows guests * VirtIO-9p file sharing for Linux and macOS guests @@ -177,14 +194,19 @@ preferred flavour. `quickget` also supports: * `alma` + * `alpine` * `archlinux` + * `arcolinux` + * `cachyos` * `debian` * `elementary` * `fedora` * `garuda` + * `gentoo` * `kali` * `kdeneon` * `linuxmint` + * `mxlinux` * `nixos` * `opensuse` * `oraclelinux` @@ -329,15 +351,28 @@ tpm="on" * `fixed_iso=` specifies the ISO image that provides VirtIO drivers. * `tpm="on"` instructs `quickemu` to create a software emulated TPM device using `swtpm`. -## BSD Guests +## Haiku Guests -`quickemu` supports FreeBSD and OpenBSD. +`quickemu` supports [Haiku](https://www.haiku-os.org/). ```bash -quickget freebsd 13_0 -quickemu --vm freebsd-13_0.conf +quickget quickget haiku r1beta3-x86_64 +quickemu --vm haiku-r1beta3-x86_64.conf ``` +At the moment the only way to share files between host and a Haiku guest is by +using SSH (having a SSH server running on the host): + +On guest: + +```bash +scp example.txt user@host-local-ip:/home/user # sending a file from guest to host +scp user@host-local-ip:/home/user/example.txt . # receiving a file from host to guest +``` + +`quickget` cannot automatically download and create virtual machines for Haiku +nightly versions, but they work if the ISO and configuration are set up manually. + # SPICE The following features are available while using the SPICE protocol: diff --git a/quickemu b/quickemu index 5507580..d117ae0 100755 --- a/quickemu +++ b/quickemu @@ -228,6 +228,7 @@ function vm_boot() { local KERNEL_NODE="" local KERNEL_VER="?" local LSB_DESCRIPTION="Unknown OS" + local MACHINE_TYPE="q35" local MAC_BOOTLOADER="" local MAC_MISSING="" local MAC_DISK_DEV="ide-hd,bus=ahci.2" @@ -383,7 +384,7 @@ function vm_boot() { # https://bugzilla.redhat.com/show_bug.cgi?id=1929357#c5 case ${secureboot} in on) - if [ -e "/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ]; then + if [ -e "/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" ]; then EFI_CODE="/usr/share/OVMF/OVMF_CODE_4M.secboot.fd" efi_vars "/usr/share/OVMF/OVMF_VARS_4M.fd" "${EFI_VARS}" elif [ -e "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd" ]; then @@ -392,9 +393,18 @@ function vm_boot() { elif [ -e "/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" ]; then EFI_CODE="/usr/share/OVMF/x64/OVMF_CODE.secboot.fd" efi_vars "/usr/share/OVMF/x64/OVMF_VARS.fd" "${EFI_VARS}" - elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.fd" ]; then + elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" ]; then EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" + elif [ -e "/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" ]; then + EFI_CODE="/usr/share/qemu/ovmf-x86_64-smm-ms-code.bin" + efi_vars "/usr/share/qemu/ovmf-x86_64-smm-ms-vars.bin" "${EFI_VARS}" + elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" ]; then + EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd" + efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" + elif [ -e "/usr/share/qemu/edk2-x86_64-secure-code.fd" ]; then + EFI_CODE="/usr/share/qemu/edk2-x86_64-secure-code.fd" + efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" else echo "ERROR! SecureBoot was requested but no SecureBoot capable firmware was found." echo " Please install OVMF firmware." @@ -417,6 +427,12 @@ function vm_boot() { elif [ -e "/usr/share/edk2-ovmf/OVMF_CODE.fd" ]; then EFI_CODE="/usr/share/edk2-ovmf/OVMF_CODE.fd" efi_vars "/usr/share/edk2-ovmf/OVMF_VARS.fd" "${EFI_VARS}" + elif [ -e "/usr/share/qemu/ovmf-x86_64-4m-code.bin" ]; then + EFI_CODE="/usr/share/qemu/ovmf-x86_64-4m-code.bin" + efi_vars "/usr/share/qemu/ovmf-x86_64-4m-vars.bin" "${EFI_VARS}" + elif [ -e "/usr/share/qemu/edk2-x86_64-code.fd" ]; then + EFI_CODE="/usr/share/qemu/edk2-x86_64-code.fd" + efi_vars "/usr/share/qemu/edk2-x86_64-code.fd" "${EFI_VARS}" else echo "ERROR! EFI boot requested but no EFI firmware found." echo " Please install OVMF firmware." @@ -463,6 +479,29 @@ function vm_boot() { disk_size="16G" fi ;; + kolibrios) + CPU="-cpu qemu32,kvm=on" + if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then + CPU="${CPU},topoext" + fi + MACHINE_TYPE="pc" + NET_DEVICE="rtl8139" + GUEST_TWEAKS="-boot d" + if [ -z "${disk_size}" ]; then + disk_size="256M" + fi + ;; + haiku) + CPU="-cpu host,kvm=on" + MACHINE_TYPE="pc" + NET_DEVICE="rtl8139" + if [ "${HOST_CPU_VENDOR}" == "AuthenticAMD" ]; then + CPU="${CPU},topoext" + fi + if [ -z "${disk_size}" ]; then + disk_size="32G" + fi + ;; macos) #https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/ # A CPU with SSE4.1 support is required for >= macOS Sierra @@ -591,7 +630,7 @@ function vm_boot() { fi fi - if [ "${DISK_USED}" == "yes" ]; then + if [ "${DISK_USED}" == "yes" ] && [ "${guest_os}" != "kolibrios" ]; then # If there is a disk image that appears to be used do not boot from installation media. iso="" img="" @@ -833,7 +872,7 @@ function vm_boot() { # shellcheck disable=SC2054,SC2206,SC2140 args+=(-name ${VMNAME},process=${VMNAME} -pidfile "${VMDIR}/${VMNAME}.pid" - -enable-kvm -machine q35,smm=${SMM},vmport=off ${GUEST_TWEAKS} + -enable-kvm -machine ${MACHINE_TYPE},smm=${SMM},vmport=off ${GUEST_TWEAKS} ${CPU} ${SMP} -m ${RAM_VM} ${BALLOON} -smbios type=2,manufacturer="Quickemu Project",product="Quickemu",version="${VERSION}",serial="0xDEADBEEF",location="quickemu.com",asset="${VMNAME}" @@ -891,6 +930,13 @@ function vm_boot() { args+=(-drive if=floppy,format=raw,file="${floppy}") fi + # Since there is bug (probably) in KolibriOS: cdrom indexes 0 or 1 make system show an extra unexisting iso, so we use index=2 + if [ -n "${iso}" ] && [ "${guest_os}" == "kolibrios" ]; then + # shellcheck disable=SC2054 + args+=(-drive media=cdrom,index=2,file="${iso}") + iso="" + fi + if [ -n "${iso}" ]; then # shellcheck disable=SC2054 args+=(-drive media=cdrom,index=0,file="${iso}") @@ -922,6 +968,11 @@ function vm_boot() { # shellcheck disable=SC2054,SC2206 args+=(-device ${MAC_DISK_DEV},drive=SystemDisk -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) + elif [ "${guest_os}" == "kolibrios" ]; then + # shellcheck disable=SC2054,SC2206 + args+=(-device ahci,id=ahci + -device ide-hd,bus=ahci.0,drive=SystemDisk + -drive id=SystemDisk,if=none,format=qcow2,file="${disk_img}" ${STATUS_QUO}) else # shellcheck disable=SC2054,SC2206 args+=(-device virtio-blk-pci,drive=SystemDisk diff --git a/quickget b/quickget index 235fd9a..5c639fd 100755 --- a/quickget +++ b/quickget @@ -36,15 +36,32 @@ function pretty_name() { SIMPLE_NAME="${1}" case ${SIMPLE_NAME} in alma) PRETTY_NAME="Alma Linux";; + alpine) PRETTY_NAME="Alpine Linux";; android) PRETTY_NAME="Android x86";; archlinux) PRETTY_NAME="Arch Linux";; + arcolinux) PRETTY_NAME="Arco Linux";; + cachyos) PRETTY_NAME="CachyOS";; elementary) PRETTY_NAME="elementary OS";; freebsd) PRETTY_NAME="FreeBSD";; + gentoo) PRETTY_NAME="Gentoo";; garuda) PRETTY_NAME="Garuda Linux";; + haiku) PRETTY_NAME="Haiku";; kdeneon) PRETTY_NAME="KDE Neon";; + kolibrios) PRETTY_NAME="KolibriOS";; linuxmint-cinnamon) PRETTY_NAME="Linux Mint Cinnamon";; linuxmint-mate) PRETTY_NAME="Linux Mint MATE";; linuxmint-xfce) PRETTY_NAME="Linux Mint XFCE";; + manjaro-xfce) PRETTY_NAME="Manjaro XFCE";; + manjaro-kde) PRETTY_NAME="Manjaro KDE";; + manjaro-gnome) PRETTY_NAME="Manjaro Gnome";; + manjaro-budgie) PRETTY_NAME="Manjaro Budgie";; + manjaro-cinnamon) PRETTY_NAME="Manjaro Cinnamon";; + manjaro-deepin) PRETTY_NAME="Manjaro Deepin";; + manjaro-i3) PRETTY_NAME="Manjaro i3";; + manjaro-mate) PRETTY_NAME="Manjaro MATE";; + mxlinux-xfce) PRETTY_NAME="MX Linux XFCE";; + mxlinux-kde) PRETTY_NAME="MX Linux KDE";; + mxlinux-fluxbox) PRETTY_NAME="MX Linux Fluxbox";; nixos-gnome) PRETTY_NAME="NixOS Gnome";; nixos-plasma5) PRETTY_NAME="NixOS KDE";; nixos-minimal) PRETTY_NAME="NixOS Minimal";; @@ -59,6 +76,7 @@ function pretty_name() { ubuntu-kylin) PRETTY_NAME="Ubuntu Kylin";; ubuntu-mate) PRETTY_NAME="Ubuntu MATE";; ubuntu-studio) PRETTY_NAME="Ubuntu Studio";; + void) PRETTY_NAME="Void Linux";; zorin) PRETTY_NAME="Zorin OS";; *) PRETTY_NAME="${SIMPLE_NAME^}";; esac @@ -111,6 +129,10 @@ function list_csv() { FUNC="ubuntu" elif [[ "${OS}" == *"linuxmint"* ]]; then FUNC="linuxmint" + elif [[ "${OS}" == *"manjaro"* ]]; then + FUNC="manjaro" + elif [[ "${OS}" == *"mxlinux"* ]]; then + FUNC="mxlinux" elif [[ "${OS}" == *"nixos"* ]]; then FUNC="nixos" else @@ -127,8 +149,12 @@ function list_csv() { DOWNLOADER="${DL}" elif [[ "${OS}" == *"ubuntu"* ]] && [ "${RELEASE}" == "devel" ]; then DOWNLOADER="${DL}" + elif [ "${OS}" == "cachyos" ]; then + DOWNLOADER="${DL}" elif [ "${OS}" == "garuda" ]; then DOWNLOADER="${DL}" + elif [ "${OS}" == "gentoo" ]; then + DOWNLOADER="${DL}" elif [[ "${OS}" == *"kdeneon"* ]]; then DOWNLOADER="${DL}" else @@ -161,19 +187,36 @@ function list_csv() { function os_support() { echo alma \ + alpine \ android \ archlinux \ + arcolinux \ + cachyos \ debian \ elementary \ freebsd \ fedora \ garuda \ + gentoo \ + haiku \ kali \ kdeneon \ + kolibrios \ kubuntu \ linuxmint-cinnamon \ linuxmint-mate \ linuxmint-xfce \ + manjaro-xfce \ + manjaro-kde \ + manjaro-gnome \ + manjaro-budgie \ + manjaro-cinnamon \ + manjaro-deepin \ + manjaro-i3 \ + manjaro-mate \ + mxlinux-xfce \ + mxlinux-kde \ + mxlinux-fluxbox \ nixos-gnome \ nixos-plasma5 \ nixos-minimal \ @@ -186,11 +229,13 @@ function os_support() { regolith \ rockylinux \ solus \ + tails \ ubuntu \ ubuntu-budgie \ ubuntu-kylin \ ubuntu-mate \ ubuntu-studio \ + void \ windows \ xubuntu \ zorin @@ -202,6 +247,14 @@ function releases_alma() { 8.5 } +function releases_alpine() { + echo latest \ + 3.12 \ + 3.13 \ + 3.14 \ + 3.15 +} + function releases_android() { echo 9.0 \ 8.1 \ @@ -217,21 +270,28 @@ function releases_archlinux() { echo latest } +function releases_arcolinux() { + echo latest +} + # later refactor these DE variants like languages and avoid the arch ? # all these are available with a "nonfree" option too function releases_debian() { - echo 11.1.0-amd64-cinnamon \ - 11.1.0-amd64-gnome \ - 11.1.0-amd64-kde \ - 11.1.0-amd64-lxde \ - 11.1.0-amd64-lxqt \ - 11.1.0-amd64-mate \ - 11.1.0-amd64-standard \ - 11.1.0-amd64-xfce + echo cinnamon \ + gnome \ + kde \ + lxde \ + lxqt \ + mate \ + standard \ + xfce +} +function releases_cachyos() { + echo 2022.01.09 } function releases_elementary() { - echo 6.0 + echo 6.1 } function releases_freebsd(){ @@ -245,6 +305,10 @@ function releases_fedora(){ 35 } +function releases_gentoo(){ + echo latest +} + function releases_garuda() { echo bspwm \ dr460nized \ @@ -262,6 +326,11 @@ function releases_garuda() { cinnamon } +function releases_haiku() { + echo r1beta3-x86_64 \ + r1beta3-x86_gcc2h +} + function releases_kali() { echo latest \ weekly @@ -274,10 +343,18 @@ function releases_kdeneon() { developer } +function releases_kolibrios() { + echo latest +} + function releases_linuxmint(){ echo 20.2 } +function releases_mxlinux(){ + echo 21 +} + function releases_nixos(){ echo 21.05 \ 21.11 @@ -314,9 +391,20 @@ function releases_macos() { monterey } +function releases_manjaro() { + case ${OS} in + *xfce|*kde|*gnome) echo full \ + minimal \ + minimal-lts;; + *budgie|*cinnamon|*deepin|*i3|*mate) echo full \ + minimal;; + esac +} + function releases_popos() { echo 20.04 \ - 21.04 + 21.04 \ + 21.10 } function releases_regolith() { @@ -343,6 +431,10 @@ function releases_solus() { 4.3-plasma } +function releases_tails() { + echo stable +} + function releases_ubuntu() { echo bionic \ focal \ @@ -352,6 +444,13 @@ function releases_ubuntu() { canary } +function releases_void() { + echo base \ + musl \ + xfce \ + xfce-musl +} + function languages_windows() { LANGS=(Arabic "Brazilian Portuguese" @@ -513,15 +612,24 @@ function make_vm_config() { if [ "${OS}" == "alma" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "alpine" ]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [ "${OS}" == "android" ]; then GUEST="linux" IMAGE_TYPE="iso" elif [ "${OS}" == "archlinux" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "arcolinux" ]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [ "${OS}" == "debian" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "cachyos" ]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [ "${OS}" == "elementary" ]; then GUEST="linux" IMAGE_TYPE="iso" @@ -537,12 +645,27 @@ function make_vm_config() { elif [ "${OS}" == "garuda" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "gentoo" ]; then + GUEST="linux" + IMAGE_TYPE="iso" + elif [ "${OS}" == "haiku" ]; then + GUEST="haiku" + IMAGE_TYPE="iso" elif [ "${OS}" == "kdeneon" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "kolibrios" ]; then + GUEST="kolibrios" + IMAGE_TYPE="iso" elif [[ "${OS}" == *"linuxmint"* ]]; then GUEST="linux" IMAGE_TYPE="iso" + elif [[ "${OS}" == *"manjaro"* ]]; then + GUEST="linux" + IMAGE_TYPE="iso" + elif [[ "${OS}" == *"mxlinux"* ]]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [[ "${OS}" == *"nixos"* ]]; then GUEST="linux" IMAGE_TYPE="iso" @@ -567,9 +690,15 @@ function make_vm_config() { elif [ "${OS}" == "solus" ]; then GUEST="linux" IMAGE_TYPE="iso" + elif [[ "${OS}" == "tails" ]]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [[ "${OS}" == *"ubuntu"* ]]; then GUEST="linux" IMAGE_TYPE="iso" + elif [ "${OS}" == "void" ]; then + GUEST="linux" + IMAGE_TYPE="iso" elif [ "${OS}" == "macos" ]; then GUEST="macos" IMAGE_TYPE="img" @@ -596,25 +725,48 @@ EOF if [ -n "${ISO_FILE}" ]; then echo "fixed_iso=\"${VM_PATH}/${ISO_FILE}\"" >> "${OS}-${RELEASE}.conf" fi + if [ "${OS}" == "alma" ] && [ ${ISOTYPE} == "dvd" ]; then echo "disk_size=\"32G\"" >> "${OS}-${RELEASE}.conf" fi + + if [ "${OS}" == "kolibrios" ]; then + echo "boot=\"legacy\"" >> "${OS}-${RELEASE}.conf" + fi + if [ "${OS}" == "openbsd" ]; then echo "boot=\"legacy\"" >> "${OS}-${RELEASE}.conf" fi + if [ "${OS}" == "tails" ]; then + echo "boot=\"legacy\"" >> "${OS}-${RELEASE}.conf" + fi + if [ "${OS}" == "macos" ]; then echo "macos_release=\"${RELEASE}\"" >> "${OS}-${RELEASE}.conf" fi + if [ "${OS}" == "cachyos" ]; then + echo "disk_size=\"32G\"" >> "${OS}-${RELEASE}.conf" + fi + if [ "${OS}" == "garuda" ]; then echo "disk_size=\"32G\"" >> "${OS}-${RELEASE}.conf" fi + if [ "${OS}" == "haiku" ]; then + echo "boot=\"legacy\"" >> "${OS}-${RELEASE}.conf" + echo "disk_size=\"32G\"" >> "${OS}-${RELEASE}.conf" + fi + if [ "${OS}" == "oraclelinux" ]; then echo "disk_size=\"20G\"" >> "${OS}-${RELEASE}.conf" fi + if [ "${OS}" == "void" ]; then + echo "disk_size=\"20G\"" >> "${OS}-${RELEASE}.conf" + fi + if [ "${OS}" == "zorin" ]; then case ${RELEASE} in 15education64|15edulite64|15edulite32) @@ -692,6 +844,30 @@ function get_alma() { check_hash "${ISO}" "${HASH}" make_vm_config "${ISO}" } + +function get_alpine() { + local HASH="" + local ISO="" + local URL="" + local VERSION="" + local BRANCH="" + + validate_release "releases_alpine" + if [[ "${RELEASE}" == "latest" ]]; then + BRANCH="latest-stable" + else + BRANCH="v${RELEASE}" + fi + MANIFESTURL="https://dl-cdn.alpinelinux.org/alpine/${BRANCH}/releases/x86_64/latest-releases.yaml" + VERSION=$(wget -qO- "${MANIFESTURL}" | awk '/"Xen"/{found=0} {if(found) print} /"Virtual"/{found=1}' | grep 'version:' | awk '{print $2}') + ISO="alpine-virt-${VERSION}-x86_64.iso" + URL="https://dl-cdn.alpinelinux.org/alpine/${BRANCH}/releases/x86_64/${ISO}" + web_get "${URL}" "${VM_PATH}" + HASH=$(wget -qO- "${MANIFESTURL}" | awk '/"Xen"/{found=0} {if(found) print} /"Virtual"/{found=1}' | grep 'sha256:' | awk '{print $2}') + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function get_archlinux() { local HASH="" local ISO="" @@ -708,6 +884,36 @@ function get_archlinux() { make_vm_config "${ISO}" } +function get_arcolinux() { + local HASH="" + local ISO="" + local URL="" + local VERSION="" + + validate_release "releases_arcolinux" + VERSION=$(wget -q -O- 'https://ant.seedhost.eu/arcolinux/.quick/info' | cut -d " " -f 2) + URL="https://ant.seedhost.eu/arcolinux/.quick/" + ISO="arcolinuxl-${VERSION}-x86_64.iso" + HASH=$(wget -q -O- 'https://ant.seedhost.eu/arcolinux/.quick/arcolinuxl-'${VERSION}'-x86_64.iso.sha1' | cut -d " " -f 1) + web_get "${URL}/${ISO}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + + +function get_cachyos() { + local HASH="" + local ISO="" + local URL="" + local VERSION="" + + validate_release "releases_cachyos" + #ISO="cachyos-cli-${RELEASE}-x86_64.iso" + ISO="cachyos-${RELEASE}-x86_64.iso" + URL="https://mirror.cachyos.org/ISO" + web_get "${URL}/${ISO}" "${VM_PATH}" + make_vm_config "${ISO}" +} function get_debian() { local HASH="" @@ -741,11 +947,11 @@ function get_elementary() { local ISO="" local URL="" local B66tim="" - + local isotag="20211218-rc" validate_release "releases_elementary" B66tim=$(date +%s | base64 ) - ISO="elementaryos-${RELEASE}-stable.20211005.iso" + ISO="elementaryos-${RELEASE}-stable.${isotag}.iso" # TODO: derive region from geoIP URL="https://ams3.dl.elementary.io/download/${B66tim}=/${ISO}" web_get "${URL}" "${VM_PATH}" @@ -793,6 +999,27 @@ function get_fedora() { make_vm_config "${ISO}" } +function get_gentoo() { + local HASH="" + local ISO="" + local URL="" + local LOCAT="" + local INSTALLMIN="" + + validate_release "releases_gentoo" + eval $( wget -O/tmp/gentoolatest https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/${RELEASE}-iso.txt 2>&1 |grep Location | awk '{print "LOCAT="$2}' ) + LOCAT=$(dirname ${LOCAT}) + eval $( awk '/admincd-amd64/ {print "ADMIN="$1}; /install-amd64-minimal/ {print "INSTALLMIN="$1}' /tmp/gentoolatest ) + URL="${LOCAT}/${INSTALLMIN}" + ISO=$(basename "${INSTALLMIN}" ) + + + web_get "${URL}" "${VM_PATH}" + HASH=$(wget -q -O- ${LOCAT}/${INSTALLMIN}.DIGESTS|grep -e iso|grep -v -e CONT -e catalyst|cut -d\ -f1) + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function get_kali() { local HASH="" local ISO="" @@ -828,6 +1055,23 @@ function get_kdeneon() { make_vm_config "${ISO}" } +function get_kolibrios() { + local HASH="" + local ISO="" + local URL="" + + validate_release "releases_kolibrios" + #URL="https://builds.kolibrios.org/eng/${RELEASE}.7z" + ISO="kolibri.iso" + URL="https://builds.kolibrios.org/eng/${ISO}" + web_get "${URL}" "${VM_PATH}" + #7z e "${VM_PATH}/${RELEASE}.7z" "kolibri.iso" + #ISO="kolibrios-${RELEASE}.iso" + #mv "kolibri.iso" "${VM_PATH}/${ISO}" + #rm "${VM_PATH}/${RELEASE}.7z" + make_vm_config "${ISO}" +} + function get_linuxmint() { local FLAVOR="" local HASH="" @@ -842,7 +1086,74 @@ function get_linuxmint() { web_get "${URL}" "${VM_PATH}" check_hash "${ISO}" "${HASH}" make_vm_config "${ISO}" + } + +function get_manjaro() { + local FLAVOR="" + local MANIFESTURL="" +# local ISOKEY="" + local HASHKEY="" + local HASH="" + local ISO="" + local URL="" + + validate_release "releases_manjaro" + FLAVOR=$(echo "${OS}" | cut -d'-' -f2) + case ${FLAVOR} in + xfce|kde|gnome) BRANCH="official";; + budgie|cinnamon|deepin|i3|mate) BRANCH="community";; + esac + + if [[ ${RELEASE} == "full" ]]; then + KEY="Download_x64 = " + HASHKEY="Download_x64_Checksum = " + elif [[ ${RELEASE} == "minimal" ]]; then + KEY="Download_Minimal_x64 = " + HASHKEY="Download_Minimal_x64_Checksum = " + elif [[ ${RELEASE} == "minimal" ]]; then + KEY="Download_Minimal_lts = " + HASHKEY="Download_Minimal_x64_Checksum_lts = " + fi + + MANIFESTURL="https://gitlab.manjaro.org/webpage/manjaro-homepage/-/raw/master/site/content/downloads/${BRANCH}/${FLAVOR}.md" + URL="$(wget -qO- ${MANIFESTURL} | grep "${KEY}" | awk '{print $3}' | tr -d '"')" + ISO="$(echo $URL | awk -F "/" '{print $6}')" + HASH=$(wget -qO- ${MANIFESTURL} | grep "${HASHKEY}" | awk '{print $3}' | tr -d '"') + web_get "${URL}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + +function get_mxlinux() { + local FLAVOR="" + local HASH="" + local ISO="" + local URL="" + local BASE_URL="" + + validate_release "releases_mxlinux" + FLAVOR=$(echo "${OS}" | cut -d'-' -f2) + + if [[ "$FLAVOR" == "xfce" ]]; then + ISO="MX-${RELEASE}_x64.iso" + BASE_URL="https://sourceforge.net/projects/mx-linux/files/Final/Xfce/" + elif [[ "$FLAVOR" == "kde" ]]; then + ISO="MX-${RELEASE}_KDE_x64.iso" + BASE_URL="https://sourceforge.net/projects/mx-linux/files/Final/KDE/" + elif [[ "$FLAVOR" == "fluxbox" ]]; then + ISO="MX-${RELEASE}_fluxbox_x64.iso" + BASE_URL="https://sourceforge.net/projects/mx-linux/files/Final/Fluxbox/" + fi + + URL="${BASE_URL}/${ISO}" + web_get "${URL}" "${VM_PATH}" + web_get "${URL}.sha256" "${VM_PATH}" + HASH=$(cat "${VM_PATH}/${ISO}.sha256" | cut -d' ' -f1) + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function get_nixos() { local FLAVOR="" local HASH="" @@ -857,6 +1168,7 @@ function get_nixos() { web_get "${URL}" "${VM_PATH}" check_hash "${ISO}" "${HASH}" make_vm_config "${ISO}" + } function get_openbsd() { local HASH="" @@ -872,6 +1184,40 @@ function get_openbsd() { make_vm_config "${ISO}" } +function get_void() { + local HASH="" + local ISO="" + local URL="" + local HASH_URL="" + + validate_release "releases_void" + DATE=$(wget -q -O- "https://mirror.fit.cvut.cz/voidlinux/live/current/sha256sum.txt" | awk 'NR == 1' |cut -d'.' -f1| cut -d'-' -f4) + URL="http://mirror.fit.cvut.cz/voidlinux/live/current" + case ${RELEASE} in + base) + ISO="void-live-x86_64-${DATE}.iso";; + musl) + ISO="void-live-x86_64-musl-${DATE}.iso";; + xfce) + ISO="void-live-x86_64-${DATE}-xfce.iso";; + xfce-musl) + ISO="void-live-x86_64-musl-${DATE}-xfce.iso";; + esac + case ${RELEASE} in + base) + HASH="$(wget -q -O- "https://mirror.fit.cvut.cz/voidlinux/live/current/sha256sum.txt" | grep "void-live-x86_64-${DATE}.iso" | cut -d' ' -f4)";; + musl) + HASH="$(wget -q -O- "https://mirror.fit.cvut.cz/voidlinux/live/current/sha256sum.txt" | grep "void-live-x86_64-musl-${DATE}.iso" | cut -d' ' -f4)";; + xfce) + HASH="$(wget -q -O- "https://mirror.fit.cvut.cz/voidlinux/live/current/sha256sum.txt" | grep "void-live-x86_64-${DATE}-xfce.iso" | cut -d' ' -f4)";; + xfce-musl) + HASH="$(wget -q -O- "https://mirror.fit.cvut.cz/voidlinux/live/current/sha256sum.txt" | grep "void-live-x86_64-musl-${DATE}.iso" | cut -d' ' -f4)";; + esac + web_get "${URL}/${ISO}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function get_zorin() { local ISO="" local URL="" @@ -941,10 +1287,14 @@ function get_opensuse() { ISO="openSUSE-MicroOS-DVD-x86_64-Current.iso" URL="https://download.opensuse.org/tumbleweed/iso/${ISO}" HASH=$(wget -q -O- "${URL}.sha256" | cut -d' ' -f1) - else + elif [ "$RELEASE" == 15.0 ] || [ "$RELEASE" == 15.1 ]; then ISO="openSUSE-Leap-${RELEASE}-DVD-x86_64.iso" URL="https://download.opensuse.org/distribution/leap/${RELEASE}/iso/${ISO}" HASH=$(wget -q -O- "${URL}.sha256" | cut -d' ' -f1) + else + ISO="openSUSE-Leap-${RELEASE}-DVD-x86_64-Current.iso" + URL="https://download.opensuse.org/distribution/leap/${RELEASE}/iso/${ISO}" + HASH=$(wget -q -O- "${URL}.sha256" | cut -d' ' -f1) fi web_get "${URL}" "${VM_PATH}" check_hash "${ISO}" "${HASH}" @@ -1100,6 +1450,18 @@ function get_regolith() { make_vm_config "${ISO}" } +function get_tails() { + validate_release "releases_tails" + + RELEASE_JSON_URL="https://tails.boum.org/install/v2/Tails/amd64/${RELEASE}/latest.json" + RELEASE_JSON="$(wget -q -O- "$RELEASE_JSON_URL")" + URL=$(echo "$RELEASE_JSON" | jq -r '.installations[0]."installation-paths"[]|select(.type=="iso")|."target-files"[0].url') + HASH=$(echo "$RELEASE_JSON" | jq -r '.installations[0]."installation-paths"[]|select(.type=="iso")|."target-files"[0].sha256') + ISO=$(echo "${URL}" | sed -e "s/.*\/\([^\/]*\)$/\1/") + web_get "${URL}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} function get_ubuntu() { local DEVEL="daily-live" @@ -1149,6 +1511,7 @@ function get_ubuntu() { make_vm_config "${ISO}" fi } + function get_garuda() { local HASH="" local ISO="" @@ -1185,6 +1548,21 @@ function get_garuda() { make_vm_config "${OS}-${RELEASE}.iso" } +function get_haiku() { + local ISO="" + local URL="" + local HASH="" + + validate_release "releases_haiku" + + ISO="haiku-${RELEASE}-anyboot.iso" + URL="https://cdn.haiku-os.org/haiku-release/$(echo $RELEASE | awk -F '-' '{print $1}')/${ISO}" + HASH=$(wget -q -O- ${URL}.sha256 | grep "${ISO}" | cut -d' ' -f4) + web_get "${URL}" "${VM_PATH}" + check_hash "${ISO}" "${HASH}" + make_vm_config "${ISO}" +} + function unattended_windows() { cat << 'EOF' > "${1}" @@ -1480,7 +1858,6 @@ function unattended_windows() { EOF } - function dbg_windows() { local DEBUG=0 if [ ${DEBUG} -eq 1 ]; then @@ -1623,10 +2000,16 @@ if [ -n "${2}" ]; then fi VM_PATH="${OS}-${RELEASE}-${ISOTYPE}" get_alma "${ISOTYPE}" + elif [ "${OS}" == "alpine" ]; then + get_alpine elif [ "${OS}" == "android" ]; then get_android elif [ "${OS}" == "archlinux" ]; then get_archlinux + elif [ "${OS}" == "arcolinux" ]; then + get_arcolinux + elif [ "${OS}" == "void" ]; then + get_void elif [ "${OS}" == "debian" ]; then if [ -n "${3}" ]; then FREEDOM="${3}" @@ -1653,12 +2036,24 @@ if [ -n "${2}" ]; then get_fedora elif [ "${OS}" == "garuda" ]; then get_garuda + elif [ "${OS}" == "cachyos" ]; then + get_cachyos + elif [ "${OS}" == "gentoo" ]; then + get_gentoo + elif [ "${OS}" == "haiku" ]; then + get_haiku elif [ "${OS}" == "kali" ]; then get_kali elif [ "${OS}" == "kdeneon" ]; then get_kdeneon + elif [ "${OS}" == "kolibrios" ]; then + get_kolibrios elif [[ "${OS}" == *"linuxmint-"* ]]; then get_linuxmint + elif [[ "${OS}" == *"manjaro-"* ]]; then + get_manjaro + elif [[ "${OS}" == *"mxlinux-"* ]]; then + get_mxlinux elif [[ "${OS}" == *"nixos-"* ]]; then get_nixos elif [ "${OS}" == "openbsd" ]; then @@ -1667,7 +2062,7 @@ if [ -n "${2}" ]; then get_opensuse elif [ "${OS}" == "oraclelinux" ]; then get_oraclelinux - elif [ "${OS}" == "popos" ]; then + elif [ "${OS}" == "popos" ]; then if [ -n "${3}" ]; then DRIVER="${3}" DRIVERS=(intel nvidia) @@ -1703,6 +2098,8 @@ if [ -n "${2}" ]; then get_rocky "${ISOTYPE}" elif [ "${OS}" == "solus" ]; then get_solus + elif [[ "${OS}" == "tails"* ]]; then + get_tails elif [[ "${OS}" == *"ubuntu"* ]]; then get_ubuntu elif [ "${OS}" == "windows" ]; then @@ -1730,10 +2127,14 @@ else echo -n "ERROR! You must specify a release: " if [ "${OS}" == "alma" ]; then releases_alma + elif [ "${OS}" == "alpine" ]; then + releases_alpine elif [ "${OS}" == "android" ]; then releases_android elif [ "${OS}" == "archlinux" ]; then releases_archlinux + elif [ "${OS}" == "arcolinux" ]; then + releases_arcolinux elif [ "${OS}" == "debian" ]; then releases_debian elif [ "${OS}" == "elementary" ]; then @@ -1744,10 +2145,22 @@ else releases_fedora elif [ "${OS}" == "garuda" ]; then releases_garuda + elif [ "${OS}" == "cachyos" ]; then + releases_cachyos + elif [ "${OS}" == "gentoo" ]; then + releases_gentoo + elif [ "${OS}" == "haiku" ]; then + releases_haiku elif [ "${OS}" == "kali" ]; then releases_kali + elif [ "${OS}" == "kolibrios" ]; then + releases_kolibrios elif [[ "${OS}" == *"linuxmint-"* ]]; then releases_linuxmint + elif [[ "${OS}" == *"manjaro-"* ]]; then + releases_manjaro + elif [[ "${OS}" == *"mxlinux-"* ]]; then + releases_mxlinux elif [[ "${OS}" == *"nixos-"* ]]; then releases_nixos elif [ "${OS}" == "opensuse" ]; then @@ -1766,8 +2179,12 @@ else releases_rockylinux elif [ "${OS}" == "solus" ]; then releases_solus + elif [[ "${OS}" == "tails"* ]]; then + releases_tails elif [[ "${OS}" == *"ubuntu"* ]]; then releases_ubuntu + elif [ "${OS}" == "void" ]; then + releases_void elif [ "${OS}" == "windows" ]; then releases_windows elif [ "${OS}" == "zorin" ]; then