Skip to content

Commit

Permalink
Add Arch virtualization setup script
Browse files Browse the repository at this point in the history
  • Loading branch information
jeevithakannan2 committed Oct 13, 2024
1 parent 79eb752 commit b5520a3
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
106 changes: 106 additions & 0 deletions core/tabs/system-setup/arch/virtualization.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/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 ! pacman -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() {
hardware_avail="$(grep -E 'vmx|svm|0xc0f' /proc/cpuinfo)"
kernel_avail="$(zgrep CONFIG_KVM= /proc/config.gz | cut -d '=' -f 2)"
modules_avail="$(lsmod | grep kvm)"
if [ -z "$hardware_avail" ] || [ -z "$modules_avail" ] || { [ "$kernel_avail" != "m" ] && [ "$kernel_avail" != "y" ]; }; then
printf "%b\n" "${RED}KVM is not avaiable please refer https://wiki.archlinux.org/title/KVM for more information.${RC}"

Check warning on line 38 in core/tabs/system-setup/arch/virtualization.sh

View workflow job for this annotation

GitHub Actions / check-typos

"avaiable" should be "available".
else
"$ESCALATION_TOOL" usermod "$USER" -aG kvm
fi
}

setupLibvirt() {
printf "%b\n" "${YELLOW}Configuring Libvirt.${RC}"
if pacman -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
6 changes: 6 additions & 0 deletions core/tabs/system-setup/tab_data.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ description = "Paru is your standard pacman wrapping AUR helper with lots of fea
script = "arch/paru-setup.sh"
task_list = "I"

[[data.entries]]
name = "Virtualization"
description = "QEMU, Libvirt, Virt-Manager installation and configuration."
script = "arch/virtualization.sh"
task_list = "FM I SS RP"

[[data.entries]]
name = "Yay AUR Helper"
description = "Yet Another Yogurt - An AUR Helper Written in Go.\nTo know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers"
Expand Down
1 change: 1 addition & 0 deletions docs/userguide.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ For more information visit: https://christitus.com/linux-security-mistakes
- **Arch Server Setup**: This command installs a minimal arch server setup under 5 minutes.
- **Paru AUR Helper**: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction.
To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
- **Virtualization**: QEMU, Libvirt, Virt-Manager installation and configuration.
- **Yay AUR Helper**: Yet Another Yogurt - An AUR Helper Written in Go.
To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers

Expand Down

0 comments on commit b5520a3

Please sign in to comment.