42 lines
1.8 KiB
Bash
42 lines
1.8 KiB
Bash
#!/bin/bash
|
|
# Exit immediately on error, treat unset variables as errors, propagate pipe failures.
|
|
set -euo pipefail
|
|
# Load shared log/warn/skip helpers from the installer library.
|
|
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
|
|
|
|
log "Installing QEMU/KVM + libvirt stack + virt-manager..."
|
|
# qemu-full: full QEMU build with all emulation targets and utilities;
|
|
# libvirt: management daemon + API used by virt-manager; virt-manager: GUI front-end;
|
|
# virt-viewer: lightweight display client for VM consoles;
|
|
# dnsmasq: DHCP/DNS for the default NAT network; bridge-utils: bridge management;
|
|
# edk2-ovmf: UEFI firmware images for UEFI-boot VMs; swtpm: software TPM emulator;
|
|
# vde2: virtual distributed Ethernet for advanced networking topologies.
|
|
sudo pacman -S --noconfirm --needed \
|
|
qemu-full \
|
|
libvirt \
|
|
virt-manager \
|
|
virt-viewer \
|
|
dnsmasq \
|
|
bridge-utils \
|
|
edk2-ovmf \
|
|
swtpm \
|
|
vde2
|
|
|
|
log "Enabling libvirtd service..."
|
|
# libvirtd must run as root to manage KVM devices and network namespaces.
|
|
enable_service libvirtd.service; start_service libvirtd.service
|
|
|
|
log "Configuring default NAT network for autostart..."
|
|
# The 'default' NAT network is created by libvirt on first start; net-autostart
|
|
# makes it come up automatically after each libvirtd restart.
|
|
# 2>/dev/null || true: suppress the error if the network does not yet exist
|
|
# (it will be created on first libvirtd run), preventing set -e from aborting.
|
|
sudo virsh net-autostart default 2>/dev/null || true
|
|
|
|
log "Adding $USER to libvirt and kvm groups..."
|
|
# Membership in libvirt allows managing VMs without sudo; kvm grants direct
|
|
# access to /dev/kvm for hardware acceleration. Group changes only apply
|
|
# after the user logs out and back in.
|
|
sudo usermod -aG libvirt,kvm "$USER"
|
|
log "QEMU/KVM installed. Log out and back in for group membership to take effect."
|