diff --git a/.github/workflows/quickget-test.yml b/.github/workflows/quickget-test.yml new file mode 100644 index 0000000000..1905eeb454 --- /dev/null +++ b/.github/workflows/quickget-test.yml @@ -0,0 +1,40 @@ +# This will test ISOs availability in quickget + +name: test + +# Controls when the action will run. +on: + # Build at 00:00 on every 12th day-of-month. + #schedule: + # - cron: "0 0 */12 * *" + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: '**' #'!master' # excludes master + paths-ignore: [ '**/README.md' ] + pull_request: + branches: '**' # matches every branch + paths-ignore: [ '**/README.md' ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build-stable" + build-stable: + # The type of runner that the job will run on + runs-on: self-hosted + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + - name: Prerequisites + run: | + echo " Supported:" + ./quickget -ls + echo " ISOs:" + ./quickget -li + echo " ISOs availability test:" + ./quickget -ti + echo " Finished" diff --git a/.github/workflows/release-on-push.yml b/.github/workflows/release-on-push.yml new file mode 100644 index 0000000000..78df9ff92c --- /dev/null +++ b/.github/workflows/release-on-push.yml @@ -0,0 +1,16 @@ +on: + push: + branches: + - new-master + + workflow_dispatch: + +jobs: + release-on-push: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: rymndhng/release-on-push-action@master + with: + bump_version_scheme: minor diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml new file mode 100644 index 0000000000..d30daefe00 --- /dev/null +++ b/.github/workflows/super-linter.yml @@ -0,0 +1,28 @@ +# This workflow executes several linters on changed files based on languages used in your code base whenever +# you push a code or open a pull request. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/github/super-linter +name: Lint Code Base + +on: # yamllint disable-line rule:truthy + pull_request: + push: +jobs: + run-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + # Full git history is needed to get a proper list of changed files within `super-linter` + fetch-depth: 3 + + - name: Lint Code Base + uses: github/super-linter/slim@v4 + env: + VALIDATE_ALL_CODEBASE: false + VALIDATE_BASH: true + DEFAULT_BRANCH: "new-master" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 2924545848..d3a8245303 100644 --- a/README.md +++ b/README.md @@ -198,6 +198,8 @@ been packaged. [![Packaging status](https://repology.org/badge/vertical-allrepos/quickemu.svg)](https://repology.org/project/quickemu/versions) +![Alt](https://repobeats.axiom.co/api/embed/6a18576fed84d09db4139871ef4327fe420d2ff6.svg "Repobeats analytics image") + #### Quickgui [![Packaging @@ -274,6 +276,7 @@ functional for all operating systems, including Windows and macOS. `quickget` also supports: +- `agarimos` (AgarimOS) - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -281,15 +284,21 @@ functional for all operating systems, including Windows and macOS. - `archcraft` (Archcraft) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `artixlinux` (Artix Linux) +- `athenaos` (Athenaos) - `batocera` (Batocera) +- `bazzite` (Bazzite) +- `biglinux` (BigLinux) - `blendos` (BlendOS) - `bodhi` (Bodhi) - `bunsenlabs` (Bunsenlabs) - `cachyos` (CachyOS) - `centos-stream` (CentOS Stream) +- `cereus` (Cereus Linux) - `debian` (Debian) - `deepin` (Deepin) - `devuan` (Devuan) +- `dietpi` (DietPi) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) - `endeavouros` (EndeavourOS) @@ -310,6 +319,7 @@ functional for all operating systems, including Windows and macOS. - `lmde` (Linux Mint Debian Edition) - `mageia` (Mageia) - `manjaro` (Manjaro) +- `miyolinux` (Miyo Linux) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) - `netbsd` (NetBSD) @@ -326,14 +336,20 @@ functional for all operating systems, including Windows and macOS. - `rockylinux` (Rocky Linux) - `siduction` (Siduction) - `slackware` (Slackware) +- `slax` (Slax) +- `slitaz` (SliTaz GNU/Linux) - `solus` (Solus) -- `spiral` (Spiral) +- `sparkylinux` (SparkyLinux) +- `spiral` (SpiralLinux) - `tails` (Tails) - `tinycore` (Tiny Core Linux) - `trisquel` (Trisquel) - `truenas-core` (TrueNAS Core) - `truenas-scale` (TrueNAS Scale) +- `tuxedoos` (TuxedoOS) - `vanillaos` (Vanilla OS) +- `ventoy` (Ventoy) +- `voidpup` (Void Puppy) - `void` (Void Linux) - `vxlinux` (VX Linux) - `xerolinux` (XeroLinux) @@ -850,7 +866,7 @@ You can also pass optional parameters ``` - +``` ## Desktop shortcuts Desktop shortcuts can be created for a VM, the shortcuts are saved in @@ -925,7 +941,6 @@ Useful reference that assisted the development of Quickemu. - - - - - - - - diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000000..44b9fe662f --- /dev/null +++ b/_config.yml @@ -0,0 +1,33 @@ +# Theme supports custom buttons +buttons: + - text: quickemu + href: https://osowoso.github.io/quickemu + +# remote theme +remote_theme: oSoWoSo/cayman-vb-dark + +# web title +title: quickemu + +# web desription +description: Quickly download, create and run VM of any#TODO operating system + +# Header buttons for downloads from github repo +show_downloads: true + +# Header buttons link to github repo +show_github: true + +# Header buttons for google analytics +#google_analytics: + +# web PNG favicon +favicon: logo.svg + +# Icon shown in header. From Fontawesome https://fontawesome.com/icons?m=free +#icon: fas fa-pencil-alt + +# Colour gradient for the header +#header-colours: +# right: "#8a108c" +# left: "#cc580c" diff --git a/docs/quickemu.1 b/docs/quickemu.1 index cd00da4cde..148ef79022 100644 --- a/docs/quickemu.1 +++ b/docs/quickemu.1 @@ -480,13 +480,17 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]batocera\f[R] (Batocera) .IP \[bu] 2 -\f[CR]blendos\f[R] (BlendOS) +\f[V]artixlinux\f[R] (Artix Linux) .IP \[bu] 2 \f[CR]bodhi\f[R] (Bodhi) .IP \[bu] 2 \f[CR]bunsenlabs\f[R] (Bunsenlabs) .IP \[bu] 2 -\f[CR]cachyos\f[R] (CachyOS) +\f[V]bazzite\f[R] (Bazzite) +.IP \[bu] 2 +\f[V]bazzite\f[R] (Bazzite) +.IP \[bu] 2 +\f[V]biglinux\f[R] (BigLinux) .IP \[bu] 2 \f[CR]centos-stream\f[R] (CentOS Stream) .IP \[bu] 2 @@ -554,7 +558,7 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]peppermint\f[R] (PeppermintOS) .IP \[bu] 2 -\f[CR]popos\f[R] (Pop!_OS) +\f[V]miyolinux\f[R] (Miyo Linux) .IP \[bu] 2 \f[CR]porteus\f[R] (Porteus) .IP \[bu] 2 @@ -590,7 +594,41 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]xerolinux\f[R] (XeroLinux) .IP \[bu] 2 -\f[CR]zorin\f[R] (Zorin OS) +\f[V]slax\f[R] (Slax) +.IP \[bu] 2 +\f[V]slitaz\f[R] (SliTaz GNU/Linux) +.IP \[bu] 2 +\f[V]solus\f[R] (Solus) +.IP \[bu] 2 +\f[V]sparkylinux\f[R] (SparkyLinux) +.IP \[bu] 2 +\f[V]spiral\f[R] (SpiralLinux) +.IP \[bu] 2 +\f[V]tails\f[R] (Tails) +.IP \[bu] 2 +\f[V]tinycore\f[R] (Tiny Core Linux) +.IP \[bu] 2 +\f[V]trisquel\f[R] (Trisquel) +.IP \[bu] 2 +\f[V]truenas-core\f[R] (TrueNAS Core) +.IP \[bu] 2 +\f[V]truenas-scale\f[R] (TrueNAS Scale) +.IP \[bu] 2 +\f[V]tuxedoos\f[R] (TuxedoOS) +.IP \[bu] 2 +\f[V]vanillaos\f[R] (Vanilla OS) +.IP \[bu] 2 +\f[V]ventoy\f[R] (Ventoy) +.IP \[bu] 2 +\f[V]voidpup\f[R] (Void Puppy) +.IP \[bu] 2 +\f[V]void\f[R] (Void Linux) +.IP \[bu] 2 +\f[V]vxlinux\f[R] (VX Linux) +.IP \[bu] 2 +\f[V]xerolinux\f[R] (XeroLinux) +.IP \[bu] 2 +\f[V]zorin\f[R] (Zorin OS) .PP Or you can download a Linux image and manually create a VM configuration. diff --git a/docs/quickemu.1.md b/docs/quickemu.1.md index 33654c3451..6ae291e994 100644 --- a/docs/quickemu.1.md +++ b/docs/quickemu.1.md @@ -292,6 +292,7 @@ edition of windows) `quickget` also supports: +- `agarimos` (AgarimOS) - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -299,15 +300,21 @@ edition of windows) - `archcraft` (Archcraft) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `artixlinux` (Artix Linux) +- `athenaos` (Athenaos) - `batocera` (Batocera) +- `bazzite` (Bazzite) +- `biglinux` (BigLinux) - `blendos` (BlendOS) - `bodhi` (Bodhi) - `bunsenlabs` (Bunsenlabs) - `cachyos` (CachyOS) - `centos-stream` (CentOS Stream) +- `cereus` (Cereus Linux) - `debian` (Debian) - `deepin` (Deepin) - `devuan` (Devuan) +- `dietpi` (DietPi) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) - `endeavouros` (EndeavourOS) @@ -328,6 +335,7 @@ edition of windows) - `lmde` (Linux Mint Debian Edition) - `mageia` (Mageia) - `manjaro` (Manjaro) +- `miyolinux` (Miyo Linux) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) - `netbsd` (NetBSD) @@ -344,14 +352,20 @@ edition of windows) - `rockylinux` (Rocky Linux) - `siduction` (Siduction) - `slackware` (Slackware) +- `slax` (Slax) +- `slitaz` (SliTaz GNU/Linux) - `solus` (Solus) -- `spiral` (Spiral) +- `sparkylinux` (SparkyLinux) +- `spiral` (SpiralLinux) - `tails` (Tails) - `tinycore` (Tiny Core Linux) - `trisquel` (Trisquel) - `truenas-core` (TrueNAS Core) - `truenas-scale` (TrueNAS Scale) +- `tuxedoos` (TuxedoOS) - `vanillaos` (Vanilla OS) +- `ventoy` (Ventoy) +- `voidpup` (Void Puppy) - `void` (Void Linux) - `vxlinux` (VX Linux) - `xerolinux` (XeroLinux) diff --git a/docs/quickemu_conf.1 b/docs/quickemu_conf.1 index c1a4db0632..ce28e777be 100644 --- a/docs/quickemu_conf.1 +++ b/docs/quickemu_conf.1 @@ -180,7 +180,7 @@ example \f[CR]\[rs]\[rs]10.0.2.4\[rs]qemu\f[R]). .SS SPICE WebDAV 🐧 🪟 .IP \[bu] 2 TBD -.SS VirtIO-9P 🐧 🍏 +.SS VirtIO-9P \[u1F427] \[u1F34F] .IP \[bu] 2 TBD .SH Network port forwarding diff --git a/docs/quickget.1 b/docs/quickget.1 index 460dd2a1a1..f286e3a5e1 100644 --- a/docs/quickget.1 +++ b/docs/quickget.1 @@ -133,13 +133,17 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]batocera\f[R] (Batocera) .IP \[bu] 2 -\f[CR]blendos\f[R] (BlendOS) +\f[V]artixlinux\f[R] (Artix Linux) .IP \[bu] 2 \f[CR]bodhi\f[R] (Bodhi) .IP \[bu] 2 \f[CR]bunsenlabs\f[R] (Bunsenlabs) .IP \[bu] 2 -\f[CR]cachyos\f[R] (CachyOS) +\f[V]bazzite\f[R] (Bazzite) +.IP \[bu] 2 +\f[V]bazzite\f[R] (Bazzite) +.IP \[bu] 2 +\f[V]biglinux\f[R] (BigLinux) .IP \[bu] 2 \f[CR]centos-stream\f[R] (CentOS Stream) .IP \[bu] 2 @@ -207,7 +211,7 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]peppermint\f[R] (PeppermintOS) .IP \[bu] 2 -\f[CR]popos\f[R] (Pop!_OS) +\f[V]miyolinux\f[R] (Miyo Linux) .IP \[bu] 2 \f[CR]porteus\f[R] (Porteus) .IP \[bu] 2 @@ -243,7 +247,41 @@ begin downloading the requested release and edition of windows) .IP \[bu] 2 \f[CR]xerolinux\f[R] (XeroLinux) .IP \[bu] 2 -\f[CR]zorin\f[R] (Zorin OS) +\f[V]slax\f[R] (Slax) +.IP \[bu] 2 +\f[V]slitaz\f[R] (SliTaz GNU/Linux) +.IP \[bu] 2 +\f[V]solus\f[R] (Solus) +.IP \[bu] 2 +\f[V]sparkylinux\f[R] (SparkyLinux) +.IP \[bu] 2 +\f[V]spiral\f[R] (SpiralLinux) +.IP \[bu] 2 +\f[V]tails\f[R] (Tails) +.IP \[bu] 2 +\f[V]tinycore\f[R] (Tiny Core Linux) +.IP \[bu] 2 +\f[V]trisquel\f[R] (Trisquel) +.IP \[bu] 2 +\f[V]truenas-core\f[R] (TrueNAS Core) +.IP \[bu] 2 +\f[V]truenas-scale\f[R] (TrueNAS Scale) +.IP \[bu] 2 +\f[V]tuxedoos\f[R] (TuxedoOS) +.IP \[bu] 2 +\f[V]vanillaos\f[R] (Vanilla OS) +.IP \[bu] 2 +\f[V]ventoy\f[R] (Ventoy) +.IP \[bu] 2 +\f[V]voidpup\f[R] (Void Puppy) +.IP \[bu] 2 +\f[V]void\f[R] (Void Linux) +.IP \[bu] 2 +\f[V]vxlinux\f[R] (VX Linux) +.IP \[bu] 2 +\f[V]xerolinux\f[R] (XeroLinux) +.IP \[bu] 2 +\f[V]zorin\f[R] (Zorin OS) .PP Or you can download a Linux image and manually create a VM configuration. diff --git a/docs/quickget.1.md b/docs/quickget.1.md index 319224a3af..435920f195 100644 --- a/docs/quickget.1.md +++ b/docs/quickget.1.md @@ -116,6 +116,7 @@ edition of windows) `quickget` also supports: +- `agarimos` (AgarimOS) - `alma` (Alma Linux) - `alpine` (Alpine Linux) - `android` (Android x86) @@ -123,15 +124,21 @@ edition of windows) - `archcraft` (Archcraft) - `archlinux` (Arch Linux) - `arcolinux` (Arco Linux) +- `artixlinux` (Artix Linux) +- `athenaos` (Athenaos) - `batocera` (Batocera) +- `bazzite` (Bazzite) +- `biglinux` (BigLinux) - `blendos` (BlendOS) - `bodhi` (Bodhi) - `bunsenlabs` (Bunsenlabs) - `cachyos` (CachyOS) - `centos-stream` (CentOS Stream) +- `cereus` (Cereus Linux) - `debian` (Debian) - `deepin` (Deepin) - `devuan` (Devuan) +- `dietpi` (DietPi) - `dragonflybsd` (DragonFlyBSD) - `elementary` (elementary OS) - `endeavouros` (EndeavourOS) @@ -152,6 +159,7 @@ edition of windows) - `lmde` (Linux Mint Debian Edition) - `mageia` (Mageia) - `manjaro` (Manjaro) +- `miyolinux` (Miyo Linux) - `mxlinux` (MX Linux) - `netboot` (netboot.xyz) - `netbsd` (NetBSD) @@ -168,14 +176,20 @@ edition of windows) - `rockylinux` (Rocky Linux) - `siduction` (Siduction) - `slackware` (Slackware) +- `slax` (Slax) +- `slitaz` (SliTaz GNU/Linux) - `solus` (Solus) -- `spiral` (Spiral) +- `sparkylinux` (SparkyLinux) +- `spiral` (SpiralLinux) - `tails` (Tails) - `tinycore` (Tiny Core Linux) - `trisquel` (Trisquel) - `truenas-core` (TrueNAS Core) - `truenas-scale` (TrueNAS Scale) +- `tuxedoos` (TuxedoOS) - `vanillaos` (Vanilla OS) +- `ventoy` (Ventoy) +- `voidpup` (Void Puppy) - `void` (Void Linux) - `vxlinux` (VX Linux) - `xerolinux` (XeroLinux) diff --git a/l/cs/README.md b/l/cs/README.md new file mode 100644 index 0000000000..83e998b501 --- /dev/null +++ b/l/cs/README.md @@ -0,0 +1,780 @@ +

Quickemu
Quickemu

+ +

Rychle vytvářejte a spouštějte optimalizované desktopové virtuální stroje Windows, macOS a Linux.

+
Snímek obrazovky Quickemu
+

Vyrobeno s 💝 pro

