linutil/core/tabs/system-setup/arch/virtualization.sh

105 lines
3.3 KiB
Bash
Raw Normal View History

#!/bin/sh -e
. ../../common-script.sh
installQEMUDesktop() {
if ! command_exists qemu-img; then
printf "%b\n" "${YELLOW}Installing QEMU.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm qemu-desktop
else
printf "%b\n" "${GREEN}QEMU is already installed.${RC}"
fi
checkKVM
}
installQEMUEmulators() {
if ! "$PACKAGER" -Q | grep -q "qemu-emulators-full "; then
printf "%b\n" "${YELLOW}Installing QEMU-Emulators.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm qemu-emulators-full swtpm
else
printf "%b\n" "${GREEN}QEMU-Emulators already installed.${RC}"
fi
}
installVirtManager() {
if ! command_exists virt-manager; then
printf "%b\n" "${YELLOW}Installing Virt-Manager.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm virt-manager
else
printf "%b\n" "${GREEN}Virt-Manager already installed.${RC}"
fi
}
checkKVM() {
if [ ! -e "/dev/kvm" ]; then
printf "%b\n" "${RED}KVM is not available. Make sure you have CPU virtualization support enabled in your BIOS/UEFI settings. Please refer https://wiki.archlinux.org/title/KVM for more information.${RC}"
else
"$ESCALATION_TOOL" usermod "$USER" -aG kvm
fi
}
setupLibvirt() {
printf "%b\n" "${YELLOW}Configuring Libvirt.${RC}"
if "$PACKAGER" -Q | grep -q "iptables "; then
"$ESCALATION_TOOL" "$PACKAGER" -Rdd --noconfirm iptables
fi
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm dnsmasq iptables-nft
"$ESCALATION_TOOL" sed -i 's/^#\?firewall_backend\s*=\s*".*"/firewall_backend = "iptables"/' "/etc/libvirt/network.conf"
if systemctl is-active --quiet polkit; then
"$ESCALATION_TOOL" sed -i 's/^#\?auth_unix_ro\s*=\s*".*"/auth_unix_ro = "polkit"/' "/etc/libvirt/libvirtd.conf"
"$ESCALATION_TOOL" sed -i 's/^#\?auth_unix_rw\s*=\s*".*"/auth_unix_rw = "polkit"/' "/etc/libvirt/libvirtd.conf"
fi
"$ESCALATION_TOOL" usermod "$USER" -aG libvirt
for value in libvirt libvirt_guest; do
if ! grep -wq "$value" /etc/nsswitch.conf; then
"$ESCALATION_TOOL" sed -i "/^hosts:/ s/$/ ${value}/" /etc/nsswitch.conf
fi
done
"$ESCALATION_TOOL" systemctl enable --now libvirtd.service
"$ESCALATION_TOOL" virsh net-autostart default
checkKVM
}
installLibvirt() {
if ! command_exists libvirtd; then
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libvirt dmidecode
else
printf "%b\n" "${GREEN}Libvirt is already installed.${RC}"
fi
setupLibvirt
}
main() {
printf "%b\n" "${YELLOW}Choose what to install:${RC}"
printf "%b\n" "1. ${YELLOW}QEMU${RC}"
printf "%b\n" "2. ${YELLOW}QEMU-Emulators ( Extended architectures )${RC}"
printf "%b\n" "3. ${YELLOW}Libvirt${RC}"
printf "%b\n" "4. ${YELLOW}Virtual-Manager${RC}"
printf "%b\n" "5. ${YELLOW}All${RC}"
printf "%b" "Enter your choice [1-5]: "
read -r CHOICE
case "$CHOICE" in
1) installQEMUDesktop ;;
2) installQEMUEmulators ;;
3) installLibvirt ;;
4) installVirtManager ;;
5)
installQEMUDesktop
installQEMUEmulators
installLibvirt
installVirtManager
;;
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
esac
}
checkEnv
checkEscalationTool
main