Compare commits
No commits in common. "master" and "4.9.6" have entirely different histories.
|
@ -14,11 +14,11 @@ assignees: ''
|
|||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behaviour:
|
||||
Steps to reproduce the behavior:
|
||||
1. Run `quickemu` with arguments '...'
|
||||
2. See error
|
||||
|
||||
**Expected behaviour**
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Quickemu output**
|
||||
|
|
|
@ -13,9 +13,9 @@ jobs:
|
|||
name: Flake Checker
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: DeterminateSystems/nix-installer-action@v19
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@v9
|
||||
- uses: DeterminateSystems/flake-checker-action@v12
|
||||
- uses: DeterminateSystems/nix-installer-action@v12
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@v7
|
||||
- uses: DeterminateSystems/flake-checker-action@v8
|
||||
|
|
|
@ -10,11 +10,11 @@ jobs:
|
|||
name: Flake Lock Updater
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: DeterminateSystems/nix-installer-action@v19
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@v9
|
||||
- uses: DeterminateSystems/update-flake-lock@v27
|
||||
- uses: DeterminateSystems/nix-installer-action@v12
|
||||
- uses: DeterminateSystems/magic-nix-cache-action@v7
|
||||
- uses: DeterminateSystems/update-flake-lock@v23
|
||||
with:
|
||||
pr-title: "chore: update flake.lock"
|
||||
|
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
name: Validate pull request title
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: amannn/action-semantic-pull-request@v6
|
||||
- uses: amannn/action-semantic-pull-request@v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
|
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
name: Shellcheck
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
|
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
name: "Check versions ⚖️"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: "Compare App and Git versions 🟰"
|
||||
|
@ -37,7 +37,7 @@ jobs:
|
|||
name: "Draft Release 📥️"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
- name: Create release ${{ github.ref }} as a draft
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -49,7 +49,7 @@ jobs:
|
|||
name: "Build Release 👨🔧"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
- name: Build and Upload .deb
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -67,7 +67,7 @@ jobs:
|
|||
name: "Publish Release 📤️"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
- name: Publish release ${{ github.ref }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -85,7 +85,7 @@ jobs:
|
|||
id-token: "write"
|
||||
contents: "read"
|
||||
steps:
|
||||
- uses: "actions/checkout@v5"
|
||||
- uses: "actions/checkout@v4"
|
||||
with:
|
||||
ref: "${{ (inputs.tag != null) && format('refs/tags/{0}', inputs.tag) || '' }}"
|
||||
- uses: "DeterminateSystems/nix-installer-action@main"
|
||||
|
@ -102,7 +102,7 @@ jobs:
|
|||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: "Checkout 🥡"
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v4
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: "Import gpg key 🔑"
|
||||
|
|
|
@ -29,7 +29,7 @@ jobs:
|
|||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: "Checkout 🥡"
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v4
|
||||
- name: "Build & Test .deb 🍥"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -51,11 +51,11 @@ jobs:
|
|||
contents: "read"
|
||||
steps:
|
||||
- name: "Checkout 🥡"
|
||||
uses: "actions/checkout@v5"
|
||||
uses: "actions/checkout@v4"
|
||||
- name: "Install Nix ❄️"
|
||||
uses: "DeterminateSystems/nix-installer-action@v19"
|
||||
uses: "DeterminateSystems/nix-installer-action@v12"
|
||||
- name: "Enable Magic Nix Cache 🪄"
|
||||
uses: "DeterminateSystems/magic-nix-cache-action@v9"
|
||||
uses: "DeterminateSystems/magic-nix-cache-action@v7"
|
||||
- name: "Build & Test .nix ❄️"
|
||||
run: |
|
||||
nix build .#quickemu
|
||||
|
|
|
@ -18,7 +18,7 @@ jobs:
|
|||
name: "Run quickget tests 👟"
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v4
|
||||
- name: "Install dependencies 📦️"
|
||||
run: |
|
||||
sudo apt-get -y update
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[submodule "build-docs"]
|
||||
path = build-docs
|
||||
url = https://github.com/philclifford/quickemu-docs.git
|
||||
url = git@github.com:philclifford/quickemu-docs.git
|
||||
|
|
|
@ -14,7 +14,7 @@ diverse, inclusive, and healthy community.
|
|||
|
||||
## Our Standards
|
||||
|
||||
Examples of behaviour that contributes to a positive environment for our
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
|
@ -25,7 +25,7 @@ community include:
|
|||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behaviour include:
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
|
@ -39,8 +39,8 @@ Examples of unacceptable behaviour include:
|
|||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behaviour and will take appropriate and fair corrective action in
|
||||
response to any behaviour that they deem inappropriate, threatening, offensive,
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
|
@ -58,7 +58,7 @@ representative at an online or offline event.
|
|||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behaviour may be
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
#quickemu channel on Discord.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
@ -73,19 +73,19 @@ the consequences for any action they deem in violation of this Code of Conduct:
|
|||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behaviour deemed
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behaviour was inappropriate. A public apology may be requested.
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behaviour. No
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
|
@ -95,7 +95,7 @@ permanent ban.
|
|||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behaviour.
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
|
@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
|
|||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behaviour, harassment of an
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
class Quickemu < Formula
|
||||
desc "Quickly create and run optimised Windows, macOS and Linux virtual machines"
|
||||
homepage "https://github.com/quickemu-project/quickemu"
|
||||
|
||||
livecheck do
|
||||
url :stable
|
||||
end
|
||||
|
||||
stable do
|
||||
latest_release = JSON.parse(Utils.safe_popen_read("curl", "-s", "https://api.github.com/repos/quickemu-project/quickemu/releases/latest"))
|
||||
version latest_release["tag_name"]
|
||||
url "https://api.github.com/repos/quickemu-project/quickemu/tarball/#{latest_release["tag_name"]}"
|
||||
end
|
||||
|
||||
head "https://github.com/quickemu-project/quickemu.git"
|
||||
license "MIT"
|
||||
|
||||
depends_on "bash"
|
||||
depends_on "cdrtools"
|
||||
depends_on "coreutils"
|
||||
depends_on "jq"
|
||||
depends_on "python3"
|
||||
depends_on "qemu"
|
||||
depends_on "samba"
|
||||
depends_on "socat"
|
||||
depends_on "swtpm"
|
||||
depends_on "usbutils"
|
||||
depends_on "zsync"
|
||||
|
||||
def install
|
||||
bin.install "quickemu"
|
||||
bin.install "quickget"
|
||||
end
|
||||
|
||||
test do
|
||||
# `test do` will create, run in and delete a temporary directory.
|
||||
#
|
||||
# This test will fail and we won't accept that! For Homebrew/homebrew-core
|
||||
# this will need to be a test that verifies the functionality of the
|
||||
# software. Run the test with `brew test quickemu`. Options passed
|
||||
# to `brew install` such as `--HEAD` also need to be provided to `brew test`.
|
||||
#
|
||||
# The installed folder is not in the path, so use the entire path to any
|
||||
# executables being tested: `system bin/"program", "do", "something"`.
|
||||
system "false"
|
||||
end
|
||||
end
|
|
@ -63,7 +63,7 @@ required to run the virtual machines.
|
|||
|
||||
## As featured on [Linux Matters](https://linuxmatters.sh) podcast!
|
||||
|
||||
The presenters of Linux Matters 🐧🎙️ are the creators of each of the principal Quickemu projects. We discussed Quickemu's 2024 reboot in [Episode 30 - Quickemu Rising From the Bashes](https://linuxmatters.sh/30). <!-- and in [Episode 32 - Quick, quicker, quickest](https://linuxmatters.sh/32) [Martin](https://github.com/flexiondotorg) unveils macOS host support for [**Quickemu**](https://github.com/quickemu-project/quickemu), [Mark](https://github.com/marxjohnson) explains the origins of the [**Quickgui**](https://github.com/quickemu-project/quickgui) desktop app and upcoming improvements, and [Alan](https://github.com/popey) debuts [**Quicktest**](https://github.com/quickemu-project/quicktest); a framework for automatically testing operating systems via Quickemu -->
|
||||
The presenters of Linux Matters 🐧🎙️ are the creators of each of the principle Quickemu projects. We discussed Quickemu's 2024 reboot in [Episode 30 - Quickemu Rising From the Bashes](https://linuxmatters.sh/30). <!-- and in [Episode 32 - Quick, quicker, quickest](https://linuxmatters.sh/32) [Martin](https://github.com/flexiondotorg) unveils macOS host support for [**Quickemu**](https://github.com/quickemu-project/quickemu), [Mark](https://github.com/marxjohnson) explains the origins of the [**Quickgui**](https://github.com/quickemu-project/quickgui) desktop app and upcoming improvements, and [Alan](https://github.com/popey) debuts [**Quicktest**](https://github.com/quickemu-project/quicktest); a framework for automatically testing operating systems via Quickemu -->
|
||||
|
||||
<div align="center">
|
||||
<a href="https://linuxmatters.sh" target="_blank"><img src="https://github.com/wimpysworld/nix-config/raw/main/.github/screenshots/linuxmatters.png" alt="Linux Matters Podcast"/></a>
|
||||
|
|
|
@ -22,7 +22,6 @@ Depends:
|
|||
procps,
|
||||
python3-minimal,
|
||||
qemu-system (>= 6.0),
|
||||
base-files (<< 13~) | qemu-system-modules-spice,
|
||||
socat,
|
||||
spice-client-gtk,
|
||||
swtpm,
|
||||
|
|
|
@ -2,3 +2,4 @@ chunkcheck usr/bin
|
|||
quickemu usr/bin
|
||||
quickget usr/bin
|
||||
quickreport usr/bin
|
||||
windowskey usr/bin
|
||||
|
|
|
@ -9,18 +9,16 @@ datadir := $(datarootdir)
|
|||
mandir := $(datarootdir)/man
|
||||
bindir := $(PREFIX)/bin
|
||||
|
||||
all: quickget.1 quickemu.1 quickemu_conf.5
|
||||
all: quickget.1 quickemu.1 quickemu_conf.1
|
||||
|
||||
clean:
|
||||
rm *.1 *.5
|
||||
rm *.1
|
||||
|
||||
install_docs: all
|
||||
install -d $(DESTDIR)$(mandir)/man1
|
||||
install -d $(DESTDIR)$(mandir)/man5
|
||||
install -m 644 quickget.1 $(DESTDIR)$(mandir)/man1
|
||||
install -m 644 quickemu.1 $(DESTDIR)$(mandir)/man1
|
||||
install -m 644 quickemu_conf.5 $(DESTDIR)$(mandir)/man5
|
||||
rm -f $(DESTDIR)$(mandir)/man1/quickemu_conf.1
|
||||
install -m 644 quickemu_conf.1 $(DESTDIR)$(mandir)/man1
|
||||
|
||||
# install -m 644 quickgui.1 $(DESTDIR)$(mandir)/man1
|
||||
|
||||
|
@ -36,7 +34,7 @@ install: install_bins install_docs
|
|||
uninstall::
|
||||
rm -f $(DESTDIR)$(mandir)/man1/quickget.1
|
||||
rm -f $(DESTDIR)$(mandir)/man1/quickemu.1
|
||||
rm -f $(DESTDIR)$(mandir)/man5/quickemu_conf.5
|
||||
rm -f $(DESTDIR)$(mandir)/man1/quickemu_conf.1
|
||||
rm -f $(DESTDIR)$(bindir)/quickget
|
||||
rm -f $(DESTDIR)$(bindir)/quickemu
|
||||
rm -f $(DESTDIR)$(bindir)/quickreport
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
PANDOC ?= pandoc
|
||||
PANDOC_OPTIONS = -f gfm+definition_lists
|
||||
|
||||
.SUFFIXES: .1.md .1 .5.md .5
|
||||
MANSECTION ?= 1
|
||||
|
||||
.1.md.1 .5.md.5:
|
||||
$(PANDOC) --standalone $(PANDOC_OPTIONS) --to man -o $@ $<
|
||||
PANDOC_OPTIONS=-f gfm+definition_lists --standalone
|
||||
|
||||
|
||||
MANPAGE.md = $(PANDOC) --standalone $(PANDOC_OPTIONS) --to man
|
||||
|
||||
%.$(MANSECTION): %.$(MANSECTION).md
|
||||
$(MANPAGE.md) $< -o $@
|
|
@ -1,6 +1,6 @@
|
|||
.\" Automatically generated by Pandoc 3.6.1
|
||||
.\" Automatically generated by Pandoc 3.2.1
|
||||
.\"
|
||||
.TH "QUICKEMU" "1" "December 30, 2024" "quickemu" "Quickemu User Manual"
|
||||
.TH "QUICKEMU" "1" "June 29, 2024" "quickemu" "Quickemu User Manual"
|
||||
.SH NAME
|
||||
quickemu \- A quick VM builder and manager
|
||||
.SH SYNOPSIS
|
||||
|
@ -190,7 +190,7 @@ Host support for \f[B]Linux and macOS\f[R]
|
|||
.IP \[bu] 2
|
||||
\f[B]Windows\f[R] 10 and 11 including TPM 2.0
|
||||
.IP \[bu] 2
|
||||
\f[B]Windows Server\f[R] 2022 2019 2016
|
||||
\f[B]Windows Server\f[R] 2022 2019 2016 2012\-r2
|
||||
.IP \[bu] 2
|
||||
\c
|
||||
.UR https://ubuntu.com/desktop
|
||||
|
@ -568,12 +568,11 @@ You can also use \f[CR]quickget\f[R] with advanced options :
|
|||
.IP
|
||||
.EX
|
||||
\-\-download <os> <release> [edition] : Download image; no VM configuration
|
||||
\-\-create\-config <os> [path/url] [flags] : Create VM config for an OS image
|
||||
\-\-create\-config <os> [path/url] : Create VM config for a OS image
|
||||
\-\-open\-homepage <os> : Open homepage for the OS
|
||||
\-\-show [os] : Show OS information
|
||||
\-\-version : Show version
|
||||
\-\-help : Show this help message
|
||||
\-\-disable\-unattended : Force quickget not to set up an unattended installation
|
||||
\-\-url [os] [release] [edition] : Show image URL(s)
|
||||
\-\-check [os] [release] [edition] : Check image URL(s)
|
||||
\-\-list : List all supported systems
|
||||
|
@ -691,8 +690,6 @@ wiki
|
|||
.IP \[bu] 2
|
||||
\f[CR]lmde\f[R] (Linux Mint Debian Edition)
|
||||
.IP \[bu] 2
|
||||
\f[CR]maboxlinux\f[R] (Mabox Linux)
|
||||
.IP \[bu] 2
|
||||
\f[CR]mageia\f[R] (Mageia)
|
||||
.IP \[bu] 2
|
||||
\f[CR]manjaro\f[R] (Manjaro)
|
||||
|
@ -727,8 +724,6 @@ wiki
|
|||
.IP \[bu] 2
|
||||
\f[CR]primtux\f[R] (PrimTux)
|
||||
.IP \[bu] 2
|
||||
\f[CR]proxmox\-ve\f[R] (Proxmox VE)
|
||||
.IP \[bu] 2
|
||||
\f[CR]pureos\f[R] (PureOS)
|
||||
.IP \[bu] 2
|
||||
\f[CR]reactos\f[R] (ReactOS)
|
||||
|
@ -1329,6 +1324,6 @@ Full sources at: \c
|
|||
.UR https://github.com/quickemu-project/quickemu
|
||||
.UE \c
|
||||
.PP
|
||||
quickemu_conf(5), quickget(1), quickgui(1)
|
||||
quickemu_conf(1), quickget(1), quickgui(1)
|
||||
.SH AUTHORS
|
||||
Martin Wimpress.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
author: Martin Wimpress
|
||||
date: December 30, 2024
|
||||
date: June 29, 2024
|
||||
footer: quickemu
|
||||
header: Quickemu User Manual
|
||||
section: 1
|
||||
|
@ -175,7 +175,7 @@ Haiku, KolibriOS, OpenIndiana, ReactOS, and more.
|
|||
- Host support for **Linux and macOS**
|
||||
- **macOS** Sonoma, Ventura, Monterey, Big Sur, Catalina & Mojave
|
||||
- **Windows** 10 and 11 including TPM 2.0
|
||||
- **Windows Server** 2022 2019 2016
|
||||
- **Windows Server** 2022 2019 2016 2012-r2
|
||||
- [Ubuntu](https://ubuntu.com/desktop) and all the **[official Ubuntu
|
||||
flavours](https://ubuntu.com/download/flavours)**
|
||||
- **Nearly 1000 operating system editions are supported!**
|
||||
|
@ -394,12 +394,11 @@ You can also use `quickget` with advanced options :
|
|||
|
||||
``` text
|
||||
--download <os> <release> [edition] : Download image; no VM configuration
|
||||
--create-config <os> [path/url] [flags] : Create VM config for an OS image
|
||||
--create-config <os> [path/url] : Create VM config for a OS image
|
||||
--open-homepage <os> : Open homepage for the OS
|
||||
--show [os] : Show OS information
|
||||
--version : Show version
|
||||
--help : Show this help message
|
||||
--disable-unattended : Force quickget not to set up an unattended installation
|
||||
--url [os] [release] [edition] : Show image URL(s)
|
||||
--check [os] [release] [edition] : Check image URL(s)
|
||||
--list : List all supported systems
|
||||
|
@ -473,7 +472,6 @@ Further information is available from the project
|
|||
- `linuxlite` (Linux Lite)
|
||||
- `linuxmint` (Linux Mint)
|
||||
- `lmde` (Linux Mint Debian Edition)
|
||||
- `maboxlinux` (Mabox Linux)
|
||||
- `mageia` (Mageia)
|
||||
- `manjaro` (Manjaro)
|
||||
- `mxlinux` (MX Linux)
|
||||
|
@ -491,7 +489,6 @@ Further information is available from the project
|
|||
- `popos` (Pop!\_OS)
|
||||
- `porteus` (Porteus)
|
||||
- `primtux` (PrimTux)
|
||||
- `proxmox-ve` (Proxmox VE)
|
||||
- `pureos` (PureOS)
|
||||
- `reactos` (ReactOS)
|
||||
- `rebornos` (RebornOS)
|
||||
|
@ -851,4 +848,4 @@ Submit bug reports online at:
|
|||
|
||||
Full sources at: <https://github.com/quickemu-project/quickemu>
|
||||
|
||||
quickemu_conf(5), quickget(1), quickgui(1)
|
||||
quickemu_conf(1), quickget(1), quickgui(1)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" Automatically generated by Pandoc 3.6.1
|
||||
.\" Automatically generated by Pandoc 3.2
|
||||
.\"
|
||||
.TH "QUICKEMU_CONF" "5" "December 30, 2024" "quickemu_conf" "Quickemu Configuration Manual"
|
||||
.TH "QUICKEMU_CONF" "1" "June 24, 2024" "quickemu_conf" "Quickemu Configuration Manual"
|
||||
.SH NAME
|
||||
quickemu_conf \- Options and parameters in the quickemu <vm>.conf
|
||||
.SH DESCRIPTION
|
|
@ -1,9 +1,9 @@
|
|||
---
|
||||
author: Martin Wimpress
|
||||
date: December 30, 2024
|
||||
date: June 24, 2024
|
||||
footer: quickemu_conf
|
||||
header: Quickemu Configuration Manual
|
||||
section: 5
|
||||
section: 1
|
||||
title: QUICKEMU_CONF
|
||||
---
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
.\" Automatically generated by Pandoc 3.6.1
|
||||
.\" Automatically generated by Pandoc 3.2
|
||||
.\"
|
||||
.TH "QUICKGET" "1" "December 30, 2024" "quickget" "Quickget User Manual"
|
||||
.TH "QUICKGET" "1" "June 24, 2024" "quickget" "Quickget User Manual"
|
||||
.SH NAME
|
||||
quickget \- download and prepare materials for building a quickemu VM
|
||||
.SH SYNOPSIS
|
||||
|
@ -129,12 +129,11 @@ You can also use \f[CR]quickget\f[R] with advanced options :
|
|||
.IP
|
||||
.EX
|
||||
\-\-download <os> <release> [edition] : Download image; no VM configuration
|
||||
\-\-create\-config <os> [path/url] [flags] : Create VM config for an OS image
|
||||
\-\-create\-config <os> [path/url] : Create VM config for a OS image
|
||||
\-\-open\-homepage <os> : Open homepage for the OS
|
||||
\-\-show [os] : Show OS information
|
||||
\-\-version : Show version
|
||||
\-\-help : Show this help message
|
||||
\-\-disable\-unattended : Force quickget not to set up an unattended installation
|
||||
\-\-url [os] [release] [edition] : Show image URL(s)
|
||||
\-\-check [os] [release] [edition] : Check image URL(s)
|
||||
\-\-list : List all supported systems
|
||||
|
@ -252,8 +251,6 @@ wiki
|
|||
.IP \[bu] 2
|
||||
\f[CR]lmde\f[R] (Linux Mint Debian Edition)
|
||||
.IP \[bu] 2
|
||||
\f[CR]maboxlinux\f[R] (Mabox Linux)
|
||||
.IP \[bu] 2
|
||||
\f[CR]mageia\f[R] (Mageia)
|
||||
.IP \[bu] 2
|
||||
\f[CR]manjaro\f[R] (Manjaro)
|
||||
|
@ -288,8 +285,6 @@ wiki
|
|||
.IP \[bu] 2
|
||||
\f[CR]primtux\f[R] (PrimTux)
|
||||
.IP \[bu] 2
|
||||
\f[CR]proxmox\-ve\f[R] (Proxmox VE)
|
||||
.IP \[bu] 2
|
||||
\f[CR]pureos\f[R] (PureOS)
|
||||
.IP \[bu] 2
|
||||
\f[CR]reactos\f[R] (ReactOS)
|
||||
|
@ -705,6 +700,6 @@ Full sources at: \c
|
|||
.UR https://github.com/quickemu-project/quickemu
|
||||
.UE \c
|
||||
.PP
|
||||
quickemu(1), quickemu_conf(5), quickgui(1)
|
||||
quickemu(1), quickemu_conf(1), quickgui(1)
|
||||
.SH AUTHORS
|
||||
Martin Wimpress.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
author: Martin Wimpress
|
||||
date: December 30, 2024
|
||||
date: June 24, 2024
|
||||
footer: quickget
|
||||
header: Quickget User Manual
|
||||
section: 1
|
||||
|
@ -124,12 +124,11 @@ You can also use `quickget` with advanced options :
|
|||
|
||||
``` text
|
||||
--download <os> <release> [edition] : Download image; no VM configuration
|
||||
--create-config <os> [path/url] [flags] : Create VM config for an OS image
|
||||
--create-config <os> [path/url] : Create VM config for a OS image
|
||||
--open-homepage <os> : Open homepage for the OS
|
||||
--show [os] : Show OS information
|
||||
--version : Show version
|
||||
--help : Show this help message
|
||||
--disable-unattended : Force quickget not to set up an unattended installation
|
||||
--url [os] [release] [edition] : Show image URL(s)
|
||||
--check [os] [release] [edition] : Check image URL(s)
|
||||
--list : List all supported systems
|
||||
|
@ -203,7 +202,6 @@ Further information is available from the project
|
|||
- `linuxlite` (Linux Lite)
|
||||
- `linuxmint` (Linux Mint)
|
||||
- `lmde` (Linux Mint Debian Edition)
|
||||
- `maboxlinux` (Mabox Linux)
|
||||
- `mageia` (Mageia)
|
||||
- `manjaro` (Manjaro)
|
||||
- `mxlinux` (MX Linux)
|
||||
|
@ -221,7 +219,6 @@ Further information is available from the project
|
|||
- `popos` (Pop!\_OS)
|
||||
- `porteus` (Porteus)
|
||||
- `primtux` (PrimTux)
|
||||
- `proxmox-ve` (Proxmox VE)
|
||||
- `pureos` (PureOS)
|
||||
- `reactos` (ReactOS)
|
||||
- `rebornos` (RebornOS)
|
||||
|
@ -487,4 +484,4 @@ Submit bug reports online at:
|
|||
|
||||
Full sources at: <https://github.com/quickemu-project/quickemu>
|
||||
|
||||
quickemu(1), quickemu_conf(5), quickgui(1)
|
||||
quickemu(1), quickemu_conf(1), quickgui(1)
|
||||
|
|
20
flake.lock
20
flake.lock
|
@ -2,12 +2,12 @@
|
|||
"nodes": {
|
||||
"flake-schemas": {
|
||||
"locked": {
|
||||
"lastModified": 1721999734,
|
||||
"narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
|
||||
"rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
|
||||
"revCount": 75,
|
||||
"lastModified": 1697467827,
|
||||
"narHash": "sha256-j8SR19V1SRysyJwpOBF4TLuAvAjF5t+gMiboN4gYQDU=",
|
||||
"rev": "764932025c817d4e500a8d2a4d8c565563923d29",
|
||||
"revCount": 29,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
|
||||
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.2/018b3da8-4cc3-7fbb-8ff7-1588413c53e2/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
@ -16,12 +16,12 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1756217674,
|
||||
"narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=",
|
||||
"rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620",
|
||||
"revCount": 808864,
|
||||
"lastModified": 1717952948,
|
||||
"narHash": "sha256-mJi4/gjiwQlSaxjA6AusXBN/6rQRaPCycR7bd8fydnQ=",
|
||||
"rev": "2819fffa7fa42156680f0d282c60d81e8fb185b7",
|
||||
"revCount": 631440,
|
||||
"type": "tarball",
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2505.808864%2Brev-4e7667a90c167f7a81d906e5a75cba4ad8bee620/0198eaa3-105a-74fa-a9b2-0a930acea8de/source.tar.gz"
|
||||
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2405.631440%2Brev-2819fffa7fa42156680f0d282c60d81e8fb185b7/0190034c-678d-7039-b45c-fa38168f2500/source.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
schemas = flake-schemas.schemas;
|
||||
|
||||
# Define overlays for each supported system
|
||||
overlays = {
|
||||
overlays = forEachSupportedSystem ({pkgs, system, ...}: {
|
||||
default = final: prev: {
|
||||
quickemu = final.callPackage ./package.nix { };
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
# Define packages for each supported system
|
||||
packages = forEachSupportedSystem ({pkgs, system, ...}: rec {
|
||||
|
|
|
@ -81,12 +81,12 @@ stdenv.mkDerivation rec {
|
|||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
installManPage docs/quickget.1 docs/quickemu.1 docs/quickemu_conf.5
|
||||
install -Dm755 -t "$out/bin" chunkcheck quickemu quickget quickreport
|
||||
installManPage docs/quickget.1 docs/quickemu.1 docs/quickemu_conf.1
|
||||
install -Dm755 -t "$out/bin" chunkcheck quickemu quickget quickreport windowskey
|
||||
|
||||
# spice-gtk needs to be put in suffix so that when virtualisation.spiceUSBRedirection
|
||||
# is enabled, the wrapped spice-client-glib-usb-acl-helper is used
|
||||
for f in chunkcheck quickget quickemu quickreport; do
|
||||
for f in chunkcheck quickget quickemu quickreport windowskey; do
|
||||
wrapProgram $out/bin/$f \
|
||||
--prefix PATH : "${lib.makeBinPath runtimePaths}" \
|
||||
--suffix PATH : "${lib.makeBinPath [ spice-gtk ]}"
|
||||
|
|
97
quickemu
97
quickemu
|
@ -10,7 +10,7 @@ function ignore_msrs_always() {
|
|||
# Make sure the host has /etc/modprobe.d
|
||||
if [ -d /etc/modprobe.d ]; then
|
||||
# Skip if ignore_msrs is already enabled, assumes initramfs has been rebuilt
|
||||
if ! grep -lq 'ignore_msrs=Y' /etc/modprobe.d/kvm-quickemu.conf >/dev/null 2>&1; then
|
||||
if grep -lq 'ignore_msrs=Y' /etc/modprobe.d/kvm-quickemu.conf >/dev/null 2>&1; then
|
||||
echo "options kvm ignore_msrs=Y" | sudo tee /etc/modprobe.d/kvm-quickemu.conf
|
||||
sudo update-initramfs -k all -u
|
||||
fi
|
||||
|
@ -323,10 +323,6 @@ function configure_cpu() {
|
|||
HOST_CPU_SOCKETS=$(get_cpu_info 'Socket')
|
||||
HOST_CPU_VENDOR=$(get_cpu_info 'Vendor')
|
||||
|
||||
if [ "${HOST_CPU_SOCKETS}" = "-" ]; then
|
||||
HOST_CPU_SOCKETS=1
|
||||
fi
|
||||
|
||||
CPU_MODEL="host"
|
||||
QEMU_ACCEL="tcg"
|
||||
# Configure appropriately for the host platform
|
||||
|
@ -395,16 +391,6 @@ function configure_cpu() {
|
|||
fi
|
||||
fi
|
||||
|
||||
# SMM is also required for Linux guests when Secure Boot is enabled
|
||||
if [ "${secureboot}" == "on" ]; then
|
||||
if [ "${guest_os}" == "linux" ]; then
|
||||
# SMM is not available on QEMU for macOS via Homebrew
|
||||
if [ "${OS_KERNEL}" == "Linux" ]; then
|
||||
SMM="on"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
case ${guest_os} in
|
||||
batocera|freedos|haiku|solaris) MACHINE_TYPE="pc";;
|
||||
kolibrios|reactos)
|
||||
|
@ -424,7 +410,7 @@ function configure_cpu() {
|
|||
# A CPU with fma is required for Metal support
|
||||
# A CPU with invtsc is required for macOS to boot
|
||||
case ${macos_release} in
|
||||
ventura|sonoma|sequoia)
|
||||
ventura|sonoma)
|
||||
# A CPU with AVX2 support is required for >= macOS Ventura
|
||||
if check_cpu_flag sse4_2 && check_cpu_flag avx2; then
|
||||
if [ "${HOST_CPU_VENDOR}" != "GenuineIntel" ] && [ -z "${HYPERVISOR}" ]; then
|
||||
|
@ -614,12 +600,6 @@ function configure_ram() {
|
|||
fi
|
||||
}
|
||||
|
||||
function is_firmware_qcow2() {
|
||||
# Check for the magic bytes that indicate the firmware is in qcow2 format,
|
||||
# otherwise default to assuming firmware files are in raw format
|
||||
[ "$(head -c 4 "$1")" = "QFI"$'\xfb' ] && echo "true" || echo "false"
|
||||
}
|
||||
|
||||
function configure_bios() {
|
||||
# Always Boot macOS using EFI
|
||||
if [ "${guest_os}" == "macos" ]; then
|
||||
|
@ -679,15 +659,13 @@ function configure_bios() {
|
|||
if [ -n "${EFI_CODE}" ] || [ ! -e "${EFI_CODE}" ]; then
|
||||
case ${secureboot} in
|
||||
on) # shellcheck disable=SC2054,SC2140
|
||||
ovmfs=("${SHARE_PATH}/OVMF/OVMF_CODE_4M.secboot.fd","${SHARE_PATH}/OVMF/OVMF_VARS_4M.ms.fd" \
|
||||
"${SHARE_PATH}/edk2/ovmf/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2/ovmf/OVMF_VARS.secboot.fd" \
|
||||
ovmfs=("${SHARE_PATH}/OVMF/OVMF_CODE_4M.secboot.fd","${SHARE_PATH}/OVMF/OVMF_VARS_4M.fd" \
|
||||
"${SHARE_PATH}/edk2/ovmf/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2/ovmf/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/OVMF/x64/OVMF_CODE.secboot.fd","${SHARE_PATH}/OVMF/x64/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/edk2-ovmf/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2-ovmf/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-vars.bin" \
|
||||
"${SHARE_PATH}/qemu/edk2-x86_64-secure-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \
|
||||
"${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/edk2/x64/OVMF_CODE.secboot.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" \
|
||||
"${SHARE_PATH}/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2","${SHARE_PATH}/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2"
|
||||
"${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd"
|
||||
);;
|
||||
*) # shellcheck disable=SC2054,SC2140
|
||||
ovmfs=("${SHARE_PATH}/OVMF/OVMF_CODE_4M.fd","${SHARE_PATH}/OVMF/OVMF_VARS_4M.fd" \
|
||||
|
@ -697,9 +675,7 @@ function configure_bios() {
|
|||
"${SHARE_PATH}/edk2-ovmf/OVMF_CODE.fd","${SHARE_PATH}/edk2-ovmf/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/qemu/ovmf-x86_64-4m-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-4m-vars.bin" \
|
||||
"${SHARE_PATH}/qemu/edk2-x86_64-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \
|
||||
"${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \
|
||||
"${SHARE_PATH}/edk2/x64/OVMF_CODE.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" \
|
||||
"${SHARE_PATH}/edk2/ovmf/OVMF_CODE_4M.qcow2","${SHARE_PATH}/edk2/ovmf/OVMF_VARS_4M.qcow2"
|
||||
"${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd"
|
||||
);;
|
||||
esac
|
||||
# Attempt each EFI_CODE file one by one, selecting the corresponding code and vars
|
||||
|
@ -730,14 +706,6 @@ function configure_bios() {
|
|||
echo " - EFI: ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist."
|
||||
exit 1
|
||||
fi
|
||||
# Write destination vars file with correct extension
|
||||
# based on source format of the EFI_EXTRA_VARS file
|
||||
QCOW2VARS=$(is_firmware_qcow2 "${EFI_EXTRA_VARS}")
|
||||
if [ "${QCOW2VARS}" = "true" ]; then
|
||||
EFI_VARS="${VMDIR}/OVMF_VARS.qcow2"
|
||||
else
|
||||
EFI_VARS="${VMDIR}/OVMF_VARS.fd"
|
||||
fi
|
||||
efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}"
|
||||
fi
|
||||
|
||||
|
@ -756,7 +724,7 @@ function configure_bios() {
|
|||
EFI_CODE=$(realpath "${EFI_CODE}")
|
||||
echo "${EFI_CODE}"
|
||||
fi
|
||||
BOOT_STATUS="EFI (${guest_os^}), OVMF (${EFI_CODE}), EFI Vars (${EFI_VARS}), SecureBoot (${secureboot})."
|
||||
BOOT_STATUS="EFI (${guest_os^}), OVMF (${EFI_CODE}), SecureBoot (${secureboot})."
|
||||
else
|
||||
BOOT_STATUS="Legacy BIOS (${guest_os^})"
|
||||
boot="legacy"
|
||||
|
@ -768,7 +736,7 @@ function configure_bios() {
|
|||
|
||||
function configure_os_quirks() {
|
||||
|
||||
if [ "${guest_os}" == "batocera" ] || [ "${guest_os}" == "haiku" ] || [ "${guest_os}" == "kolibrios" ]; then
|
||||
if [ "${guest_os}" == "batocera" ] || [ "${guest_os}" == "freedos" ] || [ "${guest_os}" == "haiku" ] || [ "${guest_os}" == "kolibrios" ]; then
|
||||
NET_DEVICE="rtl8139"
|
||||
fi
|
||||
|
||||
|
@ -779,8 +747,7 @@ function configure_os_quirks() {
|
|||
case ${guest_os} in
|
||||
windows-server) NET_DEVICE="e1000";;
|
||||
*bsd|linux*|windows) NET_DEVICE="virtio-net";;
|
||||
freedos) sound_card="sb16"
|
||||
NET_DEVICE="pcnet";;
|
||||
freedos) sound_card="sb16";;
|
||||
*solaris) usb_controller="xhci"
|
||||
sound_card="ac97";;
|
||||
reactos) NET_DEVICE="e1000"
|
||||
|
@ -793,7 +760,7 @@ function configure_os_quirks() {
|
|||
# * VirtIO Memory Balloning is supported since Big Sur (https://pmhahn.github.io/virtio-balloon/)
|
||||
# * VirtIO RNG is supported since Big Sur, but exposed to all guests by default.
|
||||
case ${macos_release} in
|
||||
big-sur|monterey|ventura|sonoma|sequoia)
|
||||
big-sur|monterey|ventura|sonoma)
|
||||
BALLOON="-device virtio-balloon"
|
||||
MAC_DISK_DEV="virtio-blk-pci"
|
||||
NET_DEVICE="virtio-net"
|
||||
|
@ -907,23 +874,12 @@ function configure_storage() {
|
|||
}
|
||||
|
||||
function configure_display() {
|
||||
# Determine which audio driver use between Pulseaudio or ALSA
|
||||
local AUDIO_DRIVER="pa"
|
||||
if pidof pipewire >/dev/null 2>&1; then
|
||||
# QEMU's pipewire audio backend was added in version 8.1
|
||||
if [ "${QEMU_VER_SHORT}" -ge 81 ]; then
|
||||
AUDIO_DRIVER="pipewire"
|
||||
fi
|
||||
elif ! pidof pulseaudio >/dev/null 2>&1; then
|
||||
AUDIO_DRIVER="alsa"
|
||||
fi
|
||||
|
||||
# Setup the appropriate audio device based on the display output
|
||||
# https://www.kraxel.org/blog/2020/01/qemu-sound-audiodev/
|
||||
case ${display} in
|
||||
cocoa) AUDIO_DEV="coreaudio,id=audio0";;
|
||||
none|spice|spice-app) AUDIO_DEV="spice,id=audio0";;
|
||||
*) AUDIO_DEV="${AUDIO_DRIVER},id=audio0";;
|
||||
*) AUDIO_DEV="pa,id=audio0";;
|
||||
esac
|
||||
|
||||
# Determine a sane resolution for Linux guests.
|
||||
|
@ -1130,9 +1086,7 @@ function configure_file_sharing() {
|
|||
fi
|
||||
|
||||
# SMB
|
||||
# We need to search in NixOS compatible paths as well as the standard location
|
||||
# since /usr/sbin/smbd may not be in the PATH.
|
||||
if [ -x "$(command -v smbd)" ] || [ -x "/usr/sbin/smbd" ]; then
|
||||
if [ -x "$(command -v smbd)" ]; then
|
||||
NET+=",smb=${PUBLIC}"
|
||||
echo " - smbd: On guest: smb://10.0.2.4/qemu"
|
||||
fi
|
||||
|
@ -1214,8 +1168,6 @@ function vm_boot() {
|
|||
# Set the hostname of the VM
|
||||
NET="user,hostname=${VMNAME}"
|
||||
|
||||
echo "#!/usr/bin/env bash" > "${VMDIR}/${VMNAME}.sh"
|
||||
|
||||
configure_cpu
|
||||
configure_ram
|
||||
configure_bios
|
||||
|
@ -1228,6 +1180,8 @@ function vm_boot() {
|
|||
configure_usb
|
||||
configure_tpm
|
||||
|
||||
echo "#!/usr/bin/env bash" > "${VMDIR}/${VMNAME}.sh"
|
||||
|
||||
# Changing process name is not supported on macOS
|
||||
if [ "${OS_KERNEL}" == "Linux" ]; then
|
||||
# shellcheck disable=SC2054,SC2206,SC2140
|
||||
|
@ -1237,16 +1191,9 @@ function vm_boot() {
|
|||
args+=(-machine ${MACHINE_TYPE},smm=${SMM},vmport=off,accel=${QEMU_ACCEL} ${GUEST_TWEAKS}
|
||||
${CPU} ${SMP}
|
||||
-m ${RAM_VM} ${BALLOON}
|
||||
-rtc base=localtime,clock=host,driftfix=slew
|
||||
-pidfile "${VMDIR}/${VMNAME}.pid")
|
||||
|
||||
if [ "${guest_os}" == "windows" ] || [ "${guest_os}" == "windows-server" ] || [ "${guest_os}" == "reactos" ] || [ "${guest_os}" == "freedos" ]; then
|
||||
# shellcheck disable=SC2054
|
||||
args+=(-rtc base=localtime,clock=host,driftfix=slew)
|
||||
else
|
||||
# shellcheck disable=SC2054
|
||||
args+=(-rtc base=utc,clock=host)
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2206
|
||||
args+=(${VIDEO} -display ${DISPLAY_RENDER})
|
||||
# Only enable SPICE is using SPICE display
|
||||
|
@ -1391,14 +1338,10 @@ function vm_boot() {
|
|||
# Add the disks
|
||||
# - https://turlucode.com/qemu-disk-io-performance-comparison-native-or-threads-windows-10-version/
|
||||
if [[ "${boot}" == *"efi"* ]]; then
|
||||
QCOW2CODE=$(is_firmware_qcow2 "${EFI_CODE}")
|
||||
QCOW2VARS=$(is_firmware_qcow2 "${EFI_VARS}")
|
||||
if [ "${QCOW2CODE}" = "true" ]; then EFI_CODE_FORMAT="qcow2"; else EFI_CODE_FORMAT="raw"; fi
|
||||
if [ "${QCOW2VARS}" = "true" ]; then EFI_VARS_FORMAT="qcow2"; else EFI_VARS_FORMAT="raw"; fi
|
||||
# shellcheck disable=SC2054
|
||||
args+=(-global driver=cfi.pflash01,property=secure,value=on
|
||||
-drive if=pflash,format="${EFI_CODE_FORMAT}",unit=0,file="${EFI_CODE}",readonly=on
|
||||
-drive if=pflash,format="${EFI_VARS_FORMAT}",unit=1,file="${EFI_VARS}")
|
||||
-drive if=pflash,format=raw,unit=0,file="${EFI_CODE}",readonly=on
|
||||
-drive if=pflash,format=raw,unit=1,file="${EFI_VARS}")
|
||||
fi
|
||||
|
||||
if [ -n "${iso}" ] && [ "${guest_os}" == "freedos" ]; then
|
||||
|
@ -1823,7 +1766,6 @@ function fileshare_param_check() {
|
|||
|
||||
if [ ! -d "${PUBLIC}" ]; then
|
||||
echo " - WARNING! Public directory: '${PUBLIC}' doesn't exist!"
|
||||
PUBLIC=""
|
||||
else
|
||||
PUBLIC_TAG="Public-${USER,,}"
|
||||
PUBLIC_PERMS=$(${STAT} -c "%A" "${PUBLIC}")
|
||||
|
@ -1951,7 +1893,7 @@ VMPATH=""
|
|||
# shellcheck disable=SC2155
|
||||
readonly LAUNCHER=$(basename "${0}")
|
||||
readonly DISK_MIN_SIZE=$((197632 * 8))
|
||||
readonly VERSION="4.9.8"
|
||||
readonly VERSION="4.9.6"
|
||||
|
||||
# TODO: Make this run the native architecture binary
|
||||
ARCH_VM="x86_64"
|
||||
|
@ -1975,8 +1917,7 @@ if [ "${OS_KERNEL}" == "Darwin" ]; then
|
|||
fi
|
||||
|
||||
QEMU_VER_LONG=$(${QEMU_IMG} --version | head -n 1 | awk '{print $3}')
|
||||
# strip patch version and remove dots. 6.0.0 => 60 / 10.0.0 => 100
|
||||
QEMU_VER_SHORT=$(echo "${QEMU_VER_LONG%.*}" | sed 's/\.//g')
|
||||
QEMU_VER_SHORT=$(echo "${QEMU_VER_LONG//./}" | cut -c1-2)
|
||||
if [ "${QEMU_VER_SHORT}" -lt 60 ]; then
|
||||
echo "ERROR! QEMU 6.0.0 or newer is required, detected ${QEMU_VER_LONG}."
|
||||
exit 1
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import html.parser
|
||||
import os
|
||||
import sys
|
||||
import urllib.request
|
||||
|
||||
|
||||
"""
|
||||
Download Windows product keys from MicroSoft
|
||||
"""
|
||||
|
||||
key_page_url = "https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys"
|
||||
|
||||
|
||||
def usage():
|
||||
script = os.path.basename(sys.argv[0])
|
||||
message = f"""Usage: {script} [windows-version]
|
||||
|
||||
To specify the version of Windows you'd like, pass a string that matches the
|
||||
name of the operating system you'd like to download. Case doesn't matter, so
|
||||
you can use "windows 10" or "Windows 10".
|
||||
|
||||
e.g.
|
||||
|
||||
{script} "Windows 10"
|
||||
{script} "enterprise"
|
||||
|
||||
"""
|
||||
print(message, file=sys.stderr)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def download_page(url):
|
||||
response = urllib.request.urlopen(url)
|
||||
return response.read().decode("utf-8")
|
||||
|
||||
|
||||
class WindowsKeyPageParser(html.parser.HTMLParser):
|
||||
def __init__(self, *, convert_charrefs=True):
|
||||
super().__init__(convert_charrefs=True)
|
||||
self.product_keys = {}
|
||||
self.parsing_os = False
|
||||
|
||||
def handle_starttag(self, tag, attrs):
|
||||
self.parsing_os = tag == "td"
|
||||
|
||||
def handle_endtag(self, tag):
|
||||
self.parsing_os = False
|
||||
|
||||
def handle_data(self, data):
|
||||
if self.parsing_os:
|
||||
self.stash_table_cell(data)
|
||||
|
||||
def stash_table_cell(self, data):
|
||||
if "Windows" in data:
|
||||
self.current_os = data
|
||||
else:
|
||||
product_key = data
|
||||
self.product_keys[self.current_os] = product_key
|
||||
|
||||
|
||||
def find_keys_for_all_versions(markup):
|
||||
parser = WindowsKeyPageParser()
|
||||
parser.feed(markup)
|
||||
return parser.product_keys
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
arg = sys.argv[1]
|
||||
except IndexError:
|
||||
windows_version = ""
|
||||
else:
|
||||
if arg in ["-h", "--help"]:
|
||||
usage()
|
||||
windows_version = arg
|
||||
|
||||
markup = download_page(key_page_url)
|
||||
product_keys = find_keys_for_all_versions(markup)
|
||||
|
||||
for os_name, product_key in product_keys.items():
|
||||
if windows_version.lower() in os_name.lower():
|
||||
print(f"{os_name}: {product_key}")
|
Loading…
Reference in New Issue