+ +## Úvod + +Rychle vytvářejte a spouštějte vysoce optimalizované virtuální počítače pro stolní počítače pro Linux, macOS a Windows; pouze dvěma příkazy. Vy se rozhodnete, jaký operační systém chcete používat, a Quickemu přijde na nejlepší způsob, jak to udělat za vás. Například: + +```bash +quickget ubuntu-mate 22.04 +quickemu --vm ubuntu-mate-22.04.conf +``` + +Původním cílem projektu bylo umožnit rychlé testování linuxových distribucí, kde lze konfigurace virtuálních strojů uložit kdekoli, jako je externí úložiště USB nebo váš domovský adresář, a ke spuštění virtuálních strojů nejsou vyžadována žádná zvýšená oprávnění. **Quickemu nyní také zahrnuje komplexní podporu pro macOS a Windows** . + +## Funkce + +- **macOS** Monterey, Big Sur, Catalina, Mojave a High Sierra +- **Windows** 10 a 11 včetně TPM 2.0 +- [Ubuntu](https://ubuntu.com/desktop) a všechny **[oficiální příchutě Ubuntu](https://ubuntu.com/download/flavours)** +- **Je podporováno více než 360 edic operačního systému!** +- Plná podpora SPICE včetně sdílení schránky hostitele / hosta +- Sdílení souborů VirtIO-webdavd pro hosty se systémy Linux a Windows +- Sdílení souborů VirtIO-9p pro hosty se systémy Linux a macOS +- [podpora QEMU Guest Agent](https://wiki.qemu.org/Features/GuestAgent) ; poskytuje přístup k agentovi na systémové úrovni prostřednictvím standardních příkazů QMP +- Sdílení souborů Samba pro hosty se systémy Linux, macOS a Windows ( *pokud je na hostiteli nainstalován `smbd`* ) +- Zrychlení VirGL +- Průchod zařízení USB +- Průchozí čipová karta +- Automatické přesměrování SSH portu hostům +- Přesměrování síťového portu +- Plně duplexní zvuk +- Podpora Braillova písma +- EFI (s nebo bez SecureBoot) a zavádění Legacy BIOS +- K dispozici jsou grafická uživatelská rozhraní + +Quickemu je obal pro vynikající [QEMU](https://www.qemu.org/) , který se pokouší automaticky *"dělat správnou věc"* místo toho, aby vystavoval vyčerpávající možnosti konfigurace. + +Pro tento projekt máme Discord: [](https://discord.gg/sNmz3uw)![Svár](https://img.shields.io/discord/712850672223125565?color=0C306A&label=WimpysWorld%20Discord&logo=Discord&logoColor=ffffff&style=flat-square) + +Podívejte se na toto (staré) video, kde vysvětluji některé ze svých motivací pro vytvoření Quickemu. + +[](https://www.youtube.com/watch?v=AOTYWEgw0hI)Nahraďte VirtualBox pomocí Bash &<span translate= QEMU" data-md-type="image"> + +## Požadavky + +- [QEMU](https://www.qemu.org/) ( *6.0.0 nebo novější* ) **s podporou GTK, SDL, SPICE a VirtFS** +- [bash](https://www.gnu.org/software/bash/) ( *4.0 nebo novější* ) +- [Coreutils](https://www.gnu.org/software/coreutils/) +- [EDK II](https://github.com/tianocore/edk2) +- [grep](https://www.gnu.org/software/grep/) +- [jq](https://stedolan.github.io/jq/) +- [LSB](https://wiki.linuxfoundation.org/lsb/start) +- [procps](https://gitlab.com/procps-ng/procps) +- [python3](https://www.python.org/) +- [macrecovery](https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery) +- [mkisofs](http://cdrtools.sourceforge.net/private/cdrecord.html) +- [usbutils](https://github.com/gregkh/usbutils) +- [util-linux](https://github.com/karelzak/util-linux) +- [sed](https://www.gnu.org/software/sed/) +- [socat](http://www.dest-unreach.org/socat/) +- [pikantní](https://gitlab.freedesktop.org/spice/spice-gtk) +- [swtpm](https://github.com/stefanberger/swtpm) +- [Wget](https://www.gnu.org/software/wget/) +- [xdg-user-dirs](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/) +- [xrandr](https://gitlab.freedesktop.org/xorg/app/xrandr) +- [zsync](http://zsync.moria.org.uk/) +- [rozepnout](http://www.info-zip.org/UnZip.html) + +### Požadavky na instalaci + +U systémů Ubuntu, Arch a nixos se o závislosti postarají balíčky [ppa](https://launchpad.net/~flexiondotorg/+archive/ubuntu/quickemu) , [AUR](https://aur.archlinux.org/packages/quickemu) nebo [nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/quickemu) . Pro jiné hostitelské distribuce nebo operační systémy bude nutné nainstalovat výše uvedené požadavky nebo jejich ekvivalenty. + +Tyto příklady mohou ušetřit trochu psaní + +Debian (a přímé deriváty, jako je MX Linux): + +``` +sudo apt install qemu bash coreutils ovmf grep jq lsb-base procps python3 genisoimage usbutils util-linux sed spice-client-gtk libtss2-tcti-swtpm0 wget xdg-user-dirs zsync unzip +``` + +Fedora: + +``` +sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip +``` + +Operační Systém Mac: + +Na tomto procesu se pracuje (další kroky a změny, které mohou umožnit spuštění na MacOS, najdete [v čísle 248](https://github.com/quickemu-project/quickemu/issues/248) ) + +``` +brew install qemu bash coreutils grep jq python@3.10 cdrtools gnu-sed spice-gtk wget zsync +``` + +# Používání + +## Grafická uživatelská rozhraní + +Zatímco `quickemu` a `quickget` jsou navrženy pro terminál, k dispozici je také grafické uživatelské rozhraní: + +- **[Quickgui](https://github.com/quickgui/quickgui)** od [Marka Johnsona](https://github.com/marxjohnson) a [Yannicka Mauraye](https://github.com/ymauray) . + +Mnohokrát děkujeme [Luke Wesley-Holleymu](https://github.com/Lukewh) a [Philippu Kiemlemu](https://github.com/daPhipz) za vytvoření **[ikon Quickemu](https://github.com/Lukewh/quickemu-icons)** 🎨 + +### Quickgui pro Ubuntu + +```bash +sudo add-apt-repository ppa:yannick-mauray/quickgui +sudo apt update +sudo apt install quickgui +``` + +### projekt terminálu quickemu quickget X + +Od listopadu 2023 je k dispozici také více možností integrované textové rozhraní pro stolní počítače se spoustou jedinečných nástrojů a utilit, které vám pomohou usnadnit instalace, snímky a správu disků. + +- **[qqX](https://github.com/TuxVinyards/qqX)** je nezávisle kurátorem [Alex Genovese](https://github.com/TuxVinyards) (viz stránky github) + +![qqX-vmm](https://github.com/TuxVinyards/qqX/assets/3956806/18e5c495-8072-49a5-8b9c-e1302549efcf) + +# Nainstalujte Quickemu + +## Oblouk + +Quickemu je k dispozici z AUR (Arch user repository) a lze jej nainstalovat pomocí libovolného pomocníka AUR. Za předpokladu, že váš pomocník AUR je yay, spusťte následující příkaz: + +```bash +yay -Sy quickemu +``` + +## Ubuntu + +Quickemu je k dispozici z PPA pro uživatele Ubuntu. Quickemu PPA také obsahuje zadní port QEMU 6.0.0 pro 20.04 (Focal) a 21.04 (Hirsute). Chcete-li nainstalovat Quickemu a všechny závislosti, spusťte v terminálu následující: + +```bash +sudo apt-add-repository ppa:flexiondotorg/quickemu +sudo apt update +sudo apt install quickemu +``` + +## Jiný Linux + +```bash +git clone --filter=blob:none https://github.com/wimpysworld/quickemu +cd quickemu +``` + +Nyní nainstalujte všechny výše zdokumentované **požadavky** . + +### Jiné zdroje + +[Repology.org](https://repology.org/) zjistil, že následující verze byla zabalena. + +#### Quickemu + +[](https://repology.org/project/quickemu/versions)Balení<span translate= status" data-md-type="image"> + +#### Quickgui + +[](https://repology.org/project/quickgui/versions)Balení<span translate= status" data-md-type="image"> + +## Host Ubuntu + +`quickget` automaticky stáhne vydání Ubuntu a vytvoří konfiguraci virtuálního počítače. + +```bash +quickget ubuntu 22.04 +quickemu --vm ubuntu-22.04.conf +``` + +- Dokončete instalaci jako obvykle. +- Po instalaci: + - Nainstalujte do hosta agenta SPICE ( `spice-vdagent` ), abyste povolili kopírování/vkládání a přesměrování USB + - `sudo apt install spice-vdagent` + - Chcete-li povolit sdílení souborů, nainstalujte do hosta agenta SPICE WebDAV ( `spice-webdavd` ). + - `sudo apt install spice-webdavd` + +### Ubuntu devel (denní) obrázky + +`quickget` může také stahovat/obnovovat devel obrazy přes `zsync` pro vývojáře a testery Ubuntu. + +```bash +quickget ubuntu devel +quickemu --vm ubuntu-devel.conf +``` + +`quickget ubuntu devel` můžete spouštět a obnovovat svůj každodenní vývojový obraz tak často, jak chcete, dokonce se automaticky přepne na novou sérii. + +### Příchutě Ubuntu + +Všechny oficiální příchutě Ubuntu jsou podporovány, stačí nahradit `ubuntu` vámi preferovanou příchutí. + +- `edubuntu` (Edubuntu) +- `kubuntu` (Kubuntu) +- `lubuntu` (Lubuntu) +- `ubuntu-budgie` (Ubuntu andulka) +- `ubuntucinnamon` (Ubuntu skořice) +- `ubuntukylin` (Ubuntu Kylin) +- `ubuntu-mate` (Ubuntu MATE) +- `ubuntu-server` (Ubuntu Server) +- `ubuntustudio` (Ubuntu Studio) +- `ubuntu` (Ubuntu) +- `ubuntu-unity` (Ubuntu Unity) +- `xubuntu` (Xubuntu) + +Můžete také použít `quickget` s možnostmi: + +```shell + # show an OS ISO download URL for {os} {release} [edition] + quickget --show-iso-url fedora 38 Silverblue + # test if and OS ISO is available for {os} {release} [edition] + quickget --test-iso-url nixos 23.05 plasma5 + # open an OS distribution homepage in a browser + quickget --open-distro-homepage ubuntu-mate +``` + +Možnosti `--show-iso-url` a `--test-iso-url` **nefungují** pro `Windows` ( `quickget` začne stahovat požadované vydání a vydání systému Windows) + +## Jiné operační systémy + +`quickget` také podporuje: + +- `agarimos` (AgarimOS) +- `alma` (Alma Linux) +- `alpine` (Alpine Linux) +- `android` (Android x86) +- `antix` (Antix) +- `archcraft` (Archcraft) +- `archlinux` (Arch Linux) +- `arcolinux` (Arco Linux) +- `artixlinux` (Artix Linux) +- `athenaos` (Athenaos) +- `batocera` (Batocera) +- `bazzite` (bazzite) +- `biglinux` (BigLinux) +- `blendos` (BlendOS) +- `bodhi` (bodhi) +- `bunsenlabs` (Bunsenlabs) +- `cachyos` (CachyOS) +- `centos-stream` (CentOS Stream) +- `cereus` (Cereus Linux) +- `debian` (Debian) +- `deepin` (Deepin) +- `devuan` (devuan) +- `dietpi` (dietpi) +- `dragonflybsd` (DragonFlyBSD) +- `elementary` (základní OS) +- `endeavouros` (EndeavourOS) +- `endless` (nekonečný OS) +- `fedora` (Fedora) +- `freebsd` (FreeBSD) +- `freedos` (FreeDOS) +- `garuda` (Garuda Linux) +- `gentoo` (Gentoo) +- `ghostbsd` (GhostBSD) +- `haiku` (haiku) +- `holoiso` (SteamOS HoloISO) +- `kali` (kali) +- `kdeneon` (KDE Neon) +- `kolibrios` (KolibriOS) +- `linuxlite` (Linux Lite) +- `linuxmint` (Linux Mint) +- `lmde` (Linux Mint Debian Edition) +- `mageia` (Mageia) +- `manjaro` (mandžáro) +- `miyolinux` (Miyo Linux) +- `mxlinux` (MX Linux) +- `netboot` (netboot.xyz) +- `netbsd` (NetBSD) +- `nixos` (NixOS) +- `openbsd` (OpenBSD) +- `openindiana` (OpenIndiana) +- `opensuse` (openSUSE) +- `oraclelinux` (Oracle Linux) +- `peppermint` (PeppermintOS) +- `popos` (Pop!_OS) +- `porteus` (Porteus) +- `reactos` (ReactOS) +- `rebornos` (RebornOS) +- `rockylinux` (Rocky Linux) +- `siduction` (Siduction) +- `slackware` (slackware) +- `slax` (slax) +- `slitaz` (SliTaz GNU/Linux) +- `solus` (Solus) +- `sparkylinux` (SparkyLinux) +- `spiral` (SpiralLinux) +- `tails` (ocásky) +- `tinycore` (Tiny Core Linux) +- `trisquel` (trisquel) +- `truenas-core` (TrueNAS Core) +- `truenas-scale` (TrueNAS Scale) +- `tuxedoos` (TuxedoOS) +- `vanillaos` (Vanilla OS) +- `ventoy` (Ventoy) +- `voidpup` (Void Puppy) +- `void` (Void Linux) +- `vxlinux` (VX Linux) +- `xerolinux` (XeroLinux) +- `zorin` (OS Zorin) + +Nebo si můžete stáhnout image Linuxu a ručně vytvořit konfiguraci virtuálního počítače. + +- Stáhněte si obraz .iso distribuce Linuxu +- Vytvořte konfigurační soubor virtuálního počítače; například `debian-bullseye.conf` + +```bash +guest_os="linux" +disk_img="debian-bullseye/disk.qcow2" +iso="debian-bullseye/firmware-11.0.0-amd64-DVD-1.iso" +``` + +- Ke spuštění virtuálního počítače použijte `quickemu` : + +```bash +quickemu --vm debian-bullseye.conf +``` + +- Dokončete instalaci jako obvykle. +- Po instalaci: + - Nainstalujte do hosta agenta SPICE ( `spice-vdagent` ), abyste umožnili kopírování/vkládání a přesměrování USB. + - Chcete-li povolit sdílení souborů, nainstalujte do hosta agenta SPICE WebDAV ( `spice-webdavd` ). + +## host macOS + +`quickget` automaticky stáhne obraz pro obnovení macOS a vytvoří konfiguraci virtuálního počítače. + +```bash +quickget macos catalina +quickemu --vm macos-catalina.conf +``` + +Podporovány jsou macOS `high-sierra` , `mojave` , `catalina` , `big-sur` , `monterey` a `ventura` . + +- Pomocí kurzorových kláves a klávesy Enter vyberte **základní systém macOS** +- Z **nástrojů macOS** + - Klepněte na **Disk Utility** a **Pokračovat** + - Ze seznamu vyberte `QEMU HARDDISK Media` (~103,08 GB) (na Big Sur a výše použijte `Apple Inc. VirtIO Block Device` ) a klikněte na **Vymazat** . + - Zadejte `Name:` pro disk + - Pokud instalujete macOS Mojave nebo novější (Catalina, Big Sur, Monterey a Ventura), vyberte jako souborový systém kteroukoli z možností APFS. MacOS Extended nemusí fungovat. + - Klikněte na **Vymazat** . + - Klikněte **na Hotovo** . + - Zavřete Disk Utility +- Z **nástrojů macOS** + - Klikněte **na Přeinstalovat macOS** a **pokračovat** +- Dokončete instalaci obvyklým způsobem. + - Při prvním restartu pomocí kurzorových kláves a klávesy Enter vyberte **instalační program macOS** + - Při dalších restartech použijte kurzorové klávesy a klávesu Enter pro výběr disku, který jste pojmenovali +- Jakmile dokončíte instalaci macOS, zobrazí se vám připravený průvodce prvním spuštěním pro konfiguraci různých možností a nastavení uživatelského jména a hesla. +- VOLITELNÉ: Po dokončení přednastaveného průvodce možná budete chtít povolit funkci TRIM, kterou počítačový průmysl vytvořil pro disky SSD. Tato funkce v naší instalaci macOS umožní QuickEmu zkomprimovat (zmenšit) váš obraz disku macOS, kdykoli odstraníte soubory ve virtuálním počítači. Bez tohoto kroku se obraz disku macOS pouze zvětší a nezmenší se, ani když v macOS smažete spoustu dat. + - Chcete-li povolit TRIM, otevřete aplikaci Terminál a zadejte následující příkaz a poté stiskněte příkaz na pevném disku, když jsou soubory odstraněny: + +```bash +sudo trimforce enable +``` + +Budete vyzváni k zadání hesla k účtu, abyste získali potřebná oprávnění. Jakmile zadáte své heslo a stisknete ve formě dvou otázek, které vyžadují, abyste napsali odpověď, jako byste řekli „ne“: + +```plain +IMPORTANT NOTICE: This tool force-enables TRIM for all relevant attached devices, even though such devices may not have been validated for data integrity while using TRIM. Use of this tool to enable TRIM may result in unintended data loss or data corruption. It should not be used in a commercial operating environment or with important data. Before using this tool, you should back up all of your data and regularly back up data while TRIM is enabled. This tool is provided on an "as is" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THIS TOOL OR ITS USE ALONE OR IN COMBINATION WITH YOUR DEVICES, SYSTEMS, OR SERVICES. BY USING THIS TOOL TO ENABLE TRIM, YOU AGREE THAT, TO THE EXTENT PERMITTED BY APPLICABLE LAW, USE OF THE TOOL IS AT YOUR SOLE RISK AND THAT THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY AND EFFORT IS WITH YOU. +Are you sure you with to proceed (y/N)? +``` + +A druhé potvrzení, jakmile potvrdíte předchozí: + +```plain +Your system will immediately reboot when this is complete. +Is this OK (y/N)? +``` + +Jak uvádí poslední zpráva, váš systém se automaticky restartuje, jakmile bude příkaz dokončen. + +Výchozí konfigurace macOS vypadá takto: + +```bash +guest_os="macos" +img="macos-catalina/RecoveryImage.img" +disk_img="macos-catalina/disk.qcow2" +macos_release="catalina" +``` + +- `guest_os="macos"` instruuje Quickemu k optimalizaci pro macOS. +- `macos_release="catalina"` dává Quickemu pokyn k optimalizaci pro konkrétní vydání macOS. + - Například VirtIO Network a Memory Ballooning jsou dostupné v Big Sur a novějších, ale ne v předchozích verzích. + - A VirtIO Block Media (disky) jsou podporovány/stabilní v Catalina a novějších. + +### kompatibilita s macOS + +Při spouštění systému macOS přes Quickemu je třeba zvážit. + +- Podporovaná vydání macOS: + - Vysoká Sierra + - Mojave + - Catalina **(doporučeno)** + - Velký Sur + - Monterey + - Ventura +- `quickemu` automaticky stáhne požadovaný zavaděč [OpenCore](https://github.com/acidanthera/OpenCorePkg) a firmware OVMF z [OSX-KVM](https://github.com/kholia/OSX-KVM) . +- Ve výchozím nastavení optimalizováno, ale není k dispozici žádná akcelerace GPU. + - Je zjištěn dodavatel hostitelského CPU a hostovaný CPU je podle toho optimalizován. + - [VirtIO Block Media](https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) se používá pro systémový disk tam, kde je podporováno. + - Pro myš je použit [`usb-tablet` VirtIO](http://philjordan.eu/osx-virt/) . + - Síť VirtIO ( `virtio-net` ) je podporována a povolena na macOS Big Sur a novějších, ale předchozí verze používají `vmxnet3` . + - VirtIO Memory Ballooning je podporováno a povoleno v macOS Big Sur a novějších, ale pro ostatní verze podpory macOS je zakázáno. +- Hostitel USB a průchod SPICE je: + - UHCI (USB 2.0) na macOS Catalina a dřívějších verzích. + - XHCI (USB 3.0) na macOS Big Sur a novějších. +- Rozlišení displeje lze změnit pouze prostřednictvím předvoleb systému macOS. +- **Plně duplexní zvuk vyžaduje [VoodooHDA OC](https://github.com/chris1111/VoodooHDA-OC) nebo přenos přes USB audio zařízení do hostujícího virtuálního počítače macOS** . +- POZNÁMKA! Chcete-li nainstalovat VoodooHDA OC, je třeba vypnout [Gatekeeper](https://disable-gatekeeper.github.io/) a [System Integrity Protection (SIP).](https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection) +- Sdílení souborů mezi hostem a hostitelem je dostupné přes [virtio-9p](https://wiki.qemu.org/Documentation/9psetup) a [SPICE webdavd](https://gitlab.gnome.org/GNOME/phodav/-/merge_requests/24) . +- Kopírování/vkládání prostřednictvím agenta SPICE **není v systému macOS k dispozici** . + +### macOS App Store + +Pokud se při pokusu o přihlášení do App Store zobrazí zpráva *„Vaše zařízení nebo počítač nelze ověřit“* , ujistěte se, že je vaše zařízení s kabelovou ethernetovou sítí `en0` . K ověření použijte `ifconfig` v terminálu. + +Pokud kabelové ethernetové zařízení není `en0` , přejděte do *Předvolby systému* -> *Síť* , odstraňte všechna síťová zařízení a použijte změny. Dále otevřete terminál a spusťte následující: + +```bash +sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist +``` + +Nyní restartujte a App Store by měl fungovat. + +## Windows 8, 10 a 11 pro hosty + +`quickget` dokáže automaticky stáhnout [Windows10](https://www.microsoft.com/software-download/windows10) a [Windows 11](https://www.microsoft.com/software-download/windows11) a vytvořit optimalizovanou konfiguraci virtuálního stroje. Tato konfigurace také zahrnuje [ovladače VirtIO pro Windows](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/) . + +Windows 8.1 je také podporován, ale neobsahuje žádnou automatickou instalaci ani optimalizaci ovladačů. + +```bash +quickget windows 11 +quickemu --vm windows-11.conf +``` + +- Dokončete instalaci obvyklým způsobem. +- Všechny příslušné ovladače a služby by se měly nainstalovat automaticky. +- Automaticky se vytvoří uživatelský účet místního správce s těmito přihlašovacími údaji: + - Uživatelské jméno: `Quickemu` + - Heslo: `quickemu` + +Výchozí konfigurace Windows 11 vypadá takto: + +```bash +guest_os="windows" +disk_img="windows-11/disk.qcow2" +iso="windows-11/windows-11.iso" +fixed_iso="windows-11/virtio-win.iso" +tpm="on" +secureboot="off" +``` + +- `guest_os="windows"` instruuje `quickemu` k optimalizaci pro Windows. +- `fixed_iso=` určuje obraz ISO, který poskytuje ovladače VirtIO. +- `tpm="on"` dává pokyn `quickemu` k vytvoření softwarově emulovaného zařízení TPM pomocí `swtpm` . + +# KOŘENÍ + +Při používání protokolu SPICE jsou k dispozici následující funkce: + +- Zkopírujte/vložte mezi hostem a hostitelem +- Host sdílení souborů s hostem +- přesměrování zařízení USB + +Chcete-li použít SPICE add `--display spice` do vyvolání Quickemu, vyžaduje to, aby byl nainstalován klient `spicy` , který je k dispozici z balíčku `spice-client-gtk` v Debian/Ubuntu. + +```bash +quickemu --vm ubuntu-22.04.conf --display spice +``` + +Chcete-li povolit kopírování/vkládání s hostem Windows, nainstalujte do hostovaného virtuálního počítače [nástroje SPICE Windows](https://www.spice-space.org/download.html) . + +## Bezhlavý + +Chcete-li spustit VM s povoleným SPICE, ale bez připojeného displeje, použijte `--display none` . To vyžaduje, aby byl nainstalován `spicy` klient dostupný z balíčku `spice-client-gtk` v Debian/Ubuntu pro připojení k běžícímu virtuálnímu počítači. + +```bash +quickemu --vm ubuntu-22.04.conf --display none +``` + +Můžete také použít soubor `.ports` v adresáři VM k vyhledání portů SSH a SPICE, ke kterým je VM připojen. + +```bash +cat ubuntu-22.04/ubuntu-22.04.ports +``` + +Pokud je například port SSH nastaven na 22220 a za předpokladu, že váš virtuální počítač má spuštěnou službu SSH (podrobnosti se liší podle OS), můžete do něj obvykle SSH připojit z hostitele takto: + +```bash +ssh -p 22220 your_vm_user@localhost +``` + +# Přístupnost + +Qemu poskytuje podporu pro použití BrlAPI k zobrazení braillského výstupu na skutečném nebo falešném zařízení. + +```bash +quickemu --vm ubuntu-22.04.conf --braille --display sdl +``` + +# BIOS a EFI + +Protože Quickemu 2.1.0 je `efi` výchozí možností spouštění. Pokud chcete toto chování přepsat, přidejte do konfigurace virtuálního počítače následující řádek, abyste povolili starší verzi systému BIOS. + +- `boot="legacy"` - Povolí spouštění staršího systému BIOS + +# Ladění procesorových jader, RAM a disků + +Ve výchozím nastavení Quickemu vypočítá počet jader CPU a RAM pro přidělení virtuálnímu počítači na základě specifikací vašeho hostitelského počítače. Toto výchozí chování můžete přepsat a vyladit konfiguraci virtuálního počítače podle svých představ. + +Přidejte další řádky do konfigurace virtuálního počítače: + +- `cpu_cores="4"` - Zadejte počet jader CPU přidělených virtuálnímu počítači +- `ram="4G"` – Určete množství paměti RAM, které se má přidělit virtuálnímu počítači +- `disk_size="16G"` - Zadejte velikost virtuálního disku přiděleného virtuálnímu počítači + +## Předběžné přidělení disku + +Režim předběžného přidělení (povolené hodnoty: `off` (výchozí), `metadata` , `falloc` , `full` ). Obrázek s předem přidělenými metadaty je zpočátku větší, ale může zlepšit výkon, když obrázek potřebuje růst. + +Určete, jaké předběžné přidělení disku se má použít, pokud existuje, při vytváření bitové kopie systémového disku přidáním takového řádku do konfigurace virtuálního počítače. + +- `preallocation="metadata"` + +## CD-ROM disky + +Pokud chcete zpřístupnit obraz ISO z hostitele hostovi, přidejte do konfigurace virtuálního počítače následující řádek: + +- `fixed_iso="/path/to/image.iso"` + +## Diskety + +Pokud jste jako [Alan Pope,](https://popey.com) pravděpodobně budete chtít připojit obraz diskety do hosta. Chcete-li tak učinit, přidejte do konfigurace virtuálního počítače následující řádek: + +- `floppy="/path/to/floppy.img"` + +# Sdílení souborů + +Všechny možnosti sdílení souborů zpřístupní hostujícím virtuálním počítačům pouze `~/Public` (nebo lokalizované varianty) pro aktuálního uživatele. + +## Samba 🐧 🍏 🪟 + +Pokud je na hostiteli k dispozici `smbd` , Quickemu automaticky povolí vestavěnou podporu QEMU pro vystavení sdílení Samba z hostitele hostovi. + +Minimální komponenty Samba můžete nainstalovat na Ubuntu pomocí: + +```bash +sudo apt install --no-install-recommends samba +``` + +Pokud je vše správně nastaveno, `smbd` adresa se vytiskne při spuštění virtuálního stroje. Například: + +``` + - smbd: On guest: smb://10.0.2.4/qemu +``` + +Pokud používáte hosta Windows, klikněte pravým tlačítkem na "Tento počítač", klikněte na "Přidat síťové umístění" a vložte tuto adresu, odstraňte `smb:` a nahraďte dopředná lomítka zpětnými lomítky (v tomto příkladu `\10.0.2.4\qemu` ). + +## SPICE WebDAV 🐧 🪟 + +- TBD + +## VirtIO-9P 🐧 🍏 + +- TBD + +# Přesměrování síťového portu + +Přidejte další řádek do konfigurace virtuálního počítače. Například: + +- `port_forwards=("8123:8123" "8888:80")` + +V příkladu výše: + +- Port 8123 na hostiteli je přesměrován na port 8123 na hostovi. +- Port 8888 na hostiteli je přesměrován na port 80 na hostiteli. + +# Zakázat práci v síti + +Chcete-li úplně zakázat všechna síťová rozhraní v hostovaném virtuálním počítači, přidejte do konfigurace virtuálního počítače tento další řádek: + +- `network="none"` + +# Omezené vytváření sítí + +Hosta můžete izolovat od hostitele (a širší sítě) pomocí možnosti omezení, která omezí práci v síti pouze na hosta a jakákoli virtuální zařízení. + +Toho lze využít k tomu, aby software běžící uvnitř hosta nemohl telefonovat domů a přitom stále poskytoval síť uvnitř hosta. Přidejte tento další řádek do konfigurace virtuálního počítače: + +- `network="restrict"` + +# Přemostěné sítě + +Připojte svůj virtuální počítač k předem nakonfigurovanému síťovému mostu. Přidejte další řádek do konfigurace virtuálního počítače: + +- `network="br0"` + +Pokud chcete mít trvalou MAC adresu pro vaše přemostěné síťové rozhraní v hostujícím virtuálním počítači, můžete do konfigurace virtuálního počítače přidat `macaddr` . QEMU vyžaduje, aby adresa MAC byla v rozsahu: **52:54:00:AB:00:00 - 52:54:00:AB:FF:FF** + +Takže si můžete generovat své vlastní MAC adresy pomocí: + +- `macaddr="52:54:00:AB:51:AE"` + +# přesměrování USB + +Quickemu podporuje přesměrování USB přes SPICE pass-through a host pass-through. + +## Přesměrování SPICE (doporučeno) + +Použití SPICE pro USB pass-through je nejjednodušší, protože nevyžaduje žádná zvýšená oprávnění, spusťte Quickemu s `--display spice` a poté z nabídky vyberte `Input` -> `Select USB Device for redirection` a vyberte, která zařízení chcete připojit k hostovi. + +## Přesměrování hostitele **NENÍ doporučeno** + +**Přesměrování USB hostitele se nedoporučuje** , je poskytováno čistě pro zpětnou kompatibilitu se staršími verzemi Quickemu. Preferuje se použití SPICE, viz výše. + +Přidejte další řádek do konfigurace virtuálního počítače. Například: + +- `usb_devices=("046d:082d" "046d:085e")` + +V příkladu výše: + +- Zařízení USB s vendor_id 046d a product_id 082d bude vystaveno hostovi. +- Zařízení USB s vendor_id 046d a product_id 085e bude vystaveno hostovi. + +Pokud na zařízení USB nelze zapisovat, `quickemu` zobrazí příslušné příkazy pro úpravu přístupových oprávnění zařízení USB, například takto: + +``` + - USB: Host pass-through requested: + - Sennheiser Communications EPOS GTW 270 on bus 001 device 005 needs permission changes: + sudo chown -v root:user /dev/bus/usb/001/005 + ERROR! USB permission changes are required 👆 +``` + +# TPM + +Od Quickemu 2.2.0 lze k hostujícím virtuálním počítačům přidat softwarově emulované zařízení TPM. Stačí přidat `tpm="on"` do konfigurace virtuálního počítače. `quickget` automaticky přidá tento řádek do virtuálních počítačů Windows 11. + +# Všechny možnosti + +Zde jsou pokyny k použití: + + + +``` + +Usage + quickemu --vm ubuntu.conf + +You can also pass optional parameters + --access : Enable remote spice access support. 'local' (default), 'remote', 'clientipaddress' + --braille : Enable braille support. Requires SDL. + --delete-disk : Delete the disk image and EFI variables + --delete-vm : Delete the entire VM and it's configuration + --display : Select display backend. 'sdl' (default), 'gtk', 'none', 'spice' or 'spice-app' + --fullscreen : Starts VM in full screen mode (Ctl+Alt+f to exit) + --ignore-msrs-always : Configure KVM to always ignore unhandled machine-specific registers + --screen : Use specified screen to determine the window size. + --screenpct : Percent of fullscreen for VM if --fullscreen is not specified. + --shortcut : Create a desktop shortcut + --snapshot apply : Apply/restore a snapshot. + --snapshot create : Create a snapshot. + --snapshot delete : Delete a snapshot. + --snapshot info : Show disk/snapshot info. + --status-quo : Do not commit any changes to disk/snapshot. + --viewer : Choose an alternative viewer. @Options: 'spicy' (default), 'remote-viewer', 'none' + --ssh-port : Set ssh-port manually + --spice-port : Set spice-port manually + --public-dir : Expose share directory. @Options: '' (default: xdg-user-dir PUBLICSHARE), '', 'none' + --monitor : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none' + --monitor-telnet-host : Set telnet host for monitor. (default: 'localhost') + --monitor-telnet-port : Set telnet port for monitor. (default: '4440') + --monitor-cmd : Send command to monitor if available. (Example: system_powerdown) + --serial : Set serial connection type. @Options: 'socket' (default), 'telnet', 'none' + --serial-telnet-host : Set telnet host for serial. (default: 'localhost') + --serial-telnet-port : Set telnet port for serial. (default: '6660') + --keyboard : Set keyboard. @Options: 'usb' (default), 'ps2', 'virtio' + --keyboard_layout : Set keyboard layout. + --mouse : Set mouse. @Options: 'tablet' (default), 'ps2', 'usb', 'virtio' + --usb-controller : Set usb-controller. @Options: 'ehci' (default), 'xhci', 'none' + --sound-card : Set sound card. @Options: 'intel-hda' (default), 'ac97', 'es1370', 'sb16', 'none' + --extra_args : Pass additional arguments to qemu + --version : Print version + +``` + + + +``` +## Desktop shortcuts + +Desktop shortcuts can be created for a VM, the shortcuts are saved in +`~/.local/share/applications`. Here is an example of how to create a +shortcut. + +``` bash +quickemu --vm ubuntu-22.04-desktop.conf --shortcut +``` + +## Velikost obrazovky a okna (pouze pro hosty se systémem Linux) + +`qemu` bude vždy výchozí primární monitor pro zobrazení okna virtuálního počítače. + +Bez možnosti `--screen` bude `quickemu` hledat velikost nejmenšího monitoru a použije velikost, která se na daný monitor vejde. + +Volba `--screen` nutí `quickemu` použít k výpočtu velikosti okna velikost daného monitoru. **Nepoužije tento monitor k zobrazení okna virtuálního počítače, pokud to není primární monitor** . To je užitečné, pokud primární monitor, ne-li nejmenší, a pokud není nutné přesouvat okno virtuálního počítače. + +Volba `--screen` je také užitečná s volbou `--fullscreen` , opět proto, že `qemu` bude vždy používat primární monitor. Aby režim celé obrazovky fungoval správně, musí rozlišení okna virtuálního počítače odpovídat rozlišení obrazovky. + +Chcete-li vědět, kterou obrazovku použít, zadejte: + +```bash +xrandr --listmonitors | grep -v Monitors +``` + +Příkaz vypíše něco takového: + +```bash + 0: +*HDMI-0 2560/597x1440/336+1920+0 HDMI-0 + 1: +DVI-D-0 1920/527x1080/296+0+0 DVI-D-0 +``` + +První číslo je to, co je třeba předat volbě `--screen` . + +Například: + +```bash +quickemu --vm vm.conf --screen 0 +``` + +Výše uvedené používá obrazovku 2560x1440 k výpočtu velikosti okna, které Quickemu velikosti 2048x1152. Bez možnosti `--screen` by Quickemu použilo monitor 1920x1080, což má za následek velikost okna 1664x936. + +'--screenpct' je volitelná celočíselná hodnota mezi 25 <= pct < 100, která přepíše výchozí velikosti obrazovky systému. Velikost virtuálního počítače bude 'pct' zvolené obrazovky. **Je-li zvoleno --fullscreen, bude obrazovka plná, místo toho, aby byla zmenšena o hodnotu --screenpct.** + +# Reference + +Užitečná reference, která pomohla vývoji Quickemu. + +- Všeobecné + - [Dokumentace QEMU!](https://qemu.readthedocs.io/en/latest/) + - [https://pve.proxmox.com/wiki/Qemu/KVM_Virtual_Machines](https://pve.proxmox.com/wiki/Qemu/KVM_Virtual_Machines) + - [https://www.kraxel.org/blog/2020/01/qemu-sound-audiodev/](https://www.kraxel.org/blog/2020/01/qemu-sound-audiodev/) +- Operační Systém Mac + - [https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/](https://www.nicksherlock.com/2020/06/installing-macos-big-sur-on-proxmox/) + - [https://passthroughpo.st/mac-os-adds-early-support-for-virtio-qemu/](https://passthroughpo.st/mac-os-adds-early-support-for-virtio-qemu/) + - [https://github.com/kholia/OSX-KVM](https://github.com/kholia/OSX-KVM) + - [https://github.com/thenickdude/KVM-Opencore](https://github.com/thenickdude/KVM-Opencore) + - [https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery](https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/macrecovery) + - [https://www.kraxel.org/blog/2017/09/running-macos-as-guest-in-kvm/](https://www.kraxel.org/blog/2017/09/running-macos-as-guest-in-kvm/) + - [https://www.nicksherlock.com/2017/10/passthrough-of-advanced-cpu-features-for-macos-high-sierra-guests/](https://www.nicksherlock.com/2017/10/passthrough-of-advanced-cpu-features-for-macos-high-sierra-guests/) + - [http://philjordan.eu/osx-virt/](http://philjordan.eu/osx-virt/) + - [https://github.com/Dids/clover-builder](https://github.com/Dids/clover-builder) + - [Konfigurátor OpenCore](https://mackie100projects.altervista.org) +- Okna + - [https://www.heiko-sieger.info/running-windows-10-on-linux-using-kvm-with-vga-passthrough/](https://www.heiko-sieger.info/running-windows-10-on-linux-using-kvm-with-vga-passthrough/) + - [https://leduccc.medium.com/improving-the-performance-of-a-windows-10-guest-on-qemu-a5b3f54d9cf5](https://leduccc.medium.com/improving-the-performance-of-a-windows-10-guest-on-qemu-a5b3f54d9cf5) + - [https://frontpagelinux.com/tutorials/how-to-use-linux-kvm-to-optimize-your-windows-10-virtual-machine/](https://frontpagelinux.com/tutorials/how-to-use-linux-kvm-to-optimize-your-windows-10-virtual-machine/) + - [https://turlucode.com/qemu-command-line-args/](https://turlucode.com/qemu-command-line-args/) + - [https://github.com/pbatard/Fido](https://github.com/pbatard/Fido) + - [https://www.catapultsystems.com/blogs/create-zero-touch-windows-10-iso/](https://www.catapultsystems.com/blogs/create-zero-touch-windows-10-iso/) +- TPM + - [https://qemu-project.gitlab.io/qemu/specs/tpm.html](https://qemu-project.gitlab.io/qemu/specs/tpm.html) + - [https://www.tecklyfe.com/how-to-create-a-windows-11-virtual-machine-in-qemu/](https://www.tecklyfe.com/how-to-create-a-windows-11-virtual-machine-in-qemu/) +- 9p a virtiofs + - [https://wiki.qemu.org/Documentation/9p](https://wiki.qemu.org/Documentation/9p) + - [https://wiki.qemu.org/Documentation/9psetup](https://wiki.qemu.org/Documentation/9psetup) + - [https://www.kraxel.org/blog/2019/06/macos-qemu-guest/](https://www.kraxel.org/blog/2019/06/macos-qemu-guest/) + - [https://superuser.com/questions/628169/how-to-share-a-directory-with-the-host-without-networking-in-qemu](https://superuser.com/questions/628169/how-to-share-a-directory-with-the-host-without-networking-in-qemu) + - [https://virtio-fs.gitlab.io/](https://virtio-fs.gitlab.io/) diff --git a/quickemu b/quickemu index a76cccb8f2..7766388f0f 100755 --- a/quickemu +++ b/quickemu @@ -1407,6 +1407,13 @@ function sound_card_param_check() { fi } +function sound_card_param_check() { + if [ "${SOUND_CARD}" != "intel-hda" ] && [ "${SOUND_CARD}" != "ac97" ] && [ "${SOUND_CARD}" != "es1370" ] && [ "${SOUND_CARD}" != "sb16" ] && [ "${SOUND_CARD}" != "none" ]; then + echo "ERROR! Requested sound card '${SOUND_CARD}' is not recognised." + exit 1 + fi +} + function viewer_param_check() { if [ "${VIEWER}" != "none" ] && [ "${VIEWER}" != "spicy" ] && [ "${VIEWER}" != "remote-viewer" ]; then echo "ERROR! Requested viewer '${VIEWER}' is not recognised." @@ -1780,7 +1787,10 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then VMPATH=$(realpath "$(dirname "${VM}")") VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket" VM_SERIAL_SOCKETPATH="${VMDIR}/${VMNAME}-serial.socket" - + if [ ! -f "${disk_img}" ]; then + cd "${VMPATH}" + fi + # Backwards compatibility for ${driver_iso} if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then fixed_iso="${driver_iso}" diff --git a/quickfzf b/quickfzf new file mode 100755 index 0000000000..84000898ea --- /dev/null +++ b/quickfzf @@ -0,0 +1,256 @@ +#!/usr/bin/bash + +# Author: zenobit +# Description: Uses fzf to provide a simple TUI for quickemu and quickget +# License MIT + +tui_define_variables() { + progname="${progname:="${0##*/}"}" + version='0.3' + #EDITOR='nano' + configdir="$HOME/.config/$progname" + vms=(*.conf) + TMP="/tmp/$progname" + # Set traps to catch the signals and exit gracefully + trap 'exit' INT + trap 'exit' EXIT + # Dependency check: check if fzf,quickemu is installed and can be executed + if ! command -v quickemu >/dev/null 2>&1; then + echo 'You are missing quickemu...' && exit 1 + fi + QUICKGET=$(command -v quickget) || exit 2 + if ! command -v fzf >/dev/null 2>&1; then + echo 'You are missing fzf...' && exit 3 + fi + qcommand="quickemu < ${configdir}/command -vm" +} +tui_display_header() { + printf 'Simple TUI for quickemu\n%s: v.%s\nquickemu: v.%s\n' "$progname" "$version" "$(quickemu --version)" + if [ -z "$EDITOR" ]; then + echo 'editor: Not set! edit configs will not work!' + else + echo "editor: $EDITOR" + fi + printf 'Workdir:\n %s\n' "$(pwd)" + if [ -f "${configdir}/command" ]; then + printf '\ncustom command:\n quickemu %s\n' "$(cat "${configdir}/command")" + fi + if [ -f "${configdir}/vm" ]; then + printf '\nVMs config:\n-------------\n%s\n' "$(cat "${configdir}/vm")" + fi + printf '\nPrepared VMs:\n-------------\n' +} +tui_print_available_VMs() { + if [ ${#vms[@]} -eq 0 ]; then + echo 'No VMs found.' + exit 1 + else + printf '%s\n' "${vms[@]%.*}" + echo '-------------' + printf 'Press CTRL+c anytime to kill %s' "$progname" + fi +} +tui_action_prompt_fzf() { + start=$(printf "Do you want to... +run VM +create new VM +advance settings" | fzf --height 10% --layout=reverse --info=inline --header-lines=1) + case $start in + c|'create new VM' ) todo='create';; + a|'advance settings' ) todo='advanced';; + r|'run VM' ) todo='run';; + esac +} +fzf_get_releases() { + release=$(echo "$choices" | grep 'Releases' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Release') +} +fzf_get_editions() { + edition=$(echo "$choices" | grep 'Editions' | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose Edition') +} +tui_create_VM() { + os=$("$QUICKGET" | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' | fzf --cycle --header='Choose OS to download') + choices=$("$QUICKGET" "$os" | sed 1d) + # Get the release and edition to download, if necessary + if [ -z "$os" ]; then exit 100 + elif [ "$(echo "$choices" | wc -l)" = 1 ]; then + fzf_get_releases || exit 101 + printf '\n Trying to download %s %s...\n\n' "$os" "$release" + "$QUICKGET" "$os" "$release" || exit 104 + cat "${configdir}/vm" >> $(ls -t | head -n1) + else + fzf_get_releases || exit 102 + fzf_get_editions || exit 103 + printf '\n Trying to download %s %s %s...\n\n' "$os" "$release" "$edition" + "$QUICKGET" "$os" "$release" "$edition" || exit 105 + echo "${configdir}/vm" >> ./"$(ls -t | head -n1)" + fi +} +tui_edit_default_VMs_config() { + printf 'For example:\ncpu_cores="2"\nram="4G"\n' + ${EDITOR} ${configdir}/vm +} +tui_edit_VM_config() { + find *.conf | fzf --cycle --header='Choose config to edit' --height 10% --layout=reverse --info=inline --preview 'cat {}' --bind 'enter:become($EDITOR {})' || exit 104 +} +tui_custom_quickemu_command() { + custom=$(echo "edit delete"| grep -o '[^ ]*' | fzf --cycle --header='Edit or delete custom command?') + if [ "$custom" = "edit" ]; then + quickemu + printf '\nEnter quickemu custom command:\n For example:--public-dir ~/Downloads\n:' + read -r command + mkdir -p "$configdir" + echo "$command" > "${configdir}/command" + elif [ "$custom" = "delete" ]; then + rm "${configdir}/command" + fi +} +tui_choose_VM_to_run() { + chosen=$(printf '%s\n' "${vms[@]%.*}" | fzf --cycle --header='Choose VM to run' --height 50% --layout=reverse --info=inline --preview 'cat {}.conf') +} +tui_run_VM() { + printf '\n Starting %s...\n\n' "$chosen" + if [ -f "${configdir}/command" ]; then + quickemu < "${configdir}/command" -vm "$chosen".conf + else + quickemu -vm "$chosen".conf + fi +} +quickget_add_distro() { + echo "for now with yad only" #TODO + yad --form --field="Pretty name" "" --field="Name" "" --field="Releases" "" --field="Editions" "" --field="URL" "" --field="ISO" "" --field="Checksum file" "" > "${TMP}/template" + PRETTY_NAME="$(cat "${TMP}/template" | cut -d'|' -f1)" + NAME="$("${TMP}/template" > cut -d'|' -f2)" + RELEASES="$(cat "${TMP}/template" | cut -d'|' -f3)" + EDITIONS="$(cat "${TMP}/template" | cut -d'|' -f4)" + URL="$(cat "${TMP}/template" | cut -d'|' -f5)" + ISO="$(cat "${TMP}/template" | cut -d'|' -f6)" + CHECKSUM_FILE="$(cat "${TMP}/template" | cut -d'|' -f7)" + cat < "${TMP}/template" +#32 + +$NAME) PRETTY_NAME="$PRETTY_NAME";; + +#line 184+ + +$NAME \\ + +#line 262+ + +function releases_$NAME() { +echo $RELEASES +} + +function editions_$NAME() { +echo $EDITIONS +} + +#line 1052+ + +function get_$NAME() { +local EDITION="\${1:-}" +local HASH="" +local ISO="$ISO" +local URL="$URL" +HASH="\$(wget -q -O- \${URL}/\${CHECKSUM_FILE} | grep (\${ISO} | cut -d' ' -f4)" +echo "\${URL}/\${ISO}" "\${HASH}" +} + +EOF + diff "${TMP}/template" "quickget" +} +function quickget_get_releases_and_editions() { + result=$(quickget "$os" | sed 1d | cut -d':' -f2) + releases=$(echo "$result" | head -1) + editions=$(echo "$result" | tail -1) +} +function desktop_entry_create() { + cat < "${DESKTOP_FILE}" +[Desktop Entry] +Version=$version +Type=$type +Name=$name +GenericName=$progname +Comment=$comment +Exec=$execmd +Icon=$icon +Terminal=$terminal +X-MultipleArgs=$args +Type=$type +Categories=$categories +StartupNotify=$notify +MimeType=$mime +Keywords=$keyword + +EOF +} +quickget_test_download_ISOs() { + rm -r "${TMP}" + mkdir -p "$TMP" && cd "$TMP" + touch "${TMP}/test" + "$QUICKGET" | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' > supported + while read -r get_name; do + echo "Trying $get_name..." + mkdir -p "${TMP}/_distros/$get_name" && cd "${TMP}/_distros/$get_name" + releases=$("$QUICKGET" "$get_name" | grep 'Releases' | cut -d':' -f2 | sed 's/^ //' | sed 's/ *$//') + echo "$releases" > releases + editions=$("$QUICKGET" "$get_name" | grep 'Editions' | cut -d':' -f2 | sed 's/^ //' | sed 's/ *$//') + echo "$editions" > editions + if [ -z "$editions" ]; then + for release in $releases; do + echo "$get_name" >> "${TMP}/test" + "$QUICKGET" -t "$get_name" "${release}" >> "${TMP}/test" + done + else + while read -r release; do + for edition in $editions; do + echo "$get_name" >> "${TMP}/test" + "$QUICKGET" -t "$get_name" "${release}" "${edition}" >> "${TMP}/test" + done + done < releases + fi + cd "$TMP" + done < supported + printf "\nDone" +} +tui_advanced_menu() { + advance=$(printf "Do you want to... +default VMs config +edit VM config +quickemu custom command +add distro to quickget +test distro sources" | fzf --height 10% --layout=reverse --info=inline --header-lines=1) + case $advance in + 'default VMs config' ) tui_edit_default_VMs_config;; + 'edit VM config' ) tui_edit_VM_config;; + 'quickemu custom command' ) tui_custom_quickemu_command;; + 'add distro to quickget' ) quickget_add_distro;; + 'test distro sources' ) quickget_test_download_ISOs;; + esac +} +tui_what_to_do() { + if [ "$#" -eq "1" ]; then + todo="$1" + fi + case $todo in + advanced ) tui_advanced_menu;; + create ) tui_create_VM || exit 200;; + edit ) tui_edit_VM_config || exit 201;; + custom ) tui_custom_quickemu_command || exit 202;; + run ) + tui_choose_VM_to_run || exit 203 + tui_run_VM || exit 204 + ;; + esac +} +tui_run() { + tui_define_variables || exit 4 + tui_display_header || exit 5 + tui_print_available_VMs || exit 6 + tui_action_prompt_fzf || exit 7 + tui_what_to_do || exit 8 +} +while true +do + tui_run + exit 0 +done diff --git a/quickget b/quickget index e156412290..ea4866be81 100755 --- a/quickget +++ b/quickget @@ -4,13 +4,17 @@ export LC_ALL=C # Here the quick 'n dirty guide to adding a new OS to quickget # -# 1. Update os_support() - add new OS, all lowercase -# 2. Update pretty_name() - add a pretty name for new OS *only if the catch all is not suitable* -# 3. Update os_homepages() - add a homepage for new OS -# 4. Create a releases_newos() generator (required) outputs the current supported release versions -# 5. Create a editions_newos() generator (optional) outputs the editions if new OS has multiple flavours/editions -# 6. Update make_vm_config() - add any *required* new OS tweaks -# 7. Create a get_newos() function - that does something like this: +# 1. Update os_support() - add new OS, all lowercase +# 2. Update os_info() - Fill all posible fields for new OS (leave empty if no login, but | must stay same) +# Here is whats should be there... +# ) INFO="||||";; +# 4. Create a releases_newos() generator (required) outputs the current supported release versions (from newest) +# 5. Create a editions_newos() generator (optional) outputs the editions if new OS has multiple flavours/editions +# 6. Update make_vm_config() - add any *required* new OS tweaks +# 7. Create a get_newos() function - that does something like this: (Look at other OS) +#AD. For cutting first field with hash you can use function +# cut_1 +# instead of "cut -d' ' -f1" # #function get_newos() { # local EDITION="${1:-}" @@ -18,14 +22,155 @@ export LC_ALL=C # local ISO="newos-${RELEASE}-${EDITION}-amd64.iso" # local URL="https://www.newos.org/download/${RELEASE}/${EDITION}" # -# HASH=$(wget -q -O- "${URL}/SHA512SUMS" | grep "${ISO}" | cut -d' ' -f1) +# HASH=$(wget -q -O- "${URL}/SHA512SUMS" | grep "${ISO}" | cut_1) # echo "${URL}/${ISO} ${HASH}" #} function cleanup() { - if [ -n "$(jobs -p)" ]; then - kill "$(jobs -p)" - fi + if [ -n "$(jobs -p)" ]; then + kill "$(jobs -p)" + fi +} + +function os_info() { + local SIMPLE_NAME="" + local INFO="" + SIMPLE_NAME="${1}" + case ${SIMPLE_NAME} in + alma) INFO="Alma Linux|Fedora,RedHat||https://almalinux.org/|Community owned and governed, forever-free enterprise Linux distribution, focused on long-term stability, providing a robust production-grade platform. AlmaLinux OS is binary compatible with RHEL®.";; + alpine) INFO="Alpine Linux|Independent||https://alpinelinux.org/|Security-oriented, lightweight Linux distribution based on musl libc and busybox.";; + android) INFO="Android x86|Independent||https://www.android-x86.org/|Port Android Open Source Project to x86 platform.";; + antix) INFO="Antix|Debian||https://antixlinux.com/|Fast, lightweight and easy to install systemd-free linux live CD distribution based on Debian Stable for Intel-AMD x86 compatible systems.";; + artixlinux) INFO="Artix Linux|Arch||https://artixlinux.org/|The Art of Linux. Simple. Fast. Systemd-free.";; + archlinux) INFO="Arch Linux|Independent||https://archlinux.org/|Lightweight and flexible Linux® distribution that tries to Keep It Simple.";; + archcraft) INFO="Archcraft|Arch||https://archcraft.io/|Yet another minimal Linux distribution, based on Arch Linux.";; + arcolinux) INFO="Arco Linux|Arch||https://arcolinux.com/|Is all about becoming an expert in linux.";; + athenaos) INFO="Athena OS|Arch||https://athenaos.org/|Offer a different experience than the most used pentesting distributions by providing only tools that fit with the user needs and improving the access to hacking resources and learning materials.";; + batocera) INFO="Batocera|Independent||https://batocera.org/|Retro-gaming distribution with the aim of turning any computer/nano computer into a gaming console during a game or permanently.";; + bazzite) INFO="bazzite|Fedora,SteamOS||https://github.com/ublue-os/bazzite/|Container native gaming and a ready-to-game SteamOS like.";; + blendos) INFO="BlendOS|Arch||https://blendos.co/|A seamless blend of all Linux distributions. Allows you to have an immutable, atomic and declarative Arch Linux system, with application support from several Linux distributions & Android.";; + bodhi) INFO="Bodhi|Debian,Ubuntu||https://www.bodhilinux.com/|Lightweight distribution featuring the fast & fully customizable Moksha Desktop.";; + bunsenlabs) INFO="Bunsenlab|Debian||https://www.bunsenlabs.org/|Light-weight and easily customizable Openbox desktop. The project is a community continuation of CrunchBang Linux.";; + cachyos) INFO="CachyOS|Arch||https://cachyos.org/|Designed to deliver lightning-fast speeds and stability, ensuring a smooth and enjoyable computing experience every time you use it.";; + centos-stream) INFO="CentOS Stream|Fedora,RedHat||https://www.centos.org/centos-stream/|Continuously delivered distro that tracks just ahead of Red Hat Enterprise Linux (RHEL) development, positioned as a midstream between Fedora Linux and RHEL.";; + chimeralinux) INFO="Chimera Linux|Independent|anon:chimera root:chimera|https://chimera-linux.org/|Modern, general-purpose non-GNU Linux distribution.";; + crunchbang++) INFO="#!++|Debian||https://www.crunchbangplusplus.org/|The classic minimal crunchbang feel, now with debian 12 bookworm.";; + debian) INFO="Debian|Independent||https://www.debian.org/|Complete Free Operating System with perfect level of ease of use and stability.";; + deepin) INFO="Deepin|Debian||https://www.deepin.org/|Beautiful UI design, intimate human-computer interaction, and friendly community environment make you feel at home.";; + devuan) INFO="Devuan|Debian||https://www.devuan.org/|Fork of Debian without systemd that allows users to reclaim control over their system by avoiding unnecessary entanglements and ensuring Init Freedom.";; + dragonflybsd) INFO="DragonFlyBSD|FreeBSD||https://www.dragonflybsd.org/|Provides an opportunity for the BSD base to grow in an entirely different direction from the one taken in the FreeBSD, NetBSD, and OpenBSD series.";; + easyos) INFO="EasyOS|Independent||https://easyos.org/|Experimental distribution designed from scratch to support containers.";; + edubuntu) INFO="Edubuntu|Ubuntu||https://www.edubuntu.org/|Stable, secure and privacy concious option for schools.";; + elementary) INFO="elementary OS|Debian,Ubuntu||https://elementary.io/|Thoughtful, capable, and ethical replacement for Windows and macOS.";; + endeavouros) INFO="EndeavourOS|Arch||https://endeavouros.com/|Provides an Arch experience without the hassle of installing it manually for both x86_64 and ARM systems.";; + endless) INFO="Endless OS|Debian||https://www.endlessos.org/os|Completely Free, User-Friendly Operating System Packed with Educational Tools, Games, and More.";; + fedora) INFO="Fedora|Independent||https://www.fedoraproject.org/|Innovative platform for hardware, clouds, and containers, built with love by you.";; + freebsd) INFO="FreeBSD|Independent||https://www.freebsd.org/|Operating system used to power modern servers, desktops, and embedded platforms.";; + freedos) INFO="FreeDOS|Independent||https://freedos.org/|DOS-compatible operating system that you can use to play classic DOS games, run legacy business software, or develop embedded systems.";; + garuda) INFO="Garuda Linux|Arch||https://garudalinux.org/|Feature rich and easy to use Linux distribution.";; + gentoo) INFO="Gentoo|Independent||https://www.gentoo.org/|Highly flexible, source-based Linux distribution.";; + ghostbsd) INFO="GhostBSD|FreeBSD||https://www.ghostbsd.org/|Simple, elegant desktop BSD Operating System.";; + haiku) INFO="Haiku|Independent||https://www.haiku-os.org/|Specifically targets personal computing. Inspired by the BeOS, Haiku is fast, simple to use, easy to learn and yet very powerful.";; + holoiso) INFO="SteamOS HoloISO|Arch,SteamOS||https://github.com/HoloISO/holoiso|Bring the Steam Decks SteamOS Holo redistribution and provide a close-to-official SteamOS experience.";; + kali) INFO="Kali|Debian||https://www.kali.org/|The most advanced Penetration Testing Distribution.";; + kdeneon) INFO="KDE Neon|Debian,Ubuntu||https://neon.kde.org/|Latest and greatest of KDE community software packaged on a rock-solid base.";; + kolibrios) INFO="KolibriOS|Independent||http://kolibrios.org/en/|Tiny yet incredibly powerful and fast operating system.";; + kubuntu) INFO="Kubuntu|Ubuntu||https://kubuntu.org/|Free, complete, and open-source alternative to Microsoft Windows and Mac OS X which contains everything you need to work, play, or share.";; + linuxlite) INFO="Linux Lite|Debian,Ubuntu||https://www.linuxliteos.com/|Your first simple, fast and free stop in the world of Linux.";; + linuxmint) INFO="Linux Mint|Debian,Ubuntu||https://linuxmint.com/|Designed to work out of the box and comes fully equipped with the apps most people need.";; + lmde) INFO="Linux Mint Debian Edition|Debian||https://www.linuxmint.com/download_lmde.php|Aims to be as similar as possible to Linux Mint, but without using Ubuntu. The package base is provided by Debian instead.";; + lubuntu) INFO="Lubuntu|Ubuntu||https://lubuntu.me/|Complete Operating System that ships the essential apps and services for daily use: office applications, PDF reader, image editor, music and video players, etc. Using lightwave lxde/lxqt.";; + mageia) INFO="Mageia|Independent||https://www.mageia.org/|Stable, secure operating system for desktop & server.";; + manjaro) INFO="Manjaro|Arch||https://manjaro.org/|Versatile, free, and open-source Linux operating system designed with a strong focus on safeguarding user privacy and offering extensive control over hardware.";; + mxlinux) INFO="MX Linux|Debian,Antix||https://mxlinux.org/|Designed to combine elegant and efficient desktops with high stability and solid performance.";; + netboot) INFO="netboot.xyz|iPXE||https://netboot.xyz/|Your favorite operating systems in one place.";; + netbsd) INFO="NetBSD|Independent||https://www.netbsd.org/|Free, fast, secure, and highly portable Unix-like Open Source operating system. It is available for a wide range of platforms, from large-scale servers and powerful desktop systems to handheld and embedded devices.";; + nixos) INFO="NixOS|Independent||https://nixos.org/|Linux distribution based on Nix package manager, tool that takes a unique approach to package management and system configuration.";; + macos) INFO="macOS|proprietary||https://www.apple.com/macos/|Work and play on your Mac are even more powerful. Elevate your presence on video calls. Access information in all-new ways. Boost gaming performance. And discover even more ways to personalize your Mac.";; + openbsd) INFO="OpenBSD|Independent||https://www.openbsd.org/|FREE, multi-platform 4.4BSD-based UNIX-like operating system. Our efforts emphasize portability, standardization, correctness, proactive security and integrated cryptography.";; + openindiana) INFO="OpenIndiana|Solaris,OpenSolaris||https://www.openindiana.org/|Community supported illumos-based operating system.";; + opensuse) INFO="openSUSE|Independent||https://www.opensuse.org/|The makers choice for sysadmins, developers and desktop users.";; + oraclelinux) INFO="Oracle Linux|RedHat||https://www.oracle.com/linux/|Linux with everything required to deploy, optimize, and manage applications on-premises, in the cloud, and at the edge.";; + parrotsec) INFO="Parrot Security|Debian|parrot:parrot|https://www.parrotsec.org/|Provides a huge arsenal of tools, utilities and libraries that IT and security professionals can use to test and assess the security of their assets in a reliable, compliant and reproducible way.";; + peppermint) INFO="PeppermintOS|Debian,Devuan||https://peppermintos.com/|Provides a user with the opportunity to build the system that best fits their needs. While at the same time providing a functioning OS with minimum hassle out of the box.";; + popos) INFO="Pop!_OS|Ubuntu||https://pop.system76.com/|Operating system for STEM and creative professionals who use their computer as a tool to discover and create.";; + porteus) INFO="Porteus|Slackware||http://www.porteus.org/|Complete linux operating system that is optimized to run from CD, USB flash drive, hard drive, or other bootable storage media.";; + primtux) INFO="PrimTux|Ubuntu||https://primtux.fr/|Upgrade for obsolete equipment and benefiting the school or educational environment in the spirit of education.";; + reactos) INFO="ReactOS|Independent||https://reactos.org/|Imagine running your favorite Windows applications and drivers in an open-source environment you can trust.";; + rebornos) INFO="RebornOS|Arch||https://rebornos.org/|Aiming to make Arch Linux as user friendly as possible by providing interface solutions to things you normally have to do in a terminal.";; + rockylinux) INFO="Rocky Linux|RedHat||https://rockylinux.org/|Open-source enterprise operating system designed to be 100% bug-for-bug compatible with Red Hat Enterprise Linux®.";; + siduction) INFO="Siduction|Debian||https://siduction.org/|Operating system based on the Linux kernel and the GNU project. In addition, there are applications and libraries from Debian.";; + slackware) INFO="Slackware|Independent||http://www.slackware.com/|Advanced Linux operating system, designed with the twin goals of ease of use and stability as top priorities.";; + slax) INFO="Slax|Debian Slackware||https://www.slax.org/|Compact, fast, and modern Linux operating system that combines sleek design with modular approach. With the ability to run directly from a USB flash drive without the need for installation, Slax is truly portable and fits easily in your pocket.";; + slint) INFO="Slint|Slackware||https://slint.fr/|Slint is an easy-to-use, versatile, blind-friendly Linux distribution for 64-bit computers. Slint is based on Slackware and borrows tools from Salix. Maintainer: Didier Spaier.";; + slitaz) INFO="SliTaz|Independent||https://www.slitaz.org/en/|Simple, fast and low resource Linux OS for servers & desktops.";; + solus) INFO="Solus|Independent||https://getsol.us/|Designed for home computing. Every tweak enables us to deliver a cohesive computing experience.";; + sparkylinux) INFO="SparkyLinux|Debian||https://sparkylinux.org/|Fast, lightweight and fully customizable operating system which offers several versions for different use cases.";; + spirallinux) INFO="Spiral Linux|Debian||https://spirallinux.github.io/|Selection of Linux spins built from Debian GNU/Linux, with a focus on simplicity and out-of-the-box usability across all the major desktop environments.";; + tails) INFO="Tails|Debian||https://tails.net/|Portable operating system that protects against surveillance and censorship.";; + tinycore) INFO="Tiny Core Linux|Independent||http://www.tinycorelinux.net/|Highly modular based system with community build extensions.";; + trisquel) INFO="Trisquel|Debian,Ubuntu||https://trisquel.info/|Fully free operating system for home users, small enterprises and educational centers.";; + truenas-core) INFO="TrueNAS Core|FreeBSD||https://www.truenas.com/truenas-core/|World’s most popular storage OS because it gives you the power to build your own professional-grade storage system to use in a variety of data-intensive applications without any software costs.";; + truenas-scale) INFO="TrueNAS Scale|Debian||https://www.truenas.com/truenas-scale/|Open Source Hyperconverged Infrastructure (HCI) solution. In addition to powerful scale-out storage capabilities, SCALE adds Linux Containers and VMs (KVM) so apps run closer to data.";; + ubuntu) INFO="Ubuntu|Debian||https://ubuntu.com/|Complete desktop Linux operating system, freely available with both community and professional support.";; + ubuntu-budgie) INFO="Ubuntu Budgie|Ubuntu||https://ubuntubudgie.org/|Community developed distribution, integrating the Budgie Desktop Environment with Ubuntu at its core.";; + ubuntucinnamon) INFO="Ubuntu Cinnamon|Ubuntu||https://ubuntucinnamon.org/|Community-driven, featuring Linux Mint’s Cinnamon Desktop with Ubuntu at the core, packed fast and full of features, here is the most traditionally modern desktop you will ever love.";; + ubuntukylin) INFO="Ubuntu Kylin|Ubuntu||https://ubuntukylin.com/|Universal desktop operating system for personal computers, laptops, and embedded devices. It is dedicated to bringing a smarter user experience to users all over the world.";; + ubuntu-mate) INFO="Ubuntu MATE|Ubuntu||https://ubuntu-mate.org/|Stable, easy-to-use operating system with a configurable desktop environment. It is ideal for those who want the most out of their computers and prefer a traditional desktop metaphor. Using Mate desktop.";; + ubuntu-server) INFO="Ubuntu Server|Ubuntu||https://ubuntu.com/server|Brings economic and technical scalability to your datacentre, public or private. Whether you want to deploy an OpenStack cloud, a Kubernetes cluster or a 50,000-node render farm, Ubuntu Server delivers the best value scale-out performance available.";; + ubuntustudio) INFO="Ubuntu Studio|Ubuntu||https://ubuntustudio.org/|Comes preinstalled with a selection of the most common free multimedia applications available, and is configured for best performance for various purposes: Audio, Graphics, Video, Photography and Publishing.";; + ubuntu-unity) INFO="Ubuntu Unity|Ubuntu||https://ubuntuunity.org/|Flavor of Ubuntu featuring the Unity7 desktop environment (the default desktop environment used by Ubuntu from 2010-2017).";; + vanillaos) INFO="Vanilla OS|Debian,Ubuntu||https://vanillaos.org/|Designed to be a reliable and productive operating system for your daily work.";; + void) INFO="Void Linux|Independent|anon:voidlinux|https://voidlinux.org/|General purpose operating system. Its package system allows you to quickly install, update and remove software; software is provided in binary packages or can be built directly from sources.";; + vxlinux) INFO="VX Linux|Void||https://vxlinux.org/|Pre-configured, secure systemd-free Plasma desktop with focus on convenience, performance and simplicity. Based on the excellent Void Linux.";; + whonix) INFO="Whonix|Debian||https://www.whonix.org/|Superior Internet Privacy with Whonix™ As handy as an app - delivering maximum anonymity and security.";; + windows) INFO="Windows|proprietary||https://www.microsoft.com/en-us/windows/|Whether you’re gaming, studying, running a business, or running a household, Windows helps you get it done.";; + windows-server) INFO="Windows Server|proprietary||https://www.microsoft.com/en-us/windows-server/|Platform for building an infrastructure of connected applications, networks, and web services.";; + xerolinux) INFO="XeroLinux|Arch||https://xerolinux.xyz/|Arch-Based Distro, that provides you with an easy way to install Arch and a well optimized, beautifully Customized Plasma Desktop, that you can later shape to suite your needs!";; + xubuntu) INFO="Xubuntu|Ubuntu||https://xubuntu.org/|Elegant and easy to use operating system. Xubuntu comes with Xfce, which is a stable, light and configurable desktop environment.";; + zorin) INFO="Zorin OS|Ubuntu||https://zorin.com/os/|Alternative to Windows and macOS designed to make your computer faster, more powerful, secure, and privacy-respecting.";; + esac + echo "${INFO}" +} + +function pretty_name() { + local SIMPLE_NAME="" + local PRETTY_NAME="" + SIMPLE_NAME="${1}" + PRETTY_NAME=$(os_info ${SIMPLE_NAME} | cut -d'|' -f1) + echo "${PRETTY_NAME}" +} + +function os_basedof() { + local SIMPLE_NAME="" + local BASED="" + SIMPLE_NAME="${1}" + BASED=$(os_info ${SIMPLE_NAME} | cut -d'|' -f2) + echo "${BASED}" +} + +function os_credentials() { + local SIMPLE_NAME="" + local CREDE="" + SIMPLE_NAME="${1}" + CREDE=$(os_info ${SIMPLE_NAME} | cut -d'|' -f3) + echo "${CREDE}" +} + +function os_homepage(){ + local SIMPLE_NAME="" + local HOMEP="" + SIMPLE_NAME="${1}" + HOMEP=$(os_info ${SIMPLE_NAME} | cut -d'|' -f4) + echo "$HOMEP" +} + +function os_about() { + local SIMPLE_NAME="" + local ABOUT="" + SIMPLE_NAME="${1}" + ABOUT=$(os_info ${SIMPLE_NAME} | cut -d'|' -f5) + echo "${ABOUT}" } if [ "${1}" == '--test-iso-url' ] || [ "${1}" == '-t' ]; then @@ -60,82 +205,6 @@ elif [ "${1}" == '--download-iso' ] || [ "${1}" == '-d' ]; then fi fi -function pretty_name() { - local SIMPLE_NAME="" - local 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";; - archcraft) PRETTY_NAME="Archcraft";; - arcolinux) PRETTY_NAME="Arco Linux";; - artixlinux) PRETTY_NAME="Artix Linux";; - atheanos) PRETTY_NAME="Athena OS";; - biglinux) PRETTY_NAME="Big Linux";; - blendos) PRETTY_NAME="BlendOS";; - cachyos) PRETTY_NAME="CachyOS";; - centos-stream) PRETTY_NAME="CentOS Stream";; - chimeralinux) PRETTY_NAME="Chimera Linux";; - crunchbang++) PRETTY_NAME="Crunchbang++";; - dragonflybsd) PRETTY_NAME="DragonFlyBSD";; - easyos) PRETTY_NAME="EasyOS";; - elementary) PRETTY_NAME="elementary OS";; - endeavouros) PRETTY_NAME="EndeavourOS";; - endless) PRETTY_NAME="Endless OS";; - freebsd) PRETTY_NAME="FreeBSD";; - freedos) PRETTY_NAME="FreeDOS";; - garuda) PRETTY_NAME="Garuda Linux";; - ghostbsd) PRETTY_NAME="GhostBSD";; - holoiso) PRETTY_NAME="SteamOS HoloISO";; - kdeneon) PRETTY_NAME="KDE Neon";; - kolibrios) PRETTY_NAME="KolibriOS";; - linuxlite) PRETTY_NAME="Linux Lite";; - linuxmint) PRETTY_NAME="Linux Mint";; - lmde) PRETTY_NAME="Linux Mint Debian Edition";; - mageia) PRETTY_NAME="Mageia";; - mxlinux) PRETTY_NAME="MX Linux";; - netboot) PRETTY_NAME="netboot.xyz";; - netbsd) PRETTY_NAME="NetBSD";; - nitrux) PRETTY_NAME="Nitrux";; - nixos) PRETTY_NAME="NixOS";; - macos) PRETTY_NAME="macOS";; - openbsd) PRETTY_NAME="OpenBSD";; - openindiana) PRETTY_NAME="OpenIndiana";; - opensuse) PRETTY_NAME="openSUSE";; - oraclelinux) PRETTY_NAME="Oracle Linux";; - parrotsec) PRETTY_NAME="Parrot Security";; - peppermint) PRETTY_NAME="PeppermintOS";; - popos) PRETTY_NAME="Pop!_OS";; - primtux) PRETTY_NAME="Primtux";; - reactos) PRETTY_NAME="ReactOS";; - rebornos) PRETTY_NAME="RebornOS";; - rockylinux) PRETTY_NAME="Rocky Linux";; - slint) PRETTY_NAME="Slint";; - slitaz) PRETTY_NAME="SliTaz GNU/Linux";; - sparkylinux) PRETTY_NAME="SparkyLinux";; - tinycore) PRETTY_NAME="Tiny Core Linux";; - truenas-core) PRETTY_NAME="TrueNAS Core";; - truenas-scale) PRETTY_NAME="TrueNAS Scale";; - ubuntu-budgie) PRETTY_NAME="Ubuntu Budgie";; - ubuntucinnamon) PRETTY_NAME="Ubuntu Cinnamon";; - ubuntukylin) PRETTY_NAME="Ubuntu Kylin";; - ubuntu-mate) PRETTY_NAME="Ubuntu MATE";; - ubuntu-server) PRETTY_NAME="Ubuntu Server";; - ubuntustudio) PRETTY_NAME="Ubuntu Studio";; - ubuntu-unity) PRETTY_NAME="Ubuntu Unity";; - vanillaos) PRETTY_NAME="Vanilla OS";; - void) PRETTY_NAME="Void Linux";; - vxlinux) PRETTY_NAME="VX Linux";; - windows-server) PRETTY_NAME="Windows Server";; - xerolinux) PRETTY_NAME="XeroLinux";; - zorin) PRETTY_NAME="Zorin OS";; - *) PRETTY_NAME="${SIMPLE_NAME^}";; - esac - echo "${PRETTY_NAME}" -} - function validate_release() { local DISPLAY_NAME="" local RELEASE_GENERATOR="" @@ -157,9 +226,9 @@ function validate_release() { } function list_json() { - # Reference: https://stackoverflow.com/a/67359273 - list_csv | jq -R 'split(",") as $h|reduce inputs as $in ([]; . += [$in|split(",")|. as $a|reduce range(0,length) as $i ({};.[$h[$i]]=$a[$i])])' - exit 0 + # Reference: https://stackoverflow.com/a/67359273 + list_csv | jq -R 'split(",") as $h|reduce inputs as $in ([]; . += [$in|split(",")|. as $a|reduce range(0,length) as $i ({};.[$h[$i]]=$a[$i])])' + exit 0 } function list_csv() { @@ -223,6 +292,160 @@ function list_csv() { exit 0 } +list_supported() { + # output OS RELEASE EDITION (usefull for straight testing...) + local DL="" + local FUNC + local OPTION + local OS + + for OS in $(os_support); do + case ${OS} in + *ubuntu-server*) FUNC="ubuntu-server";; + *ubuntu*) FUNC="ubuntu";; + *) FUNC="${OS}";; + esac + for RELEASE in $("releases_${FUNC}" | sed -Ee 's/eol-\S+//g' ); do # hide eol releases + # If the OS has an editions_() function, use it. + if [[ $(type -t "editions_${OS}") == function ]]; then + for OPTION in $(editions_"${OS}"); do + echo "${OS} ${RELEASE} ${OPTION}" + done + elif [[ "${OS}" == "windows"* ]]; then + "languages_${OS}" + for OPTION in "${LANGS[@]}"; do + echo "${OS} ${RELEASE} ${OPTION}" + done + else + echo "${OS} ${RELEASE}" + fi + done + done + exit 0 +} + +# output OS RELEASE EDITION (usefull for straight testing...) +list_isos2() { + local show_iso_url="1" + local DIR="/dev/null" + local FUNC + local OPTION + local OS + + echo "OS|Release|Edition|URL" + for OS in $(os_support); do + case ${OS} in + *ubuntu-server*) FUNC="ubuntu-server";; + *ubuntu*) FUNC="ubuntu";; + *) FUNC="${OS}";; + esac + for RELEASE in $("releases_${FUNC}" | sed -Ee 's/eol-\S+//g' ); do # hide eol releases + # If the OS has an editions_() function, use it. + if [[ $(type -t "editions_${OS}") == function ]]; then + for OPTION in $(editions_"${OS}"); do + quickget ${OS} ${RELEASE} ${OPTION} + done + elif [[ "${OS}" == "windows"* ]]; then + "languages_${OS}" + for OPTION in "${LANGS[@]}"; do + get_"${OS}" && web_get + done + else + get_"${OS}" && web_get + fi + done + done + exit 0 +} + +list_isos() { + local show_iso_url="1" + local URL + local FUNC + local OPTION + local OS + + for OS in $(os_support); do + case ${OS} in + *ubuntu-server*) FUNC="ubuntu-server";; + *ubuntu*) FUNC="ubuntu";; + *) FUNC="${OS}";; + esac + for RELEASE in $("releases_${FUNC}" | sed -Ee 's/eol-\S+//g' ); do # hide eol releases + # If the OS has an editions_() function, use it. + if [[ $(type -t "editions_${OS}") == function ]]; then + for OPTION in $(editions_"${OS}"); do + validate_release releases_${OS} + get_${OS} ${OPTION} | cut_1 + done + elif [[ "${OS}" == "windows"* ]]; then + "languages_${OS}" + for OPTION in "${LANGS[@]}"; do + validate_release releases_${OS} + get_${OS} ${OPTION} | cut_1 + done + #TODO NEEDED? + elif [[ "${OS}" == "macos" ]]; then + echo "${OS}|${RELEASE}|${OPTION}|" + else + validate_release releases_${OS} + get_${OS} ${RELEASE} | cut_1 + fi + done + done + exit 0 +} + +test_isos() { + local test_iso_url="1" + local DIR="/dev/null" + local FUNC + local OPTION + local OS + + check_it() { + validate_release releases_${OS} + URL=$(get_${OS} ${OPTION} | cut_1) + GOOD=$(wget -q --spider ${URL} && echo 'OK' || echo 'ERROR!') + if [[ "${GOOD}" == "OK" ]]; then + echo "OK - ${OS},${RELEASE},${OPTION},${URL}" + else + echo "ERROR - ${OS},${RELEASE},${OPTION},${URL}" + fi + } + + for OS in $(os_support); do + case ${OS} in + *ubuntu-server*) FUNC="ubuntu-server";; + *ubuntu*) FUNC="ubuntu";; + *) FUNC="${OS}";; + esac + for RELEASE in $("releases_${FUNC}" | sed -Ee 's/eol-\S+//g' ); do # hide eol releases + # If the OS has an editions_() function, use it. + if [[ $(type -t "editions_${OS}") == function ]]; then + for OPTION in $(editions_"${OS}"); do + check_it + done + elif [[ "${OS}" == "windows"* ]]; then + "languages_${OS}" + for OPTION in "${LANGS[@]}"; do + check_it + done + else + validate_release releases_${OS} + URL=$(get_${OS} ${RELEASE} | cut_1) + GOOD=$(wget -q --spider ${URL} && echo 'OK' || echo 'ERROR!') + if [[ "${GOOD}" == "OK" ]]; then + echo "OK - ${OS},${RELEASE},,${URL}" + else + echo "ERROR - ${OS},${RELEASE},,${URL}" + fi + fi + done + done + exit 0 +} + function os_support() { echo alma \ alpine \ @@ -320,111 +543,13 @@ function os_support() { zorin } -function os_homepages(){ - local SIMPLE_NAME="" - local HOMEPAGE="" - SIMPLE_NAME="${1}" - case ${SIMPLE_NAME} in - alma) HOMEPAGE="https://almalinux.org/";; - alpine) HOMEPAGE="https://alpinelinux.org/";; - android) HOMEPAGE="https://www.android-x86.org/";; - antix) HOMEPAGE="https://antixlinux.com/";; - archlinux) HOMEPAGE="https://archlinux.org/";; - archcraft) HOMEPAGE="https://archcraft.io/";; - arcolinux) HOMEPAGE="https://arcolinux.com/";; - artixlinux) HOMEPAGE="https://artixlinux.org/";; - athenaos) HOMEPAGE="https://athenaos.org/";; - batocera) HOMEPAGE="https://batocera.org/";; - bazzite) HOMEPAGE="https://bazzite.gg/";; - biglinux) HOMEPAGE="https://www.biglinux.com.br/";; - blendos) HOMEPAGE="https://blendos.co/";; - bodhi) HOMEPAGE="https://www.bodhilinux.com/";; - bunsenlabs) HOMEPAGE="https://www.bunsenlabs.org/";; - cachyos) HOMEPAGE="https://cachyos.org/";; - centos-stream) HOMEPAGE="https://www.centos.org/centos-stream/";; - chimeralinux) HOMEPAGE="https://chimera-linux.org/";; - crunchbang++) HOMEPAGE="https://www.crunchbangplusplus.org/";; - debian) HOMEPAGE="https://www.debian.org/";; - deepin) HOMEPAGE="https://www.deepin.org/";; - devuan) HOMEPAGE="https://www.devuan.org/";; - dragonflybsd) HOMEPAGE="https://www.dragonflybsd.org/";; - easyos) HOMEPAGE="https://easyos.org/";; - edubuntu) HOMEPAGE="https://www.edubuntu.org/";; - elementary) HOMEPAGE="https://elementary.io/";; - endeavouros) HOMEPAGE="https://endeavouros.com/";; - endless) HOMEPAGE="https://www.endlessos.org/os";; - fedora) HOMEPAGE="https://www.fedoraproject.org/";; - freebsd) HOMEPAGE="https://www.freebsd.org/";; - freedos) HOMEPAGE="https://freedos.org/";; - garuda) HOMEPAGE="https://garudalinux.org/";; - gentoo) HOMEPAGE="https://www.gentoo.org/";; - ghostbsd) HOMEPAGE="https://www.ghostbsd.org/";; - guix) HOMEPAGE="https://guix.gnu.org/";; - haiku) HOMEPAGE="https://www.haiku-os.org/";; - holoiso) HOMEPAGE="https://github.com/HoloISO/holoiso";; - kali) HOMEPAGE="https://www.kali.org/";; - kdeneon) HOMEPAGE="https://neon.kde.org/";; - kolibrios) HOMEPAGE="http://kolibrios.org/en/";; - kubuntu) HOMEPAGE="https://kubuntu.org/";; - linuxlite) HOMEPAGE="https://www.linuxliteos.com/";; - linuxmint) HOMEPAGE="https://linuxmint.com/";; - lmde) HOMEPAGE="https://www.linuxmint.com/download_lmde.php";; - mageia) HOMEPAGE="https://www.mageia.org/";; - manjaro) HOMEPAGE="https://manjaro.org/";; - mxlinux) HOMEPAGE="https://mxlinux.org/";; - netboot) HOMEPAGE="https://netboot.xyz/";; - netbsd) HOMEPAGE="https://www.netbsd.org/";; - nitrux) HOMEPAGE="https://nxos.org/";; - nixos) HOMEPAGE="https://nixos.org/";; - lubuntu) HOMEPAGE="https://lubuntu.me/";; - macos) HOMEPAGE="https://www.apple.com/macos/";; - openbsd) HOMEPAGE="https://www.openbsd.org/";; - openindiana) HOMEPAGE="https://www.openindiana.org/";; - opensuse) HOMEPAGE="https://www.opensuse.org/";; - oraclelinux) HOMEPAGE="https://www.oracle.com/linux/";; - parrotsec) HOMEPAGE="https://www.parrotsec.org/";; - peppermint) HOMEPAGE="https://peppermintos.com/";; - popos) HOMEPAGE="https://pop.system76.com/";; - porteus) HOMEPAGE="http://www.porteus.org/";; - primtux) HOMEPAGE="https://primtux.fr/";; - reactos) HOMEPAGE="https://reactos.org/";; - rebornos) HOMEPAGE="https://rebornos.org/";; - rockylinux) HOMEPAGE="https://rockylinux.org/";; - siduction) HOMEPAGE="https://siduction.org/";; - slackware) HOMEPAGE="http://www.slackware.com/";; - slax) HOMEPAGE="https://www.slax.org/";; - slint) HOMEPAGE="https://slint.fr/";; - slitaz) HOMEPAGE="https://www.slitaz.org/";; - solus) HOMEPAGE="https://getsol.us/";; - sparkylinux) HOMEPAGE="https://sparkylinux.org/";; - spirallinux) HOMEPAGE="https://spirallinux.github.io/";; - tails) HOMEPAGE="https://tails.net/";; - tinycore) HOMEPAGE="http://www.tinycorelinux.net/";; - trisquel) HOMEPAGE="https://trisquel.info/";; - truenas-core) HOMEPAGE="https://www.truenas.com/truenas-core/";; - truenas-scale) HOMEPAGE="https://www.truenas.com/truenas-scale/";; - ubuntu) HOMEPAGE="https://ubuntu.com/";; - ubuntu-budgie) HOMEPAGE="https://ubuntubudgie.org/";; - ubuntucinnamon) HOMEPAGE="https://ubuntucinnamon.org/";; - ubuntukylin) HOMEPAGE="https://ubuntukylin.com/";; - ubuntu-mate) HOMEPAGE="https://ubuntu-mate.org/";; - ubuntu-server) HOMEPAGE="https://ubuntu.com/server";; - ubuntustudio) HOMEPAGE="https://ubuntustudio.org/";; - ubuntu-unity) HOMEPAGE="https://ubuntuunity.org/";; - vanillaos) HOMEPAGE="https://vanillaos.org/";; - void) HOMEPAGE="https://voidlinux.org/";; - vxlinux) HOMEPAGE="https://vxlinux.org/";; - windows) HOMEPAGE="https://www.microsoft.com/en-us/windows/";; - windows-server) HOMEPAGE="https://www.microsoft.com/en-us/windows-server/";; - xerolinux) HOMEPAGE="https://xerolinux.xyz/";; - xubuntu) HOMEPAGE="https://xubuntu.org/";; - zorin) HOMEPAGE="https://zorin.com/os/";; - esac - echo "${HOMEPAGE}" +# Get string before first whitespace (HASH) +function cut_1() { + cut -d' ' -f1 } function releases_alma() { - echo 8 9 + echo 9 8 } function editions_alma() { @@ -432,30 +557,30 @@ function editions_alma() { } function releases_alpine() { - echo 3.12 3.13 3.14 3.15 3.16 3.17 3.18 latest + echo latest 3.18 3.17 3.16 3.15 3.14 3.13 3.12 } function releases_android() { - echo 7.1 8.1 9.0 + echo 9.0 8.1 7.1 } function editions_android() { - echo x86 x86_64 + echo x86_64 x86 } function releases_antix() { - echo 21 22 23 + echo 23 22 21 } function editions_antix() { - echo net-sysv core-sysv base-sysv full-sysv net-runit core-runit base-runit full-runit + echo net-sysv core-sysv base-sysv full-sysv net-runit core-runit base-runit full-runit } -function releases_archlinux() { +function releases_archcraft() { echo latest } -function releases_archcraft() { +function releases_archlinux() { echo latest } @@ -510,28 +635,21 @@ function releases_athenaos() { wget -q -O- 'https://sourceforge.net/projects/athena-iso/rss?path=/' | grep '.iso/download"' | cut -d'=' -f5 | cut -d'"' -f2 | cut -d'/' -f7 | cut -d'v' -f2 | sed ':a;N;$!ba;s/\n/ /g' } -function releases_bazzite() { - wget -q -O- "https://api.github.com/repos/ublue-os/bazzite/releases" | grep 'download_url' | grep 'sum' | cut -d '/' -f8 | cut -d'v' -f2 | tr '\n' ' ' +function releases_batocera() { + echo latest } -function releases_biglinux() { - echo kde +function releases_bazzite() { + wget -q -O- "https://api.github.com/repos/ublue-os/bazzite/releases" | grep 'download_url' | grep 'sum' | cut -d '/' -f8 | cut -d'v' -f2 | tr '\r\n' ' ' } function releases_blendos() { + local RLIST="" -# Pull the rss feed -wget -q https://sourceforge.net/projects/blendos/rss?path=/ISOs/ -O- | grep -E -o 'https://.*blendOS\.iso.*/tmp/blendos-isos.rss - - local RLIST - RLIST=$(grep -E -o 'https://.*blendOS\.iso.*/tmp/blendos-isos.rss + RLIST=$(grep -E -o 'https://.*blendOS\.iso.* -f9|cut -d\/ -f1) + DEBCURRENT=$(wget -q https://cdimage.debian.org/debian-cd/ -O- | grep '\.[0-9]/'| cut -d\> -f9 | cut -d\/ -f1) # shellcheck disable=SC1001 - local DEBOLD=$(wget -q https://cdimage.debian.org/cdimage/archive/ -O- |grep -e '>[1-9][0-9]\.'|grep -v 'live' | cut -d\> -f9|cut -d\/ -f1 ) + local DEBOLD=$(wget -q https://cdimage.debian.org/cdimage/archive/ -O- | grep -e '>[1-9][0-9]\.' | grep -v 'live' | cut -d\> -f9 | cut -d\/ -f1 ) - echo "${DEBOLD}" "${DEBCURRENT}" + echo "${DEBCURRENT}" # "${DEBOLD}" } function editions_debian() { @@ -584,7 +718,7 @@ function editions_debian() { } function releases_deepin() { - echo 20 20.1 20.2 20.2.1 20.2.2 20.2.3 20.2.4 20.3 20.4 20.5 20.6 20.7 + echo 20.7 20.6 20.5 20.4 20.3 20.2.4 20.2.3 20.2.2 20.2.1 20.2 20.1 20 } function releases_devuan() { @@ -608,7 +742,7 @@ function releases_easyos() { } function releases_elementary() { - echo 7.0 7.1 + echo 7.1 7.0 } function releases_endeavouros() { @@ -617,37 +751,33 @@ function releases_endeavouros() { } function releases_endless() { - echo 5.0.0 + echo 5.0.0 } function editions_endless() { - echo base en fr pt_BR es + echo base en fr pt_BR es } function releases_fedora() { - echo 38 39 -} - -function releases_batocera() { - echo latest + echo 39 38 } function editions_fedora() { - echo Workstation \ - Budgie \ - Cinnamon \ - i3 \ - KDE \ - LXDE \ - LXQt \ - Mate \ - Xfce \ - Silverblue \ - Sericea \ - Kinoite \ - Sway \ - Server \ - Onyx + echo Workstation \ + Budgie \ + Cinnamon \ + i3 \ + KDE \ + LXDE \ + LXQt \ + Mate \ + Xfce \ + Silverblue \ + Sericea \ + Kinoite \ + Sway \ + Server \ + Onyx } function releases_freebsd(){ @@ -660,7 +790,7 @@ function editions_freebsd(){ } function releases_freedos() { - echo 1.2 1.3 + echo 1.3 1.2 } function releases_garuda() { @@ -680,7 +810,7 @@ function editions_gentoo() { } function releases_ghostbsd() { - echo 21.10.16 21.11.24 22.01.12 + echo 22.01.12 21.11.24 21.10.16 } function editions_ghostbsd() { @@ -692,7 +822,7 @@ function releases_guix() { } function releases_haiku() { - echo r1beta3 r1beta4 + echo r1beta4 r1beta3 } function editions_haiku() { @@ -716,11 +846,11 @@ function releases_kolibrios() { } function releases_linuxlite() { - echo 6.0 6.2 6.4 6.6 + echo 6.6 6.4 6.2 6.0 } function releases_linuxmint(){ - echo 20.2 20.3 21 21.1 21.2 + echo 21.2 21.1 21 20.3 20.2 } function editions_linuxmint(){ @@ -735,6 +865,10 @@ function releases_lmde(){ echo 5 } +function releases_macos() { + echo high-sierra mojave catalina big-sur monterey ventura sonoma +} + function releases_mageia(){ echo 8 } @@ -743,22 +877,10 @@ function editions_mageia(){ echo Plasma GNOME Xfce } -function releases_mxlinux(){ - echo 21.3 -} - -function editions_mxlinux(){ - echo Xfce KDE Fluxbox -} - function editions_manjaro(){ echo full minimal } -function releases_macos() { - echo high-sierra mojave catalina big-sur monterey ventura sonoma -} - function releases_manjaro() { echo xfce \ gnome \ @@ -770,8 +892,16 @@ function releases_manjaro() { sway } +function releases_mxlinux(){ + echo 21.3 +} + +function editions_mxlinux(){ + echo Xfce KDE Fluxbox +} + function releases_netboot() { - echo latest + echo latest } function releases_netbsd() { @@ -784,11 +914,11 @@ function releases_nitrux() { } function releases_nixos(){ - echo 21.05 21.11 22.05 22.11 23.05 23.11 + echo 23.11 23.05 22.11 22.05 21.11 21.05 } function editions_nixos(){ - echo gnome plasma5 minimal + echo minimal plasma5 gnome } function releases_openbsd(){ @@ -805,11 +935,19 @@ function editions_openindiana(){ } function releases_opensuse(){ - echo 15.0 15.1 15.2 15.3 15.4 microos tumbleweed + echo 15.4 15.3 15.2 15.1 15.0 microos tumbleweed } function releases_oraclelinux() { - echo 7.7 7.8 7.9 8.4 8.5 8.6 9.0 + echo 9.0 8.6 8.5 8.4 7.9 7.8 7.7 +} + +function releases_parrotsec() { + echo 6.0 5.3 4.11.3 +} + +function editions_parrotsec() { + echo architect home htb security } function releases_parrotsec() { @@ -829,7 +967,7 @@ function editions_peppermint() { } function releases_popos() { - echo 20.04 21.10 22.04 + echo 22.04 21.10 20.04 } function editions_popos() { @@ -837,7 +975,7 @@ function editions_popos() { } function releases_porteus() { - echo 5.0 5.01 + echo 5.01 5.0 } function editions_porteus() { @@ -860,14 +998,8 @@ function releases_rebornos() { echo latest } -function get_rebornos() { - local ISO=$(wget -q -O- "https://meta.cdn.soulharsh007.dev/RebornOS-ISO?format=json" | jq -r ".url") - local HASH=$(wget -q -O- "https://meta.cdn.soulharsh007.dev/RebornOS-ISO?format=json" | jq -r ".md5") - echo "${ISO} ${HASH}" -} - function releases_rockylinux() { - echo 8.3 8.4 8.5 8.6 8.7 9.0 9.1 + echo 9.1 9.0 8.7 8.6 8.5 8.4 8.3 } function editions_rockylinux() { @@ -883,7 +1015,23 @@ function editions_siduction() { } function releases_slackware() { - echo 14.2 15.0 + echo 15.0 14.2 +} + +function releases_slax() { + echo latest +} + +function editions_slax() { + echo debian slackware +} + +function releases_slint() { + echo 15.0 14.2.1 +} + +function releases_slitaz() { + echo preferred core core64 loram core-5in1 preinit } function releases_slax() { @@ -940,7 +1088,7 @@ function editions_tinycore() { } function releases_trisquel() { - echo 10.0.1 11.0 + echo 11.0 10.0.1 } function editions_trisquel() { @@ -948,18 +1096,18 @@ function editions_trisquel() { } function releases_truenas() { - if [[ $OS == truenas ]] ; then - echo "ERROR! The supported TrueNAS OS values are truenas-core or truenas-scale" - exit 1; - fi - } + if [[ $OS == truenas ]] ; then + echo "ERROR! The supported TrueNAS OS values are truenas-core or truenas-scale" + exit 1; + fi +} function releases_truenas-core() { - echo 12.0 13.0 + echo 13.0 12.0 } function releases_truenas-scale() { - echo 22.02 22.12 + echo 22.12 22.02 } function releases_ubuntu() { @@ -978,26 +1126,25 @@ function releases_ubuntu() { done case "${OS}" in - edubuntu|ubuntu-unity|ubuntucinnamon) - echo "${INTERIM_SUPPORT[@]}" daily-live + edubuntu|ubuntu-unity|ubuntucinnamon) + echo ${INTERIM_SUPPORT[@]} daily-live ;; - kubuntu|lubuntu|ubuntukylin|ubuntu-mate|ubuntustudio|xubuntu) + kubuntu|lubuntu|ubuntukylin|ubuntu-mate|ubuntustudio|xubuntu) ## after 14.04 - echo "${LTS_SUPPORT[@]:1}" "${INTERIM_SUPPORT[@]}" daily-live jammy-daily "${EOL_VERSIONS[@]/#/eol-}" + echo ${LTS_SUPPORT[@]:1} ${INTERIM_SUPPORT[@]} daily-live jammy-daily #${EOL_VERSIONS[@]/#/eol-} ;; - ubuntu-budgie) + ubuntu-budgie) #after 16.04 - echo "${LTS_SUPPORT[@]:2}" "${INTERIM_SUPPORT[@]}" daily-live jammy-daily "${EOL_VERSIONS[@]/#/eol-}" + echo ${LTS_SUPPORT[@]:2} ${INTERIM_SUPPORT[@]} daily-live jammy-daily #${EOL_VERSIONS[@]/#/eol-} ;; - ubuntu) - echo "${LTS_SUPPORT[@]}" "${INTERIM_SUPPORT[@]}" daily-live "${EOL_VERSIONS[@]/#/eol-}" + ubuntu) + echo ${LTS_SUPPORT[@]} ${INTERIM_SUPPORT[@]} daily-live #${EOL_VERSIONS[@]/#/eol-} ;; esac } function releases_ubuntu-server() { - mapfile -t ALL_VERSIONS < <(IFS=$'\n' wget -qO- http://releases.ubuntu.com/streams/v1/com.ubuntu.releases:ubuntu-server.json | jq -r '.products[] | select(.arch=="amd64") | .version') - + local ALL_VERSIONS=($(IFS=$'\n' wget -qO- http://releases.ubuntu.com/streams/v1/com.ubuntu.releases:ubuntu-server.json | jq -r '.products[] | select(.arch=="amd64") | .version')) local LTS_SUPPORT=() local INTERIM_SUPPORT=() @@ -1012,8 +1159,7 @@ function releases_ubuntu-server() { break fi done - - echo "${LTS_SUPPORT[@]}" "${INTERIM_SUPPORT[@]}" daily-live + echo ${LTS_SUPPORT[@]} ${INTERIM_SUPPORT[@]} daily-live } function releases_vanillaos() { @@ -1033,28 +1179,28 @@ function releases_vxlinux() { } function releases_windows() { - echo 8 10 10-ltsc 11 + echo 11 10-ltsc 10 8 } function languages_windows() { if [ "${RELEASE}" == 8 ]; then - LANGS=("Arabic" "Brazilian Portuguese" "Bulgarian" "Chinese (Simplified)" "Chinese (Traditional)" "Chinese (Traditional Hong Kong)" \ - "Croatian" "Czech" "Danish" "Dutch" "English (United States)" "English International" "Estonian" "Finnish" "French" "German" "Greek" \ - "Hebrew" "Hungarian" "Italian" "Japanese" "Latvian" "Lithuanian" "Norwegian" "Polish" "Portuguese" "Romanian" "Russian" "Serbian Latin" \ - "Slovak" "Slovenian" "Spanish" "Swedish" "Thai" "Turkish" "Ukrainian") - elif [ "${RELEASE}" == "10-ltsc" ]; then - LANGS=("English (United States)" "English (Great Britain)" "Chinese (Simplified)" "Chinese (Traditional)" \ - "French" "German" "Italian" "Japanese" "Korean" "Portuguese (Brazil)" "Spanish") - else - LANGS=("Arabic" "Brazilian Portuguese" "Bulgarian" "Chinese (Simplified)" "Chinese (Traditional)" "Croatian" "Czech" "Danish" "Dutch" \ - "English (United States)" "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") + LANGS=("Arabic" "Brazilian Portuguese" "Bulgarian" "Chinese (Simplified)" "Chinese (Traditional)" "Chinese (Traditional Hong Kong)" \ + "Croatian" "Czech" "Danish" "Dutch" "English (United States)" "English International" "Estonian" "Finnish" "French" "German" "Greek" \ + "Hebrew" "Hungarian" "Italian" "Japanese" "Latvian" "Lithuanian" "Norwegian" "Polish" "Portuguese" "Romanian" "Russian" "Serbian Latin" \ + "Slovak" "Slovenian" "Spanish" "Swedish" "Thai" "Turkish" "Ukrainian") + elif [ "${RELEASE}" == "10-ltsc" ]; then + LANGS=("English (United States)" "English (Great Britain)" "Chinese (Simplified)" "Chinese (Traditional)" \ + "French" "German" "Italian" "Japanese" "Korean" "Portuguese (Brazil)" "Spanish") + else + LANGS=("Arabic" "Brazilian Portuguese" "Bulgarian" "Chinese (Simplified)" "Chinese (Traditional)" "Croatian" "Czech" "Danish" "Dutch" \ + "English (United States)" "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") fi } function releases_windows-server() { - echo 2012-r2 2016 2019 2022 + echo 2022 2019 2016 2012-r2 } function languages_windows-server() { @@ -1090,8 +1236,8 @@ function check_hash() { 40) hash_algo=sha1sum;; 64) hash_algo=sha256sum;; 128) hash_algo=sha512sum;; - *) echo "WARNING! Can't guess hash algorithm, not checking ${iso} hash." - return;; + *) echo "WARNING! Can't guess hash algorithm, not checking ${iso} hash." + return;; esac echo -n "Checking ${iso} with ${hash_algo}... " @@ -1124,6 +1270,29 @@ function web_get() { fi done +#new-master +# while (( "$#" )); do +# if [[ $1 == --header ]]; then +# HEADERS+=("$1" "$2") +# shift 2 +# else +# shift +# fi +# done +# +# # Test mode for ISO +# if [ "${download_iso}" == 1 ]; then +# DIR="$(pwd)" +# fi +# +# if [ "${DIR}" != "$(pwd)" ] && ! mkdir -p "${DIR}" 2>/dev/null; then +# echo "ERROR! Unable to create directory ${DIR}" +# exit 1 +# fi +# +# if [[ ${OS} != windows && ${OS} != macos && ${OS} != windows-server ]]; then +# echo Downloading $(pretty_name "${OS}") ${RELEASE} ${EDITION:+ $EDITION} from ${URL} +#======= # Test mode for ISO if [ "${show_iso_url}" == 'on' ]; then echo "${URL}" @@ -1138,6 +1307,7 @@ function web_get() { if [ "${DIR}" != "$(pwd)" ] && ! mkdir -p "${DIR}" 2>/dev/null; then echo "ERROR! Unable to create directory ${DIR}" exit 1 +#>>>>>>> upstream -- Current Change fi if [[ ${OS} != windows && ${OS} != macos && ${OS} != windows-server ]]; then @@ -1146,16 +1316,18 @@ function web_get() { if command -v aria2c &>/dev/null; then if ! aria2c --stderr -x16 --continue=true --summary-interval=0 --download-result=hide --console-log-level=error "${URL}" --dir "${DIR}" -o "${FILE}" "${HEADERS[@]}"; then - echo #Necessary as aria2c in suppressed mode does not have new lines - echo "ERROR! Failed to download ${URL} with aria2c. Try running 'quickget' again." - exit 1 + echo #Necessary as aria2c in suppressed mode does not have new lines + echo "ERROR! Failed to download ${URL} with aria2c. Try running 'quickget' again." + exit 1 fi + echo #Necessary as aria2c in suppressed mode does not have new lines elif command -v wget2 &>/dev/null; then if ! wget2 --quiet --continue --tries=3 --read-timeout=10 --force-progress --progress=bar:force:noscroll "${URL}" -O "${DIR}/${FILE}" "${HEADERS[@]}"; then echo "ERROR! Failed to download ${URL} with wget2. Try running 'quickget' again." exit 1 fi + elif ! wget --quiet --continue --tries=3 --read-timeout=10 --show-progress --progress=bar:force:noscroll "${URL}" -O "${DIR}/${FILE}" "${HEADERS[@]}"; then echo "ERROR! Failed to download ${URL} with wget. Try running 'quickget' again." exit 1 @@ -1168,13 +1340,13 @@ function zsync_get() { local OUT="" local URL="${1}" - # Test mode for ISO - if [ "${show_iso_url}" == 'on' ]; then - echo "${URL}" - exit 0 - elif [ "${test_iso_url}" == 'on' ]; then - wget --spider "${URL}" - exit 0 + # Test mode for ISO + if [ "${show_iso_url}" == 1 ]; then + echo "${URL}" + exit 0 + elif [ "${test_iso_url}" == 1 ]; then + wget --spider "${URL}" + exit 0 elif command -v zsync &>/dev/null; then if [ -n "${3}" ]; then OUT="${3}" @@ -1183,8 +1355,8 @@ function zsync_get() { fi if ! mkdir -p "${DIR}" 2>/dev/null; then - echo "ERROR! Unable to create directory ${DIR}" - exit 1 + echo "ERROR! Unable to create directory ${DIR}" + exit 1 fi echo -e Downloading $(pretty_name "${OS}") ${RELEASE} ${EDITION+ ${EDITION}} from ${URL}'\n' @@ -1223,51 +1395,51 @@ function make_vm_config() { IMAGE_FILE="${1}" ISO_FILE="${2}" case "${OS}" in - batocera) - GUEST="batocera" - IMAGE_TYPE="img";; - dragonflybsd) - GUEST="dragonflybsd" - IMAGE_TYPE="iso";; - freebsd|ghostbsd) - GUEST="freebsd" - IMAGE_TYPE="iso";; - haiku) - GUEST="haiku" - IMAGE_TYPE="iso";; - freedos) - GUEST="freedos" - IMAGE_TYPE="iso";; - kolibrios) - GUEST="kolibrios" - IMAGE_TYPE="iso";; - macos) - GUEST="macos" - IMAGE_TYPE="img";; - netbsd) - GUEST="netbsd" - IMAGE_TYPE="iso";; - openbsd) - GUEST="openbsd" - IMAGE_TYPE="iso";; - openindiana) - GUEST="solaris" - IMAGE_TYPE="iso";; - reactos) - GUEST="reactos" - IMAGE_TYPE="iso";; - truenas*) - GUEST="truenas" - IMAGE_TYPE="iso";; - windows) - GUEST="windows" - IMAGE_TYPE="iso";; - windows-server) - GUEST="windows-server" - IMAGE_TYPE="iso";; - *) - GUEST="linux" - IMAGE_TYPE="iso";; + batocera) + GUEST="batocera" + IMAGE_TYPE="img";; + dragonflybsd) + GUEST="dragonflybsd" + IMAGE_TYPE="iso";; + freebsd|ghostbsd) + GUEST="freebsd" + IMAGE_TYPE="iso";; + haiku) + GUEST="haiku" + IMAGE_TYPE="iso";; + freedos) + GUEST="freedos" + IMAGE_TYPE="iso";; + kolibrios) + GUEST="kolibrios" + IMAGE_TYPE="iso";; + macos) + GUEST="macos" + IMAGE_TYPE="img";; + netbsd) + GUEST="netbsd" + IMAGE_TYPE="iso";; + openbsd) + GUEST="openbsd" + IMAGE_TYPE="iso";; + openindiana) + GUEST="solaris" + IMAGE_TYPE="iso";; + reactos) + GUEST="reactos" + IMAGE_TYPE="iso";; + truenas*) + GUEST="truenas" + IMAGE_TYPE="iso";; + windows) + GUEST="windows" + IMAGE_TYPE="iso";; + windows-server) + GUEST="windows-server" + IMAGE_TYPE="iso";; + *) + GUEST="linux" + IMAGE_TYPE="iso";; esac CONF_FILE="${VM_PATH}.conf" @@ -1280,7 +1452,7 @@ guest_os="${GUEST}" disk_img="${VM_PATH}/disk.qcow2" ${IMAGE_TYPE}="${VM_PATH}/${IMAGE_FILE}" EOF - echo "Giving user execute permissions on ${CONF_FILE}," + echo "Giving user execute permissions on ${CONF_FILE}" chmod u+x "${CONF_FILE}" if [ -n "${ISO_FILE}" ]; then echo "fixed_iso=\"${VM_PATH}/${ISO_FILE}\"" >> "${CONF_FILE}" @@ -1321,10 +1493,10 @@ EOF ;; truenas-scale|truenas-core) echo "boot=\"legacy\"" >> "${CONF_FILE}" - # the rest is non-functional - # echo "bootdrive_size=\"5G\"" >> "${CONF_FILE}" # boot drive - # echo "1stdrive_size=\"20G\"" >> "${CONF_FILE}" # for testing - # echo "2nddrive_size=\"20G\"" >> "${CONF_FILE}" # again, for testing + # the rest is non-functional + # echo "bootdrive_size=\"5G\"" >> "${CONF_FILE}" # boot drive + # echo "1stdrive_size=\"20G\"" >> "${CONF_FILE}" # for testing + # echo "2nddrive_size=\"20G\"" >> "${CONF_FILE}" # again, for testing ;; ubuntu-server) # 22.04+ fails on LVM build if disk size is < 10G @@ -1332,15 +1504,15 @@ EOF echo "disk_size=\"10G\"" >> "${CONF_FILE}" echo "ram=\"4G\"" >> "${CONF_FILE}" if [[ "${RELEASE}" == *"22.04"* ]]; then - echo "tpm=\"on\"" >> "${CONF_FILE}" + echo "tpm=\"on\"" >> "${CONF_FILE}" fi ;; vanillaos) - ## Minimum is 50G for abroot, but a 64GB is allocated to give some headroom - echo "disk_size=\"64G\"" >> "${CONF_FILE}" - ;; + ## Minimum is 50G for abroot, but a 64GB is allocated to give some headroom + echo "disk_size=\"64G\"" >> "${CONF_FILE}" + ;; zorin) - case ${EDITION} in + case ${EDITION} in education64|edulite64) echo "disk_size=\"32G\"" >> "${CONF_FILE}";; esac @@ -1360,15 +1532,17 @@ EOF esac if [ "${OS}" == "ubuntu" ] && [[ ${RELEASE} == *"daily"* ]]; then - # Minimum to install lobster testing is 18GB but 32GB are allocated for headroom - echo "disk_size=\"32G\"" >> "${CONF_FILE}" + # Minimum to install lobster testing is 18GB but 32GB are allocated for headroom + echo "disk_size=\"32G\"" >> "${CONF_FILE}" fi + # Enable TPM for Windows 11 if [ "${OS}" == "windows" ] && [ "${RELEASE}" == 11 ] || [ "${OS}" == "windows-server" ] && [ "${RELEASE}" == "2022" ]; then echo "tpm=\"on\"" >> "${CONF_FILE}" echo "secureboot=\"off\"" >> "${CONF_FILE}" fi fi + echo echo "To start your $(pretty_name "${OS}") virtual machine run:" if [ "${OS}" == "slint" ]; then @@ -1431,11 +1605,12 @@ function get_antix() { local EDITION="${1:-}" local HASH="" local ISO="" + local URL_runit="" local URL="https://sourceforge.net/projects/antix-linux/files/Final/antiX-${RELEASE}" case ${RELEASE} in - 21) URL_runit="${URL}/runit-bullseye";; - *) URL_runit="${URL}/runit-antiX-${RELEASE}";; + 21) URL_runit="${URL}/runit-bullseye";; + *) URL_runit="${URL}/runit-antiX-${RELEASE}";; esac case ${EDITION} in @@ -1457,35 +1632,36 @@ function get_antix() { ;; esac - HASH=$(wget -q -O- "${URL}"/README.txt | grep "${ISO}" | cut -d' ' -f1 | head -1) - echo "${URL}/${ISO} ${HASH}" -} - -function get_archlinux() { - local HASH="" - local ISO="" - local URL="https://mirror.rackspace.com/archlinux" - ISO=$(wget -q -O- "https://archlinux.org/releng/releases/json/" | jq -r '.releases[0].iso_url') - HASH=$(wget -q -O- "https://archlinux.org/releng/releases/json/" | jq -r '.releases[0].sha1_sum') + HASH=$(wget -q -O- ${URL}/README.txt | grep "${ISO}" | cut_1 | head -1) echo "${URL}/${ISO} ${HASH}" } function get_archcraft() { local HASH="" local URL="" - local TMPURL="" + # no longer needed? + #local TMPURL="" # Check where the URL redirects using curl. Output to a nonexistent directory so it's not possible to successfully download the image URL=$(curl -Lfs "https://sourceforge.net/projects/archcraft/files/latest/download" -w %{url_effective} -o /this/is/a/nonexistent/directory/$RANDOM/$RANDOM) echo "${URL} ${HASH}" } +function get_archlinux() { + local HASH="" + local ISO="archlinux-x86_64.iso" + local URL="https://mirror.rackspace.com/archlinux/iso/latest" + + HASH=$(wget -q -O- "${URL}/sha256sums.txt" | grep "${ISO}" | cut_1) + echo "${URL}/${ISO} ${HASH}" +} + function get_arcolinux() { local EDITION="${1:-}" local HASH="" local ISO="arcolinux${EDITION:0:1}-${RELEASE}-x86_64.iso" local URL="https://ant.seedhost.eu/arcolinux/iso/${RELEASE}" - HASH=$(wget -q -O- "${URL}/${ISO}.sha1" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha1" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1494,9 +1670,10 @@ function get_artixlinux() { local HASH="" local ISO="" local URL="https://iso.artixlinux.org/iso" - DATE=$(wget -q -O- "${URL}"/sha256sums | cut -d'-' -f4 | head -1) + + DATE=$(wget -q -O- ${URL}/sha256sums | cut -d'-' -f4 | head -1) ISO="artix-${EDITION}-${DATE}-x86_64.iso" - HASH=$(wget -q -O- "${URL}"/sha256sums | grep "${ISO}") + HASH=$(wget -q -O- ${URL}/sha256sums | grep "${ISO}") echo "${URL}/${ISO} ${HASH}" } @@ -1504,40 +1681,41 @@ function get_athenaos() { local HASH="" local URL="" local ISO="" + case ${RELEASE} in - rolling) - ISO="athena-rolling-x86_64.iso" - URL="https://sourceforge.net/projects/athena-iso/files/rolling" - HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut -d' ' -f1) - ;; - *) - ISO="athena-20${RELEASE}-x86_64.iso" - URL="https://sourceforge.net/projects/athena-iso/files/v${RELEASE}" - HASH=$(wget -q -O- 'https://sourceforge.net/projects/athena-iso/rss?path=/' | grep '.iso/download"' | grep "${RELEASE}" | cut -d '=' -f7 | cut -d'>' -f2 | cut -d'<' -f1) - ;; + rolling) + ISO="athena-rolling-x86_64.iso" + URL="https://sourceforge.net/projects/athena-iso/files/rolling" + HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut_1) + ;; + *) + ISO="athena-20${RELEASE}-x86_64.iso" + URL="https://sourceforge.net/projects/athena-iso/files/v${RELEASE}" + HASH=$(wget -q -O- 'https://sourceforge.net/projects/athena-iso/rss?path=/' | grep '.iso/download"' | grep "${RELEASE}" | cut -d '=' -f7 | cut -d'>' -f2 | cut -d'<' -f1) + ;; esac echo "${URL}/${ISO} ${HASH}" } -function get_biglinux() { +function get_batocera() { local HASH="" - local ISO="" - local URL="https://iso.biglinux.com.br/" - ISO=$(grep -Eo 'biglinux_[0-9]{4}(-[0-9]{2}){2}_k[0-9]{2,3}.iso' <(wget -q -O- "${URL}") | sort -u | tail -n2 | head -n1) - HASH=$(curl -s "${URL}""${ISO}".md5 | grep -Eo '[[:alnum:]]{32}') - echo "${URL}${ISO} ${HASH}" + local URL="https://mirrors.o2switch.fr/batocera/x86_64/stable/last" + local ISO="$(curl -sl ${URL}/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)" + + echo "${URL}/${ISO} ${HASH}" } -function get_bunsenlabs() { +function get_bazzite() { local HASH="" - local ISO="beryllium-1-amd64.hybrid.iso" - local URL="https://ddl.bunsenlabs.org/ddl" - HASH=$(wget -q -O- "${URL}/release.sha256.txt" | head -1 | cut -d' ' -f1) + local ISO="" + local URL="https://github.com/ublue-os/bazzite/releases/download/v${RELEASE}" + + ISO=$(wget -q -O- "https://api.github.com/repos/ublue-os/bazzite/releases" | grep 'download_url' | grep 'sum' | cut -d '"' -f4 | cut -d'.' -f1-5 | grep "${RELEASE}" | cut -d'/' -f9) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | grep 'SHA256' | cut -d' ' -f4) echo "${URL}/${ISO} ${HASH}" } function get_blendos() { - local HASH="" local URL="" @@ -1549,42 +1727,14 @@ function get_blendos() { URL=$(grep "${RELEASE}" /tmp/blendos-isos.rss | grep -E -o 'https://.*blendOS\.iso') HASH=$(grep "${RELEASE}" /tmp/blendos-isos.rss | grep -E -o '[[:alnum:]]{32}') # ## fix up variables for path naming - EDITION=${RELEASE%%/*} - RELEASE=${RELEASE##*/} - # For UX maybe show the date of the release - #echo ${RELEASE##*/} "(" $(date -d @${RELEASE##*/}) ")" - # maybe $(date -d @${RELEASE##*/} '+%Y%m%d') - echo "${URL} ${HASH}" -} - -function get_vanillaos() { - # maybe use github api and dynamism for R2.0 but for 22.10 just - # hit their CDN - # - # https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.md5.txt - # https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.sha256.txt - local HASH=$(curl -s "https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.sha256.txt" | cut -d' ' -f1) - local URL="https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.iso" + EDITION=${RELEASE%%/*} + RELEASE=${RELEASE##*/} + # For UX maybe show the date of the release + #echo ${RELEASE##*/} "(" $(date -d @${RELEASE##*/}) ")" + # maybe $(date -d @${RELEASE##*/} '+%Y%m%d') echo "${URL} ${HASH}" } -function get_batocera() { - local HASH="" - local URL="https://mirrors.o2switch.fr/batocera/x86_64/stable/last" - local ISO="$(curl -sl "${URL}"/ | grep -e 'batocera.*img.gz'|cut -d\" -f2)" - echo "${URL}/${ISO} ${HASH}" -} - -function get_bazzite() { - local HASH="" - local ISO="" - local URL="https://github.com/ublue-os/bazzite/releases/download/v${RELEASE}" - - ISO=$(wget -q -O- "https://api.github.com/repos/ublue-os/bazzite/releases" | grep 'download_url' | grep 'sum' | cut -d '"' -f4 | cut -d'.' -f1-5 | grep "${RELEASE}" | cut -d'/' -f9) - HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | grep 'SHA256' | cut -d' ' -f4) - echo "${URL}/${ISO} ${HASH}" -} - function get_bodhi() { local EDITION="${1:-}" local HASH="" @@ -1595,7 +1745,16 @@ function get_bodhi() { standard) ISO="bodhi-${RELEASE}-64.iso";; *) ISO="bodhi-${RELEASE}-64-${EDITION}.iso";; esac - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) + echo "${URL}/${ISO} ${HASH}" +} + +function get_bunsenlabs() { + local HASH="" + local ISO="beryllium-1-amd64.hybrid.iso" + local URL="https://ddl.bunsenlabs.org/ddl" + + HASH=$(wget -q -O- "${URL}/release.sha256.txt" | head -1 | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1603,13 +1762,14 @@ function get_cachyos() { local HASH="" local ISO="cachyos-${EDITION}-linux-${RELEASE}.iso" local URL="https://mirror.cachyos.org/ISO/${EDITION}/${RELEASE}" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) echo "${URL}/${ISO} ${HASH}" } function get_centos-stream() { local HASH="" local ISO="" + case ${RELEASE} in 8) ISO="CentOS-Stream-${RELEASE}-x86_64-latest-${EDITION}.iso" @@ -1622,7 +1782,53 @@ function get_centos-stream() { HASH=$(wget -q -O- "${URL}"/"${ISO}".SHA256SUM | grep "SHA256 (${ISO}" | cut -d' ' -f4) ;; esac + echo "${URL}/${ISO} ${HASH}" +} +function get_chimeralinux() { + local EDITION="${1:-}" + local HASH="" + local DATE="" + local ISO="" + local URL="https://repo.chimera-linux.org/live/${RELEASE}" + + DATE=$(wget -q -O- "${URL}/sha256sums.txt" | head -n1 | cut -d'-' -f5) + ISO="chimera-linux-x86_64-LIVE-${DATE}-${EDITION}.iso" + HASH=$(wget -q -O- "${URL}/sha256sums.txt" | grep 'x86_64-LIVE' | grep "${EDITION}" | cut_1) + echo "${URL}/${ISO} ${HASH}" +} + +function get_crunchbang++() { + local HASH="" + local ISO="" + local URL="" + local URLPART="" + local URLPART2="" + + URLPART="https://github.com/CBPP/cbpp" + case ${RELEASE} in + 8) + URLPART2="releases/download/v1.0-amd64" + ISO="cbpp-1.0-amd64-20150428.iso" + ;; + 9) + URLPART2="9-amd64/releases/download/v9.0" + ISO="cbpp-9.0-amd64-20170621.iso" + ;; + 10) + URLPART2="releases/download/v10" + ISO="cbpp-10.1-amd64-20190713.iso" + ;; + 11) + URLPART2="releases/download/v11.2" + ISO="cbpp-11.2-amd64-20230514.iso" + ;; + 12) + URLPART2="releases/download/v12.0" + ISO="cbpp-12.0-amd64-20230611.iso" + ;; + esac + URL="${URLPART}/${URLPART2}" echo "${URL}/${ISO} ${HASH}" } @@ -1682,9 +1888,9 @@ function get_debian() { # shellcheck disable=SC1001 DEBCURRENT=$(wget -q https://cdimage.debian.org/debian-cd/ -O- |grep '\.[0-9]/'|cut -d\> -f9|cut -d\/ -f1) - case ${RELEASE} in + case ${RELEASE} in "${DEBCURRENT}") URL="https://cdimage.debian.org/debian-cd/${RELEASE}-live/amd64/iso-hybrid";; - *) URL="https://cdimage.debian.org/cdimage/archive/${RELEASE}-live/amd64/iso-hybrid/";; + *) URL="https://cdimage.debian.org/cdimage/archive/${RELEASE}-live/amd64/iso-hybrid";; esac if [ "${EDITION}" == "netinst" ]; then @@ -1693,7 +1899,7 @@ function get_debian() { ISO="${ISO/-live/}" fi - HASH=$(wget -q -O- "${URL}/SHA512SUMS" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/SHA512SUMS" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1706,15 +1912,14 @@ function get_deepin() { # fix iso name if [[ "${RELEASE}" == *"20" ]] ; then - EDITION="1003" - ISO="deepin-desktop-community-${EDITION}-amd64.iso" + EDITION="1003" + ISO="deepin-desktop-community-${EDITION}-amd64.iso" elif [[ "${RELEASE}" == *"20.1" ]]; then - EDITION="1010" - ISO="deepin-desktop-community-${EDITION}-amd64.iso" + EDITION="1010" + ISO="deepin-desktop-community-${EDITION}-amd64.iso" fi - HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep "${ISO}" | cut -d' ' -f1) - + HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep "${ISO}" | cut_1) #echo "${URL}/${ISO} ${HASH}" web_get "${URL}/${ISO}" "${VM_PATH}" check_hash "${ISO}" "${HASH}" @@ -1731,7 +1936,7 @@ function get_devuan() { chimaera) ISO="devuan_${RELEASE}_4.0.2_amd64_desktop-live.iso";; daedalus) ISO="devuan_${RELEASE}_5.0.0_amd64_desktop-live.iso";; esac - HASH=$(wget -q -O- "${URL}/SHASUMS.txt" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/SHASUMS.txt" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1784,6 +1989,7 @@ function get_endless() { #https://d1anzknqnc1kmb.cloudfront.net/eos-image-keyring.gpg # (4096R: CB50 0F7B C923 3FAD 32B4 E720 9E0C 1250 587A 279C) local FILE_TS="" + # https://support.endlessos.org/en/installation/direct-download gives the info but computes the URLS in js # so parsing out the useful info is not happening tonight # Endless edition names are "base" for the small minimal one or the Language for the large full release @@ -1799,12 +2005,10 @@ function get_endless() { FILE_TS="230127-212646";; pt_BR) FILE_TS="230127-220328";; - esac - - URL="https://images-dl.endlessm.com/release/${RELEASE}/eos-amd64-amd64/${EDITION}" - ISO="eos-eos${RELEASE:0:3}-amd64-amd64.${FILE_TS}.${EDITION}.iso" - - echo "${URL}/${ISO}" + esac + URL="https://images-dl.endlessm.com/release/${RELEASE}/eos-amd64-amd64/${EDITION}" + ISO="eos-eos${RELEASE:0:3}-amd64-amd64.${FILE_TS}.${EDITION}.iso" + echo "${URL}/${ISO}" } function get_fedora() { @@ -1842,16 +2046,15 @@ function get_freedos() { local URL="http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/${RELEASE}/official" case ${RELEASE} in - 1.2) - ISO="FD12CD.iso" - HASH=$(wget -q -O- "${URL}/FD12.sha" | grep "${ISO}" | cut -d' ' -f1) - ;; - 1.3) - ISO="FD13-LiveCD.zip" - HASH=$(wget -q -O- "${URL}/verify.txt" | grep -A 8 "sha256sum" | grep "${ISO}" | cut -d' ' -f1) - ;; + 1.2) + ISO="FD12CD.iso" + HASH=$(wget -q -O- "${URL}/FD12.sha" | grep "${ISO}" | cut_1) + ;; + 1.3) + ISO="FD13-LiveCD.zip" + HASH=$(wget -q -O- "${URL}/verify.txt" | grep -A 8 "sha256sum" | grep "${ISO}" | cut_1) + ;; esac - echo "${URL}/${ISO} ${HASH}" } @@ -1862,8 +2065,7 @@ function get_garuda() { local URL="https://iso.builds.garudalinux.org/iso/latest/garuda" ISO=${EDITION}/latest.iso - - HASH="$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1)" + HASH="$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1)" echo "${URL}/${ISO} ${HASH}" } @@ -1923,7 +2125,7 @@ function get_holoiso() { local ISO=$(wget -q -O- "https://api.github.com/repos/HoloISO/holoiso/releases" | sed 's/ /\n/g' | grep "HoloISO_${RELEASES}" | cut -d'\' -f1 | cut -d'/' -f4) local URL="https://cd2.holoiso.ru.eu.org" # Can't find hash - #HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | cut -d' ' -f1) + #HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | cut_1) echo "${URL}/${ISO} #${HASH}" } @@ -1933,7 +2135,7 @@ function get_kali() { local URL="https://cdimage.kali.org/${RELEASE}" ISO=$(wget -q -O- "${URL}/?C=M;O=D" | grep -o ">kali-linux-.*-installer-amd64.iso" | head -n 1 | cut -c 2-) - HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep -v torrent | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/SHA256SUMS" | grep -v torrent | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1943,7 +2145,7 @@ function get_kdeneon() { local URL="https://files.kde.org/neon/images/${RELEASE}/current" ISO=$(wget -q -O- "${URL}/neon-${RELEASE}-current.sha256sum" | cut -d' ' -f3-) - HASH=$(wget -q -O- "${URL}/neon-${RELEASE}-current.sha256sum" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/neon-${RELEASE}-current.sha256sum" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1959,7 +2161,7 @@ function get_linuxlite() { local ISO="linux-lite-${RELEASE}-64bit.iso" local URL="https://sourceforge.net/projects/linux-lite/files/${RELEASE}" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1969,7 +2171,7 @@ function get_linuxmint() { local ISO="linuxmint-${RELEASE}-${EDITION}-64bit.iso" local URL="https://mirror.bytemark.co.uk/linuxmint/stable/${RELEASE}" - HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -1979,7 +2181,7 @@ function get_lmde() { local ISO="lmde-${RELEASE}-${EDITION}-64bit.iso" local URL="https://mirror.bytemark.co.uk/linuxmint/debian" - HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2001,43 +2203,43 @@ function get_macos() { local OS_TYPE="default" case ${RELEASE} in - lion) #10.7 - BOARD_ID="Mac-2E6FAB96566FE58C" - MLB="00000000000F25Y00";; - mountainlion) #10.8 - BOARD_ID="Mac-7DF2A3B5E5D671ED" - MLB="00000000000F65100";; - mavericks) #10.9 - BOARD_ID="Mac-F60DEB81FF30ACF6" - MLB="00000000000FNN100";; - yosemite) #10.10 - BOARD_ID="Mac-E43C1C25D4880AD6" - MLB="00000000000GDVW00";; - elcapitan) #10.11 - BOARD_ID="Mac-FFE5EF870D7BA81A" - MLB="00000000000GQRX00";; - sierra) #10.12 - BOARD_ID="Mac-77F17D7DA9285301" - MLB="00000000000J0DX00";; - high-sierra) #10.13 - BOARD_ID="Mac-BE088AF8C5EB4FA2" - MLB="00000000000J80300";; - mojave) #10.14 - BOARD_ID="Mac-7BA5B2DFE22DDD8C" - MLB="00000000000KXPG00";; - catalina) #10.15 - BOARD_ID="Mac-00BE6ED71E35EB86";; - big-sur) #11 - BOARD_ID="Mac-42FD25EABCABB274";; - monterey) #12 - BOARD_ID="Mac-E43C1C25D4880AD6";; - ventura) #13 - BOARD_ID="Mac-BE088AF8C5EB4FA2";; - sonoma) - BOARD_ID="Mac-53FDB3D8DB8CA971";; - *) echo "ERROR! Unknown release: ${RELEASE}" - releases_macos - exit 1;; + lion) #10.7 + BOARD_ID="Mac-2E6FAB96566FE58C" + MLB="00000000000F25Y00";; + mountainlion) #10.8 + BOARD_ID="Mac-7DF2A3B5E5D671ED" + MLB="00000000000F65100";; + mavericks) #10.9 + BOARD_ID="Mac-F60DEB81FF30ACF6" + MLB="00000000000FNN100";; + yosemite) #10.10 + BOARD_ID="Mac-E43C1C25D4880AD6" + MLB="00000000000GDVW00";; + elcapitan) #10.11 + BOARD_ID="Mac-FFE5EF870D7BA81A" + MLB="00000000000GQRX00";; + sierra) #10.12 + BOARD_ID="Mac-77F17D7DA9285301" + MLB="00000000000J0DX00";; + high-sierra) #10.13 + BOARD_ID="Mac-BE088AF8C5EB4FA2" + MLB="00000000000J80300";; + mojave) #10.14 + BOARD_ID="Mac-7BA5B2DFE22DDD8C" + MLB="00000000000KXPG00";; + catalina) #10.15 + BOARD_ID="Mac-00BE6ED71E35EB86";; + big-sur) #11 + BOARD_ID="Mac-42FD25EABCABB274";; + monterey) #12 + BOARD_ID="Mac-E43C1C25D4880AD6";; + ventura) #13 + BOARD_ID="Mac-BE088AF8C5EB4FA2";; + sonoma) + BOARD_ID="Mac-53FDB3D8DB8CA971";; + *) echo "ERROR! Unknown release: ${RELEASE}" + releases_macos + exit 1;; esac CWD="$(dirname "${0}")" @@ -2051,7 +2253,7 @@ function get_macos() { fi if [ -z "${CHUNKCHECK}" ]; then - read -p "ERROR! Can not find chunkcheck. Will not be able to verify image. Proceed anyways?" skipVerification + read -p "ERROR! Can not find chunkcheck. Will not be able to verify image. Proceed anyway?" skipVerification if [ "${skipVerification,,}" != "y" ] && [ "${skipVerification,,}" != "yes" ]; then exit 1 fi @@ -2071,14 +2273,14 @@ function get_macos() { local chunkListLink=$(echo "$info" | grep 'oscdn' | grep 'chunklist') local chunkListSession=$(echo "$info" | grep 'expires' | grep 'chunklist') - if [ "${show_iso_url}" == 'on' ]; then - echo -e "Recovery URL (inaccessible through normal browser):\n${downloadLink}\nChunklist (used for verifying the Recovery Image):\n${chunkListLink}\nFirmware URLs:\n${OpenCore_qcow2}\n${OVMF_CODE}\n${OVMF_VARS}" - exit 0 - elif [ "${test_iso_url}" == 'on' ]; then + if [ "${show_iso_url}" == 1 ]; then + echo -e "Recovery URL (inaccessible through normal browser):\n${downloadLink}\nChunklist (used for verifying the Recovery Image):\n${chunkListLink}\nFirmware URLs:\n${OpenCore_qcow2}\n${OVMF_CODE}\n${OVMF_VARS}" + exit 0 + elif [ "${test_iso_url}" == 1 ]; then wget --spider --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${downloadSession}" "${downloadLink}" wget --spider --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${chunkListSession}" "${chunkListLink}" - exit 0 - elif [ "${download_iso}" == 'on' ]; then + exit 0 + elif [ "${download_iso}" == 1 ]; then echo "Downloading macOS ${RELEASE} from ${downloadLink}" web_get "${downloadLink}" "${VM_PATH}" RecoveryImage.dmg --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${downloadSession}" curl --progress-bar "${chunkListLink}" -o RecoveryImage.chunklist --header "Host: oscdn.apple.com" --header "Connection: close" --header "User-Agent: InternetRecovery/1.0" --header "Cookie: AssetToken=${chunkListSession}" @@ -2121,7 +2323,7 @@ function get_macos() { function get_mageia() { local EDITION="${1:-}" local ISO=$(wget -q https://www.mageia.org/en/downloads/get/?q="Mageia-${RELEASE}-Live-${EDITION}-x86_64.iso" -O- | grep 'click here'| grep -o 'href=.*\.iso'|cut -d\" -f2) - local HASH=$(wget -q -O- "${ISO}.sha512" | cut -d' ' -f1) + local HASH=$(wget -q -O- "${ISO}.sha512" | cut_1) echo "${ISO} ${HASH}" } @@ -2148,8 +2350,7 @@ function get_manjaro() { else URL=$(echo "${MANIFEST}" | jq -r '.[] | select(.name|test("^manjaro-sway-.*[.]iso$")) | select(.name|contains("unstable")|not) | .url') fi - - HASH=$(wget -qO- "${URL}.sha512" | cut -d' ' -f1) + HASH=$(wget -qO- "${URL}.sha512" | cut_1) echo "${URL} ${HASH}" } @@ -2164,7 +2365,7 @@ function get_mxlinux() { KDE) ISO="MX-${RELEASE}_KDE_x64.iso";; Fluxbox) ISO="MX-${RELEASE}_fluxbox_x64.iso";; esac - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2172,7 +2373,7 @@ function get_netboot() { local ISO="netboot.xyz.iso" local HASH="" local URL="https://boot.netboot.xyz/ipxe" - HASH=$(wget -q -O- "${URL}/netboot.xyz-sha256-checksums.txt" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/netboot.xyz-sha256-checksums.txt" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2202,7 +2403,7 @@ function get_nixos() { local HASH="" local ISO="latest-nixos-${EDITION}-x86_64-linux.iso" local URL="https://channels.nixos.org/nixos-${RELEASE}" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2218,11 +2419,13 @@ function get_openindiana(){ local HASH="" local ISO="" local URL="" + URL="https://dlc.openindiana.org/isos/hipster/${RELEASE}" ISO="OI-hipster-${EDITION}-${RELEASE}.iso" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" |cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" |cut_1) echo "${URL}/${ISO} ${HASH}" } + function get_opensuse() { local HASH="" local ISO="" @@ -2241,7 +2444,7 @@ function get_opensuse() { ISO="openSUSE-Leap-${RELEASE}-DVD-x86_64-Current.iso" URL="https://download.opensuse.org/distribution/leap/${RELEASE}/iso" fi - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" |awk '{if(NR==4) print $0}'|cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" |awk '{if(NR==4) print $0}'|cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2256,7 +2459,7 @@ function get_oraclelinux() { 7) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64-dvd.iso";; *) ISO="OracleLinux-R${VER_MAJ}-U${VER_MIN}-x86_64-dvd.iso";; esac - HASH=$(wget -q -O- "https://linux.oracle.com/security/gpg/checksum/OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64.checksum" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "https://linux.oracle.com/security/gpg/checksum/OracleLinux-R${VER_MAJ}-U${VER_MIN}-Server-x86_64.checksum" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2268,7 +2471,7 @@ function get_parrotsec() { ISO="Parrot-${EDITION}-${RELEASE}_amd64.iso" URL="https://download.parrot.sh/parrot/iso/${RELEASE}" - HASH="$(wget -q -O- "${URL}"/signed-hashes.txt | grep "${ISO}" | cut -d' ' -f1)" + HASH="$(wget -q -O- "${URL}"/signed-hashes.txt | grep "${ISO}" | cut_1)" echo "${URL}/${ISO}" "${HASH}" } @@ -2292,8 +2495,7 @@ function get_peppermint() { URL="${URL}/Gnome_FlashBack" ;; esac - - HASH=$(wget -q -O- "${URL}/${ISO}-sha512.checksum" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}-sha512.checksum" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2309,6 +2511,7 @@ function get_popos() { function get_porteus() { local EDITION="${1:-}" + local edition="" local HASH="" local ISO="" local URL="" @@ -2316,7 +2519,18 @@ function get_porteus() { edition="${EDITION,,}" ISO="Porteus-${edition}-v${RELEASE}-x86_64.iso" URL="https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v${RELEASE}" - HASH=$(wget -q -O- "${URL}/sha256sums.txt" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/sha256sums.txt" | grep "${ISO}" | cut_1) + echo "${URL}/${ISO} ${HASH}" +} + +function get_primtux() { + local HASH="" + local URL="" + local ISO="" + + ISO="PrimTux${RELEASE}-amd64-${EDITION}.iso" + URL="https://sourceforge.net/projects/primtux/files/Distribution" + HASH=$(wget -q -O- "${URL}/${ISO}.md5" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2334,17 +2548,26 @@ function get_primtux() { function get_reactos() { local HASH="" local URL="" - local TMPURL="" + # no longer needed? + #local TMPURL="" URL=$(curl -Lfs "https://sourceforge.net/projects/reactos/files/latest/download" -w %{url_effective} -o /this/is/a/nonexistent/directory/$RANDOM/$RANDOM) echo "${URL} ${HASH}" } +function get_rebornos() { + local ISO="" + local HASH="" + ISO=$(wget -q -O- "https://meta.cdn.soulharsh007.dev/RebornOS-ISO?format=json" | jq -r ".url") + HASH=$(wget -q -O- "https://meta.cdn.soulharsh007.dev/RebornOS-ISO?format=json" | jq -r ".md5") + echo "${ISO} ${HASH}" +} + function get_rockylinux() { local EDITION="${1:-}" if [[ "${RELEASE}" =~ ^8. ]] && [[ "${EDITION}" == "dvd" ]] then - EDITION="dvd1" + EDITION="dvd1" fi local HASH="" local ISO="Rocky-${RELEASE}-x86_64-${EDITION}.iso" @@ -2364,8 +2587,9 @@ function get_siduction() { local DATE="" local ISO="" local URL="https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/${EDITION}" + DATE=$(wget -q -O- "${URL}"| grep .iso.md5 | cut -d'-' -f6 | cut -d'.' -f1) - HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut_1) ISO="siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-${EDITION}-amd64-${DATE}.iso" echo "${URL}/${ISO} ${HASH}" } @@ -2374,7 +2598,7 @@ function get_slackware() { local HASH="" local ISO="slackware64-${RELEASE}-install-dvd.iso" local URL="https://slackware.nl/slackware/slackware-iso/slackware64-${RELEASE}-iso" - HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2383,16 +2607,17 @@ function get_slax() { local ISO="" local URL="" - case ${EDITION} in - debian) URL="https://ftp.fi.muni.cz/pub/linux/slax/Slax-12.x" - ISO=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f3 | tail -n1) - HASH=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f1 | tail -n1) - ;; - slackware) URL="https://ftp.fi.muni.cz/pub/linux/slax/Slax-15.x" - ISO=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f3 | tail -n1) - HASH=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f1 | tail -n1) - ;; + debian) + URL="https://ftp.fi.muni.cz/pub/linux/slax/Slax-12.x" + ISO=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f3 | tail -n1) + HASH=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut_1 | tail -n1) + ;; + slackware) + URL="https://ftp.fi.muni.cz/pub/linux/slax/Slax-15.x" + ISO=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut -d' ' -f3 | tail -n1) + HASH=$(wget -q -O- "${URL}/md5.txt" | grep '64bit-' | cut_1 | tail -n1) + ;; esac echo "${URL}/${ISO} ${HASH}" } @@ -2402,11 +2627,12 @@ function get_slint() { local ISO="" local URL="" - # Change to latest if needed - ISO="slint64-15.0-5.iso" + case ${RELEASE} in + 14.2.1) ISO="slint64-14.2.1.4.iso";; + 15.0) ISO="slint64-15.0-5.iso";; + esac URL="https://slackware.uk/slint/x86_64/slint-${RELEASE}/iso" - - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f4) + HASH=$(wget -q -O- "${URL}"/${ISO}.sha256 | cut -d' ' -f4) echo "${URL}/${ISO}" "${HASH}" } @@ -2417,10 +2643,9 @@ function get_slitaz() { case ${RELEASE} in preferred) ISO="slitaz-rolling";; - *) ISO="slitaz-rolling-${RELEASE}";; + *) ISO="slitaz-rolling-${RELEASE}";; esac - - HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.md5" | cut_1) echo "${URL}/${ISO}.iso ${HASH}" } @@ -2430,7 +2655,7 @@ function get_solus() { local ISO="Solus-${RELEASE}-${EDITION}.iso" local URL="https://mirrors.rit.edu/solus/images/${RELEASE}" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256sum" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2444,10 +2669,9 @@ function get_sparkylinux() { case ${EDITION} in minimalcli) URL="https://sourceforge.net/projects/sparkylinux/files/cli";; minimalgui) URL="https://sourceforge.net/projects/sparkylinux/files/base";; - *) URL="https://sourceforge.net/projects/sparkylinux/files/${EDITION}";; + *) URL="https://sourceforge.net/projects/sparkylinux/files/${EDITION}";; esac - - HASH=$(wget -q -O- "${URL}"/"${ISO}".allsums.txt | head -2 | grep 'iso' | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.allsums.txt" | head -2 | grep 'iso' | cut_1) echo "${URL}/${ISO}" "${HASH}" } @@ -2484,7 +2708,7 @@ function get_tinycore() { URL="http://www.tinycorelinux.net/14.x/x86_64/release" fi - HASH=$(wget -q -O- "${URL}/${ISO}.md5.txt" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.md5.txt" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2495,40 +2719,38 @@ function get_trisquel() { local URL="https://mirrors.ocf.berkeley.edu/trisquel-images" case ${EDITION} in - mate) ISO="trisquel_${RELEASE}_amd64.iso";; - lxde) ISO="trisquel-mini_${RELEASE}_amd64.iso";; - kde) ISO="triskel_${RELEASE}_amd64.iso";; - sugar) ISO="trisquel-sugar_${RELEASE}_amd64.iso";; + mate) ISO="trisquel_${RELEASE}_amd64.iso";; + lxde) ISO="trisquel-mini_${RELEASE}_amd64.iso";; + kde) ISO="triskel_${RELEASE}_amd64.iso";; + sugar) ISO="trisquel-sugar_${RELEASE}_amd64.iso";; esac - HASH=$(wget -q -O- "${URL}/${ISO}.sha1" | grep "${ISO}" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha1" | grep "${ISO}" | cut_1) echo "${URL}/${ISO} ${HASH}" } function get_truenas-scale() { + local HASH="" local ISO="" local URL="" - local DLINFO="https://www.truenas.com/download-truenas-scale/" - URL=$(wget -q "${DLINFO}" -O- | grep -o "\"https://.*${RELEASE}.*\.iso\""|cut -d\" -f2) - HASH=$(wget -q "${URL}".sha256 -O- | cut -d' ' -f1 ) - + URL=$(wget -q ${DLINFO} -O- | grep -o "\"https://.*${RELEASE}.*\.iso\""|cut -d\" -f2) + HASH=$(wget -q "${URL}.sha256" -O- | cut_1 ) echo "${URL} ${HASH}" } function get_truenas-core() { + local HASH="" local ISO="" local URL="" - local DLINFO="https://www.truenas.com/download-truenas-core/" - URL=$(wget -q "${DLINFO}" -O- | grep -o "\"https://.*${RELEASE}.*\.iso\""|cut -d\" -f2) - HASH=$(wget -q "${URL}".sha256 -O- | cut -d' ' -f1) + URL=$(wget -q ${DLINFO} -O- | grep -o "\"https://.*${RELEASE}.*\.iso\""|cut -d\" -f2) + HASH=$(wget -q ${URL}.sha256 -O- | cut_1) echo "${URL} ${HASH}" } function get_ubuntu-server() { - local HASH="" local ISO="" local URL="" @@ -2543,12 +2765,12 @@ function get_ubuntu-server() { if wget -q --spider "${URL}/SHA256SUMS"; then DATA=$(wget -qO- "${URL}/SHA256SUMS" | grep 'live-server' | grep amd64 | grep iso) - ISO=$(cut -d'*' -f2 <<<"${DATA}") - HASH=$(cut -d' ' -f1 <<<"${DATA}") + ISO=$(cut -d'*' -f2 <<<${DATA}) + HASH=$(cut_1 <<<${DATA}) else DATA=$(wget -qO- "${URL}/MD5SUMS" | grep 'live-server' | grep amd64 | grep iso) - ISO=$(cut -d' ' -f3 <<<"${DATA}") - HASH=$(cut -d' ' -f1 <<<"${DATA}") + ISO=$(cut -d' ' -f3 <<<${DATA}) + HASH=$(cut_1 <<<${DATA}) fi if [ -z "$ISO" ] || [ -z "$HASH" ]; then @@ -2599,12 +2821,12 @@ function get_ubuntu() { if wget -q --spider "${URL}/SHA256SUMS"; then DATA=$(wget -qO- "${URL}/SHA256SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | grep -v "+mac") - ISO=$(cut -d'*' -f2 <<<"${DATA}" | sed '1q;d') - HASH=$(cut -d' ' -f1 <<<"${DATA}" | sed '1q;d') + ISO=$(cut -d'*' -f2 <<<${DATA} | sed '1q;d') + HASH=$(cut_1 <<<${DATA} | sed '1q;d') else DATA=$(wget -qO- "${URL}/MD5SUMS" | grep 'desktop\|dvd\|install' | grep amd64 | grep iso | grep -v "+mac") - ISO=$(cut -d'*' -f2 <<<"${DATA}") - HASH=$(cut -d' ' -f1 <<<"${DATA}") + ISO=$(cut -d'*' -f2 <<<${DATA}) + HASH=$(cut_1 <<<${DATA}) fi if [ -z "$ISO" ] || [ -z "$HASH" ]; then @@ -2625,6 +2847,18 @@ function get_ubuntu() { fi } +function get_vanillaos() { + # maybe use github api and dynamism for R2.0 but for 22.10 just + # hit their CDN + # + # https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.md5.txt + # https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.sha256.txt + local HASH=$(curl -s "https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.sha256.txt" | cut_1) + local URL="https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.iso" + + echo "${URL} ${HASH}" +} + function get_void() { local DATE="" local EDITION="${1:-}" @@ -2634,10 +2868,10 @@ function get_void() { DATE=$(wget -q -O- "${URL}/sha256sum.txt" | head -n1 | cut -d'.' -f1 | cut -d'-' -f4) case ${EDITION} in - glibc) ISO="void-live-x86_64-${DATE}-base.iso";; - musl) ISO="void-live-x86_64-musl-${DATE}-base.iso";; - xfce-glibc) ISO="void-live-x86_64-${DATE}-xfce.iso";; - xfce-musl) ISO="void-live-x86_64-musl-${DATE}-xfce.iso";; + glibc) ISO="void-live-x86_64-${DATE}-base.iso";; + musl) ISO="void-live-x86_64-musl-${DATE}-base.iso";; + xfce-glibc) ISO="void-live-x86_64-${DATE}-xfce.iso";; + xfce-musl) ISO="void-live-x86_64-musl-${DATE}-xfce.iso";; esac HASH="$(wget -q -O- "${URL}/sha256sum.txt" | grep "${ISO}" | cut -d' ' -f4)" echo "${URL}/${ISO} ${HASH}" @@ -2658,7 +2892,7 @@ function get_xerolinux() { local ISO="xerolinux-2022.12-x86_64.iso" local URL="https://sourceforge.net/projects/xerolinux/files/Releases" - HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut -d' ' -f1) + HASH=$(wget -q -O- "${URL}/${ISO}.sha256" | cut_1) echo "${URL}/${ISO} ${HASH}" } @@ -2984,18 +3218,18 @@ handle_curl_error() { 22) echo "Microsoft servers returned failing HTTP status code!" ;; - # POSIX defines exit statuses 1-125 as usable by us - # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 - $((error_code <= 125))) - # Must be some other server error (possibly with this specific request/file) - # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and HTTP(S) request, using only the curl features we're using, and a sane build + # POSIX defines exit statuses 1-125 as usable by us + # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 + $((error_code <= 125))) + # Must be some other server error (possibly with this specific request/file) + # This is when accounting for all possible errors in the curl manual assuming a correctly formed curl command and HTTP(S) request, using only the curl features we're using, and a sane build echo "Server returned an error status!" ;; - 126 | 127) - echo "Curl command not found! Please install curl and try again. Exiting..." + 126 | 127) + echo "Curl command not found! Please install curl and try again. Exiting..." return "$fatal_error_action" ;; - # Exit statuses are undefined by POSIX beyond this point + # Exit statuses are undefined by POSIX beyond this point *) case "$(kill -l "$error_code")" in # Signals defined to exist by POSIX: @@ -3011,9 +3245,8 @@ handle_curl_error() { *) echo "Curl terminated due to a fatal signal!" ;; - esac + esac esac - return 1 } @@ -3032,59 +3265,58 @@ function download_windows-server() { local CULTURE="" local COUNTRY="" local PRETTY_RELEASE="" - + case "$RELEASE" in - "10-ltsc") PRETTY_RELEASE="10 LTSC";; - "2012-r2") PRETTY_RELEASE="2012 R2";; - *) PRETTY_RELEASE="$RELEASE";; + "10-ltsc") PRETTY_RELEASE="10 LTSC";; + "2012-r2") PRETTY_RELEASE="2012 R2";; + *) PRETTY_RELEASE="$RELEASE";; esac - case "$LANG" in - "English (Great Britain)") - CULTURE="en-gb" - COUNTRY="GB";; - "Chinese (Simplified)") - CULTURE="zh-cn" - COUNTRY="CN";; - "Chinese (Traditional)") - CULTURE="zh-tw" - COUNTRY="TW";; - "French") - CULTURE="fr-fr" - COUNTRY="FR";; - "German") - CULTURE="de-de" - COUNTRY="DE";; - "Italian") - CULTURE="it-it" - COUNTRY="IT";; - "Japanese") - CULTURE="ja-jp" - COUNTRY="JP";; - "Korean") - CULTURE="ko-kr" - COUNTRY="KR";; - "Portuguese (Brazil)") - CULTURE="pt-br" - COUNTRY="BR";; - "Spanish") - CULTURE="es-es" - COUNTRY="ES";; - "Russian") - CULTURE="ru-ru" - COUNTRY="RU";; - *) - CULTURE="en-us" - COUNTRY="US";; + "English (Great Britain)") + CULTURE="en-gb" + COUNTRY="GB";; + "Chinese (Simplified)") + CULTURE="zh-cn" + COUNTRY="CN";; + "Chinese (Traditional)") + CULTURE="zh-tw" + COUNTRY="TW";; + "French") + CULTURE="fr-fr" + COUNTRY="FR";; + "German") + CULTURE="de-de" + COUNTRY="DE";; + "Italian") + CULTURE="it-it" + COUNTRY="IT";; + "Japanese") + CULTURE="ja-jp" + COUNTRY="JP";; + "Korean") + CULTURE="ko-kr" + COUNTRY="KR";; + "Portuguese (Brazil)") + CULTURE="pt-br" + COUNTRY="BR";; + "Spanish") + CULTURE="es-es" + COUNTRY="ES";; + "Russian") + CULTURE="ru-ru" + COUNTRY="RU";; + *) + CULTURE="en-us" + COUNTRY="US";; esac iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=$CULTURE&country=$COUNTRY" | head -c 1024)" case "$enterprise_type" in - # Select x64 LTSC download link - "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; - *) iso_download_link="$iso_download_links" ;; + # Select x64 LTSC download link + "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1);; + *) iso_download_link="$iso_download_links";; esac iso_download_link="$(curl --silent --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" @@ -3119,7 +3351,7 @@ function download_windows() { local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" case "$windows_version" in - 8 | 10) url="${url}ISO";; + 8 | 10) url="${url}ISO";; esac local user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0" @@ -3265,13 +3497,13 @@ function get_windows() { rm -f "${VM_PATH}/unattended.iso" case ${RELEASE} in - 10|11) - echo "Making unattended.iso" - mkdir -p "${VM_PATH}/unattended" 2>/dev/null - web_get https://www.spice-space.org/download/windows/spice-webdavd/spice-webdavd-x64-latest.msi "${VM_PATH}/unattended" - web_get https://www.spice-space.org/download/windows/vdagent/vdagent-win-0.10.0/spice-vdagent-x64-0.10.0.msi "${VM_PATH}/unattended" - web_get https://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.22_x64.msi "${VM_PATH}/unattended" - unattended_windows "${VM_PATH}/unattended/autounattend.xml" + 10|11) + echo "Making unattended.iso" + mkdir -p "${VM_PATH}/unattended" 2>/dev/null + web_get https://www.spice-space.org/download/windows/spice-webdavd/spice-webdavd-x64-latest.msi "${VM_PATH}/unattended" + web_get https://www.spice-space.org/download/windows/vdagent/vdagent-win-0.10.0/spice-vdagent-x64-0.10.0.msi "${VM_PATH}/unattended" + web_get https://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.22_x64.msi "${VM_PATH}/unattended" + unattended_windows "${VM_PATH}/unattended/autounattend.xml" mkisofs -quiet -l -o "${VM_PATH}/unattended.iso" "${VM_PATH}/unattended/" ;; esac @@ -3284,7 +3516,7 @@ function get_windows() { } open_url() { - local URL="$1"; + local URL="${1}"; xdg-open "$URL" || sensible-browser "$URL" || x-www-browser "$URL" || gnome-open "$URL"; } @@ -3347,40 +3579,170 @@ fi LANGS=() -if [ -n "${1}" ]; then - OS="${1,,}" - if [ "${OS}" == "list" ] || [ "${OS}" == "list_csv" ]; then - list_csv - elif [ "${OS}" == "list_json" ]; then - list_json - elif [ "${OS}" == "--version" ] || [ "${OS}" == "-version" ] || [ "${OS}" == "version" ]; then - WHERE=$(dirname "${BASH_SOURCE[0]}") - "${WHERE}/quickemu" --version - exit 0 - fi -else +os_error() { echo "ERROR! You must specify an operating system." - echo -n " - Operating Systems: " - os_support - echo " - You can also use these arguments: - Only show ISO download URL - --show-iso-url / -s {distro} {release} [edition] - Test if ISO is available - --test-iso-url / -t {distro} {release} [edition] - Open distro homepage - --open-distro-homepage / -o {distro} - Only download ISO - --download-iso / -d {distro} {release} [edition]" + echo "- Supported Operating Systems:" + os_support | fold -s -w $(tput cols) + echo -e "\nTo see all possible arguments, use:\n quickget -h or quickget --help" exit 1 -fi +} -if [[ ! " $(os_support) " =~ " ${OS} " ]]; then - echo -e "ERROR! ${OS} is not a supported OS.\n" - os_support +os_supported() { + if [[ ! " $(os_support) " =~ " ${OS} " ]]; then + echo -e "ERROR! ${OS} is not a supported OS.\n" + os_support | fold -s -w $(tput cols) exit 1 + fi +} + +help_message() { + printf ' _ _ + __ _ _ _ _ ___║ ║ ____ _ ___║ ║_ + / _` ║ ║ ║ ║ ║/ __║ ║/ / _` ║/ _ \ __║ + ( (_║ ║ ║_║ ║ ║ (__║ < (_║ ║ __/ ║_ MIT + \__, ║\__,_║_║\___║_║\ \__, ║\___║\__║ license + ║_║ version: %s ║___/ + QEMU %s -------------------------------------------------- + > Quickly create and run optimised Windows, < + > macOS and Linux desktop virtual machines. < + homepage - Not Yet + repository - https://github.com/quickemu-project/quickemu + official GUI - https://github.com/quickemu-project/quickgui + by Wimpy https://github.com/flexiondotorg and contributors + Discord - https://discord.gg/wimpy-s-world-712850672223125565 +-------------------------------------------------------------- + +Basic Usage: + quickget [edition] + quickget alpine latest + +Advanced Usage: + quickget [path] [re] [ed] + quickget -d peppermint latest devuan-xfce + +Posible arguments: + --help (-h) : Show this help message and exit + --list-json (-lj) : Show OS info in json format + --list-csv (-lc) : Show OS info in csv format + --os-info (-i) : Show info about OS + --os-homepage (-o) : Open OS homepage in default browser + --iso-download (-d) [ed] : Just download ISO + --list-supported (-ls) : List all supported OS,releases,editions + --list-isos (-li) : List all supported ISOs + --test-isos (-ti) : Test if ISOs are available + --version (-v) : Show version and exit + +supported Operating Systems:\n' "$(quickemu --version)" "$(qemu-x86_64 -version | head -1 | cut -d' ' -f3)" + os_support | fold -s -w $(tput cols) + exit 0 +} + +function show_os_info() { + local OS="" + if [ -z "${1}" ]; then + + os_error + exit 1 + fi + + OS="${1}" + os_supported + if command -v neofetch > /dev/null; then + neofetch -l --ascii_distro ${OS} + fi + echo ${OS} + echo -n 'Pretty name: ' + pretty_name ${OS} + echo -n 'Based of: ' + os_basedof ${OS} + + if [ -z "$(os_credentials ${OS})" ]; then + echo 'Credentials: Unknown' + else + echo -n 'Credentials: ' + os_credentials ${OS} + fi + + echo -n 'Homepage: ' + os_homepage ${OS} + echo -n 'Info: ' + os_about ${OS} + + if [[ ! $(type -t "editions_${OS}") == function ]]; then + echo -n 'Releases: ' + "releases_${OS}" + else + echo -n 'Releases: ' + "releases_${OS}" + echo -n 'Editions: ' + "editions_${OS}" + fi + + exit 0 +} + +case "${1}" in + '-h'|'--help') + help_message + ;; + '-lc'|'list'|'list_csv') + list_csv + ;; + '-lj'|'list_json') + list_json + ;; + '-ls'|'--list-supported') + list_supported + ;; + '-li'|'--list-isos') + list_isos + ;; + '-ti'|'--test-isos') + test_isos + ;; + '-d'|'--iso-download') + download_iso=1 + if [ -n "$4" ]; then + set -- "$2" "$3" "$4" + elif [ -n "$3" ]; then + set -- "$2" "$3" + else + set -- "$2" + fi + ;; + '-i'|'--os-info') + echo "$(show_os_info "${2}")" | fold -s -w $(tput cols) + exit 0 + ;; + '-o'|'--os-homepage') + OS="${2}" + if [ -z "$(os_homepage ${OS})" ]; then + os_error + else + open_url "$(os_homepage ${OS})" + exit 0 + fi + ;; + '-v'|'--version') + WHERE=$(dirname "${BASH_SOURCE[0]}") + "${WHERE}/quickemu" --version + exit 0 + ;; +esac + +if [ -n "${1}" ]; then + OS="${1,,}" + case "${OS}" in + '-i'|'--os-info'|'-o'|'--os-homepage'|'-d'|'--iso-download') + os_error + ;; + esac +else + os_error fi +os_supported + if [ -n "${2}" ]; then RELEASE="${2,,}" VM_PATH="${OS}-${RELEASE}" @@ -3394,17 +3756,19 @@ if [ -n "${2}" ]; then if [[ ! " ${EDITIONS[*]} " =~ " ${EDITION} " ]]; then echo -e "ERROR! ${EDITION} is not a supported $(pretty_name "${OS}") edition:\n" for EDITION in "${EDITIONS[@]}"; do - echo -n "${EDITION} " + echo -n "${EDITION} " done + echo '' exit 1 fi else echo -en "ERROR! You must specify an edition.\n - Editions: " + #TODO ERROR here editions_"${OS}" exit 1 fi - # Handle odd missing fedora cominations + # Handle odd missing Fedora combinations if [[ $OS == fedora ]] ; then if [[ ${RELEASE} = "33" && ${EDITION} = "i3" ]] || [[ ${RELEASE} = "34" && ${EDITION} = "Cinnamon" ]] || [[ ${RELEASE} -lt "39" && ${EDITION} = "Onyx" ]]; then echo "ERROR! Unsupported combination" @@ -3413,7 +3777,7 @@ if [ -n "${2}" ]; then fi fi - # Handle missing Mangaro Sway minimal + # Handle missing Manjaro Sway minimal if [[ $OS == manjaro ]] ; then if [[ ${RELEASE} == "sway" && ${EDITION} == "minimal" ]] ; then echo "ERROR! Unsupported combination" @@ -3422,7 +3786,6 @@ if [ -n "${2}" ]; then fi fi - VM_PATH="${OS}-${RELEASE}-${EDITION}" create_vm "$("get_${OS}" "${EDITION}")" elif [ "${OS}" == "macos" ]; then @@ -3448,9 +3811,9 @@ if [ -n "${2}" ]; then if [ -n "${3}" ]; then LANG="${3}" if [[ ! ${LANGS[*]} =~ "${LANG}" ]]; then - echo -e "ERROR! ${LANG} is not a supported Windows language:\n" + echo -e "ERROR! ${LANG} is not a supported $(pretty_name "${OS}") language:\n" for LANG in "${LANGS[@]}"; do - echo -n "${LANG} " + echo -n "${LANG} " done exit 1 fi @@ -3462,14 +3825,22 @@ if [ -n "${2}" ]; then validate_release "releases_${OS}" create_vm "$("get_${OS}")" fi -elif [ "${open_distro_homepage}" == 'on' ]; then - HOMEPAGE=$(os_homepages ${OS}) - open_url "${HOMEPAGE}" && exit 0 +#####>>>>>> +elif [ $(releases_${OS} | wc -w) -eq 1 ] && [[ ! $(type -t "editions_${OS}") == function ]]; then + RELEASE=$(releases_${OS}) + VM_PATH="${OS}" + create_vm "$("get_${OS}")" else - if [ "${open_distro_homepage}" == 'on' ]; then - HOMEPAGE=$(os_homepages "${OS}") - open_url "${HOMEPAGE}" && exit 0 - fi +#======= +#elif [ "${open_distro_homepage}" == 'on' ]; then +# HOMEPAGE=$(os_homepages ${OS}) +# open_url "${HOMEPAGE}" && exit 0 +#else +# if [ "${open_distro_homepage}" == 'on' ]; then +# HOMEPAGE=$(os_homepages "${OS}") +# open_url "${HOMEPAGE}" && exit 0 +# fi +#>>>>>>> upstream -- Current Change echo "ERROR! You must specify a release." case ${OS} in *ubuntu-server*) @@ -3487,11 +3858,11 @@ else "languages_${OS}" && echo "${LANGS[@]}" ;; *) - echo -n " - Releases: " - releases_"${OS}" + echo -n " - Releases: " + "releases_${OS}" | fold -s -w $(tput cols) if [[ $(type -t "editions_${OS}") == function ]]; then echo -n " - Editions: " - editions_"${OS}" + editions_"${OS}" | fold -s -w $(tput cols) fi ;; esac diff --git a/test b/test new file mode 100644 index 0000000000..695c2dc82d --- /dev/null +++ b/test @@ -0,0 +1,800 @@ +agarimos +https://sourceforge.net/projects/agarimos/files/Plasma/AgarimOS-Plasma-Dracula-Live-x86_64-6.3.13_1-20230913.iso +agarimos +https://sourceforge.net/projects/agarimos/files/XFCE4/AgarimOS-XFCE4-Catppuccin-Live-x86_64-6.3.13_1-20230916.iso +agarimos +https://sourceforge.net/projects/agarimos/files/LXQT-KWIN/AgarimOS-LXQT-KWIN-Dracula-Live-x86_64-6.3.13_1-20230915.iso +agarimos +https://sourceforge.net/projects/agarimos/files/Gnome/AgarimOS-Gnome-Catppuccin-Liv-x86_64-6.3.13_1-20230914.iso +alma +https://repo.almalinux.org/almalinux/8 +alma +https://repo.almalinux.org/almalinux/8 +alma +https://repo.almalinux.org/almalinux/8 +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12.12-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/x86_64/alpine-virt-3.13.12-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.14/releases/x86_64/alpine-virt-3.14.10-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-virt-3.15.10-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-virt-3.16.7-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/alpine-virt-3.17.5-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-virt-3.18.4-x86_64.iso +alpine +https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-virt-3.18.4-x86_64.iso +android +https://mirrors.gigenet.com/OSDN/android-x86/71931/ +android +https://mirrors.gigenet.com/OSDN/android-x86/71931/ +arch +https://mirror.rackspace.com/archlinux//iso/2023.09.01/archlinux-2023.09.01-x86_64.iso +archcraft +https://downloads.sourceforge.net/project/archcraft/v23.10/archcraft-2023.10.12-x86_64.iso +arco +https://ant.seedhost.eu/arcolinux/iso/v21.09.08 +arco +https://ant.seedhost.eu/arcolinux/iso/v21.09.08 +antix +antix +antix +antix +antix +antix +antix +antix +artix +https://iso.artixlinux.org/iso/artix-base-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-base-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-base-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-base-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-cinnamon-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-cinnamon-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-cinnamon-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-cinnamon-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxde-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxde-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxde-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxde-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxqt-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxqt-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxqt-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-lxqt-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-mate-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-mate-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-mate-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-mate-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-plasma-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-plasma-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-plasma-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-plasma-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-xfce-dinit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-xfce-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-xfce-runit-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-xfce-s6-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-community-gtk-openrc-20230814-x86_64.iso +artix +https://iso.artixlinux.org/iso/artix-community-qt-openrc-20230814-x86_64.iso +athenaos +https://downloads.sourceforge.net/project/athena-iso/v23.06.23/athena-2023.06.23-x86_64.iso +batocera +https://mirrors.o2switch.fr/batocera/x86_64/stable/last/archives/32/batocera-x86_64-32-20210920.img.gz +batocera +https://mirrors.o2switch.fr/batocera/x86_64/stable/last/archives/33/batocera-x86_64-33-20220203.img.gz +batocera +https://mirrors.o2switch.fr/batocera/x86_64/stable/last/archives/34/batocera-x86_64-34-20220523.img.gz +biglinux +https://iso.biglinux.com.br/biglinux_2023-10-13_k61.iso +blendos +https://sourceforge.net/projects/blendos/files/ISOs/plasma/1688424625/blendOS.iso +blendos +https://sourceforge.net/projects/blendos/files/ISOs/plasma/1688424625/blendOS.iso +bodhi +https://sourceforge.net/projects/bodhilinux/files///bodhi-7.0.0-64.iso +bodhi +https://sourceforge.net/projects/bodhilinux/files///bodhi-7.0.0-64-hwe.iso +bodhi +https://sourceforge.net/projects/bodhilinux/files///bodhi-7.0.0-64-s76.iso +bunsenlabs +https://ddl.bunsenlabs.org/ddl/beryllium-1-amd64.hybrid.iso +cachyos +https://mirror.cachyos.org/ISO/kde/230813/cachyos-kde-linux-230813.iso +cachyos +https://mirror.cachyos.org/ISO/gnome/230813/cachyos-gnome-linux-230813.iso +centos-stream +/ +centos-stream +/ +cereus +cereus +cereus +chimera +https://repo.chimera-linux.org/live/latest/chimera-linux-x86_64-LIVE-20230915-base.iso +chimera +https://repo.chimera-linux.org/live/latest/chimera-linux-x86_64-LIVE-20230915-gnome.iso +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +debian +https://cdimage.debian.org/cdimage/archive/10.0.0 +deepin +https://cdimage.deepin.com/releases/20/deepin-desktop-community-1003-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.1/deepin-desktop-community-1010-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.2/deepin-desktop-community-20.2-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.2.1/deepin-desktop-community-20.2.1-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.2.2/deepin-desktop-community-20.2.2-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.2.3/deepin-desktop-community-20.2.3-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.2.4/deepin-desktop-community-20.2.4-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.3/deepin-desktop-community-20.3-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.4/deepin-desktop-community-20.4-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.5/deepin-desktop-community-20.5-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.6/deepin-desktop-community-20.6-amd64.iso +deepin +https://cdimage.deepin.com/releases/20.7/deepin-desktop-community-20.7-amd64.iso +devuan +https://files.devuan.org/devuan_beowulf/desktop-live/devuan_beowulf_3.1.1_amd64_desktop-live.iso +devuan +https://files.devuan.org/devuan_chimaera/desktop-live/devuan_chimaera_4.0.2_amd64_desktop-live.iso +devuan +https://files.devuan.org/devuan_daedalus/desktop-live/devuan_daedalus_5.0.0_amd64_desktop-live.iso +dietpi +https://dietpi.com/downloads/images/ +dietpi +https://dietpi.com/downloads/images/ +dietpi +https://dietpi.com/downloads/images/ +dietpi +https://dietpi.com/downloads/images/ +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-6.4.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-6.2.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-6.2.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-6.0.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-6.0.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.8.3_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.8.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.8.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.3_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.8.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.6.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.3_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.4.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.2.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.2.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.2.0_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.0.2_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.0.1_REL.iso.bz2 +dragonflybsd +http://mirror-master.dragonflybsd.org/iso-images/dfly-x86_64-5.0.0_REL.iso.bz2 +edubuntu +https://cdimage.ubuntu.com/edubuntu/releases/23.04/release/edubuntu-23.04-desktop-amd64.iso +elementary +https://ams3.dl.elementary.io/download/MTY5NzE4OTU3MAo=/elementaryos-7.0-stable.20230129rc.iso +elementary +https://ams3.dl.elementary.io/download/MTY5NzE4OTU3MAo=/elementaryos-7.1-stable.20230926rc.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Apollo_22_1.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Artemis-22_6.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Artemis_neo_22_7.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Artemis_neo_22_8.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Artemis_nova_22_9.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Atlantis-21_4.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Atlantis_neo-21_5.iso +endeavouros +https://github.com/endeavouros-team/ISO/releases/download/1-EndeavourOS-ISO-releases-archive/EndeavourOS_Cassini_22_12.iso +endless +https://images-dl.endlessm.com/release/5.0.0/eos-amd64-amd64/base/eos-eos5.0-amd64-amd64.230127-211122.base.iso +endless +https://images-dl.endlessm.com/release/5.0.0/eos-amd64-amd64/en/eos-eos5.0-amd64-amd64.230127-212436.en.iso +endless +https://images-dl.endlessm.com/release/5.0.0/eos-amd64-amd64/fr/eos-eos5.0-amd64-amd64.230127-213415.fr.iso +endless +https://images-dl.endlessm.com/release/5.0.0/eos-amd64-amd64/pt_BR/eos-eos5.0-amd64-amd64.230127-220328.pt_BR.iso +endless +https://images-dl.endlessm.com/release/5.0.0/eos-amd64-amd64/es/eos-eos5.0-amd64-amd64.230127-212646.es.iso +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +fedora + +freebsd +https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.4 +freebsd +https://download.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/12.4 +freedos +http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/official/FD12CD.iso +freedos +http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.3/official/FD13-LiveCD.zip +fvoid +https://downloads.sourceforge.net/project/f-void/26_08_2023/fvoid-live-x86_64-20230826-lxqt.iso +gabeeos +https://sourceforge.net/projects/gabeeoslinux/files/Distro/Openbox/beta/gabeeOSLinux-Openbox-Cherry-x86_64-6.1.25_1-20230502.iso +gabeeos +https://sourceforge.net/projects/gabeeoslinux/files/Distro/Qtile/beta/gabeeOSLinux-Qtile-x86_64-6.1.25_1-20230508.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/cinnamon/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/dr460nized/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/dr460nized-gaming/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/gnome/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/i3/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/kde-git/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/kde-lite/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/lxqt-kwin/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/mate/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/qtile/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/sway/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/wayfire/latest.iso +garuda +https://iso.builds.garudalinux.org/iso/latest/garuda/xfce/latest.iso +gentoo +https://mirror.bytemark.co.uk/gentoo/releases/amd64/autobuilds//20231008T170201Z/install-amd64-minimal-20231008T170201Z.iso +ghostbsd +https://download.ghostbsd.org/releases/amd64/21.10.16 +ghostbsd +https://download.ghostbsd.org/releases/amd64/21.10.16 +haiku +http://mirror.rit.edu/haiku/r1beta3 +haiku +http://mirror.rit.edu/haiku/r1beta3 +holoiso +http://holoiso.itsvixano.me/HoloISO_4.5_ux_changes-20230626_66f7c74061_bootchoice_fixes-1-x86-64.iso.iso +kali +https://cdimage.kali.org/current/kali-linux-2023.3-installer-amd64.iso +kali +https://cdimage.kali.org/kali-weekly/kali-linux-2023-W41-installer-amd64.iso +kdeneon +https://files.kde.org/neon/images/user/current/neon-user-20231012-0714.iso +kdeneon +https://files.kde.org/neon/images/testing/current/neon-testing-20231003-0251.iso +kdeneon +https://files.kde.org/neon/images/unstable/current/neon-unstable-20231008-1122.iso +kdeneon +https://files.kde.org/neon/images/developer/current/neon-developer-20230921-1641.iso +kolibrios +https://builds.kolibrios.org/eng/kolibri.iso +kubuntu +https://cdimage.ubuntu.com/kubuntu/releases/16.04/release/kubuntu-16.04.6-desktop-amd64.iso +kubuntu +https://cdimage.ubuntu.com/kubuntu/releases/18.04/release/kubuntu-18.04.5-desktop-amd64.iso +kubuntu +https://cdimage.ubuntu.com/kubuntu/releases/20.04/release/kubuntu-20.04.6-desktop-amd64.iso +kubuntu +https://cdimage.ubuntu.com/kubuntu/releases/22.04/release/kubuntu-22.04.3-desktop-amd64.iso +kubuntu +https://cdimage.ubuntu.com/kubuntu/releases/23.04/release/kubuntu-23.04-desktop-amd64.iso +kubuntu +kubuntu +kubuntu +kubuntu +lite +https://sourceforge.net/projects/linux-lite/files/6.0/linux-lite-6.0-64bit.iso +lite +https://sourceforge.net/projects/linux-lite/files/6.2/linux-lite-6.2-64bit.iso +lite +https://sourceforge.net/projects/linux-lite/files/6.4/linux-lite-6.4-64bit.iso +lite +https://sourceforge.net/projects/linux-lite/files/6.6/linux-lite-6.6-64bit.iso +lmde +https://mirror.bytemark.co.uk/linuxmint/debian/lmde-5-cinnamon-64bit.iso +lubuntu +https://cdimage.ubuntu.com/lubuntu/releases/16.04/release/lubuntu-16.04.6-desktop-amd64.iso +lubuntu +https://cdimage.ubuntu.com/lubuntu/releases/18.04/release/lubuntu-18.04.5-desktop-amd64.iso +lubuntu +https://cdimage.ubuntu.com/lubuntu/releases/20.04/release/lubuntu-20.04.5-desktop-amd64.iso +lubuntu +https://cdimage.ubuntu.com/lubuntu/releases/22.04/release/lubuntu-22.04.3-desktop-amd64.iso +lubuntu +https://cdimage.ubuntu.com/lubuntu/releases/23.04/release/lubuntu-23.04-desktop-amd64.iso +lubuntu +lubuntu +lubuntu +lubuntu +mageia +https://ftp.fi.muni.cz/pub/linux/mageia/iso/8/Mageia-8-Live-Plasma-x86_64/Mageia-8-Live-Plasma-x86_64.iso +mageia +https://ftp.fi.muni.cz/pub/linux/mageia/iso/8/Mageia-8-Live-GNOME-x86_64/Mageia-8-Live-GNOME-x86_64.iso +mageia +https://ftp.fi.muni.cz/pub/linux/mageia/iso/8/Mageia-8-Live-Xfce-x86_64/Mageia-8-Live-Xfce-x86_64.iso +manjaro + +manjaro + +mint +https://mirror.bytemark.co.uk/linuxmint/stable/20.2 +mint +https://mirror.bytemark.co.uk/linuxmint/stable/20.2 +mint +https://mirror.bytemark.co.uk/linuxmint/stable/20.2 +mint +https://mirror.bytemark.co.uk/linuxmint/stable/20.2 +miyo +https://sourceforge.net/projects/miyolinux/files/2022-Release/Kwin/miyo-kwin-x86_64-BIOS-20220526.iso +miyo +https://sourceforge.net/projects/miyolinux/files/2022-Release/Deboot-Ceres/Deboot-Ceres-x86-64-BIOS-20220415.iso +miyo +https://sourceforge.net/projects/miyolinux/files/2022-Release/JWM/miyolinux-jwm-x86_64-BIOS-20220226.iso +miyo +https://sourceforge.net/projects/miyolinux/files/2022-Release/Openbox/MiyoLinux-x86_64-BIOS-20220129.iso +miyo +https://sourceforge.net/projects/miyolinux/files/2022-Release/MATE/mate-minimal-x86_64-BIOS-20220107.iso +mx +https://sourceforge.net/projects/mx-linux/files/Final/Xfce/MX-21.3_x64.iso +mx +https://sourceforge.net/projects/mx-linux/files/Final/KDE/MX-21.3_KDE_x64.iso +mx +https://sourceforge.net/projects/mx-linux/files/Final/Fluxbox/MX-21.3_fluxbox_x64.iso +netboot +https://boot.netboot.xyz/ipxe/netboot.xyz.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/images//NetBSD-9.3-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.2/images//NetBSD-9.2-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.1/images//NetBSD-9.1-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.0/images//NetBSD-9.0-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.2/images//NetBSD-8.2-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.1/images//NetBSD-8.1-amd64.iso +netbsd +https://cdn.netbsd.org/pub/NetBSD/NetBSD-8.0/images//NetBSD-8.0-amd64.iso +nixos +https://channels.nixos.org/nixos-21.05 +nixos +https://channels.nixos.org/nixos-21.05 +nixos +https://channels.nixos.org/nixos-21.05 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +macos +https://github.com/kholia/OSX-KVM/raw/master/OpenCore/OpenCore.qcow2 +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/6.8/amd64/install68.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/6.9/amd64/install69.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/7.0/amd64/install70.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/7.1/amd64/install71.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/7.2/amd64/install72.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/7.3/amd64/install73.iso +openbsd +https://mirror.leaseweb.com/pub/OpenBSD/7.4/amd64/install74.iso +openindiana +https://dlc.openindiana.org/isos/hipster/20230421/OI-hipster-gui-20230421.iso +openindiana +https://dlc.openindiana.org/isos/hipster/20230421/OI-hipster-text-20230421.iso +openindiana +https://dlc.openindiana.org/isos/hipster/20230421/OI-hipster-minimal-20230421.iso +opensuse +https://download.opensuse.org/distribution/leap/15.0/iso/openSUSE-Leap-15.0-DVD-x86_64.iso +opensuse +https://download.opensuse.org/distribution/leap/15.1/iso/openSUSE-Leap-15.1-DVD-x86_64.iso +opensuse +https://download.opensuse.org/distribution/leap/15.2/iso/openSUSE-Leap-15.2-DVD-x86_64-Current.iso +opensuse +https://download.opensuse.org/distribution/leap/15.3/iso/openSUSE-Leap-15.3-DVD-x86_64-Current.iso +opensuse +https://download.opensuse.org/distribution/leap/15.4/iso/openSUSE-Leap-15.4-DVD-x86_64-Current.iso +opensuse +https://download.opensuse.org/tumbleweed/iso/openSUSE-MicroOS-DVD-x86_64-Current.iso +opensuse +https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-DVD-x86_64-Current.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL7/u7/x86_64//OracleLinux-R7-U7-Server-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL7/u8/x86_64//OracleLinux-R7-U8-Server-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL7/u9/x86_64//OracleLinux-R7-U9-Server-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL8/u4/x86_64//OracleLinux-R8-U4-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL8/u5/x86_64//OracleLinux-R8-U5-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL8/u6/x86_64//OracleLinux-R8-U6-x86_64-dvd.iso +oracle +https://yum.oracle.com/ISOS/OracleLinux/OL9/u0/x86_64//OracleLinux-R9-U0-x86_64-dvd.iso +popos + +popos + +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +porteus +https://mirrors.dotsrc.org/porteus/x86_64/Porteus-v5.0 +pureos +/ +pureos +/ +reactos +https://downloads.sourceforge.net/project/reactos/ReactOS/0.4.14/ReactOS-0.4.14-release-93-g10d0e9b-iso.zip +rebornos + +rocky +http://dl.rockylinux.org/vault/rocky/8.3 +rocky +http://dl.rockylinux.org/vault/rocky/8.3 +rocky +http://dl.rockylinux.org/vault/rocky/8.3 +siduction +https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/kde/siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-kde-amd64-202309091853.iso +siduction +https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/lxqt/siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-lxqt-amd64-202309091910.iso +siduction +https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/nox/siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-nox-amd64-202309091923.iso +siduction +https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/xfce/siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-xfce-amd64-202309091902.iso +siduction +https://mirrors.dotsrc.org/siduction/iso/Standing_on_the_Shoulders_of_Giants/xorg/siduction-2023.1.1-Standing_on_the_Shoulders_of_Giants-xorg-amd64-202309091916.iso +slackware +https://slackware.nl/slackware/slackware-iso/slackware64-14.2-iso/slackware64-14.2-install-dvd.iso +slackware +https://slackware.nl/slackware/slackware-iso/slackware64-15.0-iso/slackware64-15.0-install-dvd.iso +slax +https://slax.org/download-slax.php?a=64bit&b=Debian/slax-64bit-11.6.0.iso +slax +https://slax.org/download-slax.php?a=64bit&b=Slackware/slax-64bit-15.0.1.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling-core.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling-core64.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling-loram.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling-core-5in1.iso +slitaz +http://mirror.slitaz.org/iso/rolling/slitaz-rolling-preinit.iso +solus +https://mirrors.rit.edu/solus/images/4.3/Solus-4.3-Budgie.iso +solus +https://mirrors.rit.edu/solus/images/4.3/Solus-4.3-GNOME.iso +solus +https://mirrors.rit.edu/solus/images/4.3/Solus-4.3-MATE.iso +solus +https://mirrors.rit.edu/solus/images/4.3/Solus-4.3-Plasma.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Plasma_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_XFCE_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Mate_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_LXQt_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Gnome_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Budgie_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Cinnamon_12.231005_x86-64.iso +spiral +https://sourceforge.net/projects/spirallinux/files/12.231005/SpiralLinux_Builder_12.231005_x86-64.iso +tails +https://download.tails.net/tails/stable/tails-amd64-5.18/tails-amd64-5.18.iso +tinycore +http://www.tinycorelinux.net/14.x/x86/release/Core-14.0.iso +tinycore +http://www.tinycorelinux.net/14.x/x86/release/TinyCore-14.0.iso +tinycore +http://www.tinycorelinux.net/14.x/x86/release/CorePlus-14.0.iso +tinycore +http://www.tinycorelinux.net/14.x/x86_64/release/CorePure64-14.0.iso +tinycore +http://www.tinycorelinux.net/14.x/x86_64/release/TinyCorePure64-14.0.iso +trisquel +https://mirrors.ocf.berkeley.edu/trisquel-images/trisquel_10.0.1 +trisquel +https://mirrors.ocf.berkeley.edu/trisquel-images/trisquel-mini_10.0.1 +trisquel +https://mirrors.ocf.berkeley.edu/trisquel-images/triskel_10.0.1 +trisquel +https://mirrors.ocf.berkeley.edu/trisquel-images/trisquel-sugar_10.0.1 +truenas-core + +truenas-core +https://download-core.sys.truenas.net/13.0/STABLE/U5.3/x64/TrueNAS-13.0-U5.3.iso +truenas-scale + +truenas-scale +https://download.sys.truenas.net/TrueNAS-SCALE-Bluefin/22.12.4.1/TrueNAS-SCALE-22.12.4.1.iso +tuxedoos +https://os.tuxedocomputers.com//TUXEDO-OS-2-202309111354.iso +ubuntu +https://releases.ubuntu.com/14.04/ubuntu-14.04.6-desktop-amd64.iso +ubuntu +https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso +ubuntu +https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso +ubuntu +https://releases.ubuntu.com/20.04/ubuntu-20.04.6-desktop-amd64.iso +ubuntu +https://releases.ubuntu.com/22.04/ubuntu-22.04.3-desktop-amd64.iso +ubuntu +https://releases.ubuntu.com/23.04/ubuntu-23.04-desktop-amd64.iso +ubuntu +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu/jammy/daily-live/current/.zsync +ubuntu +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu/daily-live/current/.zsync +ubuntu +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu/daily-canary/current/.zsync +ubuntu +ubuntu-budgie +https://cdimage.ubuntu.com/ubuntu-budgie/releases/18.04/release/ubuntu-budgie-18.04.5-desktop-amd64.iso +ubuntu-budgie +https://cdimage.ubuntu.com/ubuntu-budgie/releases/20.04/release/ubuntu-budgie-20.04.6-desktop-amd64.iso +ubuntu-budgie +https://cdimage.ubuntu.com/ubuntu-budgie/releases/22.04/release/ubuntu-budgie-22.04.3-desktop-amd64.iso +ubuntu-budgie +https://cdimage.ubuntu.com/ubuntu-budgie/releases/23.04/release/ubuntu-budgie-23.04-desktop-amd64.iso +ubuntu-budgie +ubuntu-budgie +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/.zsync +ubuntu-budgie +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/.zsync +ubuntu-budgie +ERROR! Failed to download http://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/.zsync +ubuntucinnamon +https://cdimage.ubuntu.com/ubuntucinnamon/releases/23.04/release/ubuntucinnamon-23.04-desktop-amd64.iso +ubuntucinnamon +ubuntucinnamon +ubuntukylin +https://cdimage.ubuntu.com/ubuntukylin/releases/16.04/release/ubuntukylin-16.04.7-desktop-amd64.iso +ubuntukylin +https://cdimage.ubuntu.com/ubuntukylin/releases/18.04/release/ubuntukylin-18.04.5-desktop-amd64.iso +ubuntukylin +https://cdimage.ubuntu.com/ubuntukylin/releases/20.04/release/ubuntukylin-20.04.6-desktop-amd64.iso +ubuntukylin +https://cdimage.ubuntu.com/ubuntukylin/releases/22.04/release/ubuntukylin-22.04.3-desktop-amd64.iso +ubuntukylin +https://cdimage.ubuntu.com/ubuntukylin/releases/23.04/release/ubuntukylin-23.04-desktop-amd64.iso +ubuntukylin +ubuntukylin +ubuntukylin +ubuntukylin +ubuntu-mate +https://cdimage.ubuntu.com/ubuntu-mate/releases/16.04/release/ubuntu-mate-16.04.6-desktop-amd64.iso +ubuntu-mate +https://cdimage.ubuntu.com/ubuntu-mate/releases/18.04/release/ubuntu-mate-18.04.5-desktop-amd64.iso +ubuntu-mate +https://cdimage.ubuntu.com/ubuntu-mate/releases/20.04/release/ubuntu-mate-20.04.6-desktop-amd64.iso +ubuntu-mate +https://cdimage.ubuntu.com/ubuntu-mate/releases/22.04/release/ubuntu-mate-22.04.3-desktop-amd64.iso +ubuntu-mate +https://cdimage.ubuntu.com/ubuntu-mate/releases/23.04/release/ubuntu-mate-23.04-desktop-amd64.iso +ubuntu-mate +ubuntu-mate +ubuntu-mate +ubuntu-mate +ubuntu-server +https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso +ubuntu-server +https://releases.ubuntu.com/20.04/ubuntu-20.04.6-live-server-amd64.iso +ubuntu-server +https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso +ubuntu-server +https://releases.ubuntu.com/23.04/ubuntu-23.04-live-server-amd64.iso +ubuntu-server +ubuntustudio +https://cdimage.ubuntu.com/ubuntustudio/releases/16.04/release/ubuntustudio-16.04.5-dvd-amd64.iso +ubuntustudio +https://cdimage.ubuntu.com/ubuntustudio/releases/18.04/release/ubuntustudio-18.04-dvd-amd64.iso +ubuntustudio +https://cdimage.ubuntu.com/ubuntustudio/releases/20.04/release/ubuntustudio-20.04.5-dvd-amd64.iso +ubuntustudio +https://cdimage.ubuntu.com/ubuntustudio/releases/22.04/release/ubuntustudio-22.04.3-dvd-amd64.iso +ubuntustudio +https://cdimage.ubuntu.com/ubuntustudio/releases/23.04/release/ubuntustudio-23.04-dvd-amd64.iso +ubuntustudio +ubuntustudio +ubuntustudio +ubuntustudio +ubuntu-unity +https://cdimage.ubuntu.com/ubuntu-unity/releases/23.04/release/ubuntu-unity-23.04-desktop-amd64.iso +ubuntu-unity +ubuntu-unity +vanillaos +https://cdn.vanillaos.org/assets/ISO/22.10-r8/VanillaOS-22.10-all.20230226.iso +ventoy +https://github.com/ventoy/Ventoy/releases/download/v1.0.95/ventoy-1.0.95-livecd.iso +void +https://alpha.de.repo.voidlinux.org/live/current/void-live-x86_64-20230628-base.iso +void +https://alpha.de.repo.voidlinux.org/live/current/void-live-x86_64-musl-20230628-base.iso +void +https://alpha.de.repo.voidlinux.org/live/current/void-live-x86_64-20230628-xfce.iso +void +https://alpha.de.repo.voidlinux.org/live/current/void-live-x86_64-musl-20230628-xfce.iso +voidpup +https://downloads.sourceforge.net/project/vpup/VoidPup64/VoidPup64-22.02-230701.iso +vx +https://github.com/VX-Linux/main/releases/download/6.1.5/vx-6.1.5.iso +vx +https://github.com/VX-Linux/main/releases/download/6.0/vx-6.0.iso +vx +https://github.com/VX-Linux/main/releases/download/5.5/vx-5.5.iso +vx +https://github.com/VX-Linux/main/releases/download/5.4/vx-5.4.iso +vx +https://github.com/VX-Linux/main/releases/download/5.3/vx-5.3.iso +vx +https://github.com/VX-Linux/main/releases/download/5.2/vx-5.2.iso +vx +https://github.com/VX-Linux/main/releases/download/5.1/vx-5.1.iso +vx +https://github.com/VX-Linux/main/releases/download/5.0/vx-5.0.iso +windows +Downloading Windows 10 22H2... +https://www.itechtics.com/?dl_id=173 +windows +Downloading Windows 11 22H2... +https://www.itechtics.com/?dl_id=168 +xero +https://sourceforge.net/projects/xerolinux/files/Releases/xerolinux-2022.12-x86_64.iso +xubuntu +https://cdimage.ubuntu.com/xubuntu/releases/16.04/release/xubuntu-16.04.6-desktop-amd64.iso +xubuntu +https://cdimage.ubuntu.com/xubuntu/releases/18.04/release/xubuntu-18.04.5-desktop-amd64.iso +xubuntu +https://cdimage.ubuntu.com/xubuntu/releases/20.04/release/xubuntu-20.04.6-desktop-amd64.iso +xubuntu +https://cdimage.ubuntu.com/xubuntu/releases/22.04/release/xubuntu-22.04.3-desktop-amd64.iso +xubuntu +https://cdimage.ubuntu.com/xubuntu/releases/23.04/release/xubuntu-23.04-desktop-amd64.iso +xubuntu +xubuntu +xubuntu +xubuntu +zorin +https://free.download.zorinos.com/16/Zorin-OS-16.3-Core-64-bit.iso +zorin +https://free.download.zorinos.com/16/Zorin-OS-16.3-Lite-64-bit.iso +zorin +https://free.download.zorinos.com/16/Zorin-OS-16.3-Education-64-bit.iso +zorin +https://free.download.zorinos.com/16/Zorin-OS-16.3-Education-Lite-64-bit.iso