QEMU: Difference between revisions
imported>Abowen Add Quick EMU information |
|||
(9 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
[https://www.qemu.org/ QEMU] is a generic and open source machine emulator and virtualizer. | |||
== | == Setup == | ||
To install the main QEMU program system-wide, add the following to your <code>configuration.nix</code>:<syntaxhighlight lang=nix> | |||
<syntaxhighlight lang=nix> | |||
environment = { | environment = { | ||
systemPackages = [ pkgs.qemu ]; | systemPackages = [ pkgs.qemu ]; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Evaluate}} | |||
=== Quick EMU === | === Quick EMU === | ||
Line 15: | Line 16: | ||
https://github.com/quickemu-project/quickemu | https://github.com/quickemu-project/quickemu | ||
<syntaxhighlight lang=bash> | |||
quickget windows 11 | quickget windows 11 | ||
quickemu --vm windows-11.conf | quickemu --vm windows-11.conf | ||
</syntaxhighlight> | |||
== | == Configuration == | ||
=== UEFI firmware support === | |||
To enable UEFI firmware support in Virt-Manager, Libvirt, Gnome-Boxes etc. add following snippet to your system configuration and apply it<syntaxhighlight lang="nix"> | |||
systemd.tmpfiles.rules = [ "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" ]; | |||
</syntaxhighlight> | |||
<syntaxhighlight lang=nix> | === Run binaries of different architecture === | ||
Following configuration will enable the emulation of different architectures. For example to run aarch64 and riscv64 binaries on an native x86_64 host, add following part to your system configuration, apply it and reboot your system.<syntaxhighlight lang="nix"> | |||
boot.binfmt.emulatedSystems = [ | |||
"aarch64-linux" | |||
"riscv64-linux" | |||
]; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Tips and tricks == | |||
=== Emulate different architecture === | |||
The following [[Flake]] file constructs and executes a NixOS virtual machine with an architecture distinct from that of the host system; in this example, it utilizes aarch64. | |||
Save the snippet as <code>flake.nix</code> and run <code>nix run</code> in the same directory to bootup the VM.<syntaxhighlight lang="nix"> | |||
{ | |||
description = "Nix flake to build and run a NixOS VM for aarch64"; | |||
inputs = { | |||
nixpkgs.url = "nixpkgs/nixos-24.05"; | |||
}; | |||
outputs = { self, nixpkgs }: | |||
let | |||
pkgs = import nixpkgs { system = "x86_64-linux"; }; | |||
pkgsAarch64 = import nixpkgs { system = "aarch64-linux"; }; | |||
iso = (pkgsAarch64.nixos { | |||
imports = [ "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-base.nix" ]; | |||
}).config.system.build.isoImage; | |||
vmScript = pkgs.writeScriptBin "run-nixos-vm" '' | |||
#!${pkgs.runtimeShell} | |||
${pkgs.qemu}/bin/qemu-system-aarch64 \ | |||
-machine virt,gic-version=max \ | |||
-cpu max \ | |||
-m 2G \ | |||
-smp 4 \ | |||
-drive file=$(echo ${iso}/iso/*.iso),format=raw,readonly=on \ | |||
-nographic \ | |||
-bios ${pkgsAarch64.OVMF.fd}/FV/QEMU_EFI.fd | |||
''; | |||
in { | |||
defaultPackage.x86_64-linux = vmScript; | |||
}; | |||
} | |||
</syntaxhighlight>Alternatively a different iso file can be specified in the drive-parameter, for example for Ubuntu Server ARM64. | |||
[[Category:Virtualization]] |