forked from roots/phyllomeos
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8c2b118c8e | ||
|
dd41bcb66b | ||
|
e9e70c6ce3 | ||
|
6a043dcd3d | ||
|
cf3ff84a6d | ||
|
46bbe1d5e9 | ||
|
b98f41512d | ||
|
8c96623ad7 | ||
|
358e67a041 | ||
|
3b4724cf86 | ||
|
684a49af14 | ||
|
e1207278a3 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.aider*
|
@@ -17,7 +17,7 @@ chmod +x deploy-vm.sh
|
|||||||
|
|
||||||
Executing: ./scripts/core-count.sh
|
Executing: ./scripts/core-count.sh
|
||||||
System has more than 2 core (nproc --all: 6).
|
System has more than 2 core (nproc --all: 6).
|
||||||
[...]]
|
[...]
|
||||||
10. virtual-desktop-hypervisor
|
10. virtual-desktop-hypervisor
|
||||||
[...]
|
[...]
|
||||||
Enter the number of the file you want to select: 10
|
Enter the number of the file you want to select: 10
|
||||||
|
@@ -13,6 +13,7 @@ execute_script() {
|
|||||||
|
|
||||||
# Array of scripts
|
# Array of scripts
|
||||||
scripts=(
|
scripts=(
|
||||||
|
"./scripts/install-prerequisites-on-linux.sh"
|
||||||
"./scripts/core-count.sh"
|
"./scripts/core-count.sh"
|
||||||
"./scripts/system-memory.sh"
|
"./scripts/system-memory.sh"
|
||||||
"./scripts/deploy-distro.sh"
|
"./scripts/deploy-distro.sh"
|
@@ -2,16 +2,23 @@ services --enabled="NetworkManager,systemd-resolved,libvirtd" # Without libvirtd
|
|||||||
|
|
||||||
%packages --exclude-weakdeps # Beginning of the packages section. Does not include weak dependencies.
|
%packages --exclude-weakdeps # Beginning of the packages section. Does not include weak dependencies.
|
||||||
|
|
||||||
qemu-kvm
|
qemu-kvm # QEMU metapackage for KVM support
|
||||||
libvirt
|
libvirt # Library providing a simple virtualization API
|
||||||
libvirt-daemon-config-network
|
libvirt-client # Client side utilities of the libvirt library
|
||||||
libvirt-daemon-kvm
|
libvirt-client-qemu # Additional client side utilities for QEMU. Used to interact with some QEMU specific features of libvirt.
|
||||||
# libvirt-daemon-driver-lxc
|
libvirt-daemon # Server side daemon and supporting files for libvirt library
|
||||||
virt-install
|
libvirt-daemon-common # Miscellaneous files and utilities used by other libvirt daemons
|
||||||
virt-top
|
libvirt-daemon-config-network # Default configuration files for the libvirtd daemon. Provides NAT based networking
|
||||||
libguestfs-tools # Complementary tools useful for interacting with vith guest systems. Could probablby be removed
|
libvirt-daemon-driver-interface # Interface driver plugin for the libvirtd daemon
|
||||||
python3-libguestfs # Complementary tools useful for interacting with vith guest systems. Could probablby be removed
|
libvirt-daemon-driver-network # The network driver plugin for the libvirtd daemon, providing an implementation of the virtual network APIs using the Linux bridge capabilities.
|
||||||
guestfs-tools # Complementary tools useful for interacting with vith guest systems. Could probablby be removed
|
libvirt-daemon-driver-qemu # QEMU driver plugin for the libvirtd daemon
|
||||||
|
libvirt-daemon-kvm # Server side daemon & driver required to run KVM guests
|
||||||
|
libvirt-daemon-log # Server side daemon for managing logs
|
||||||
|
libvirt-daemon-qemu # Server side daemon and driver required to manage the virtualization capabilities of the QEMU TCG emulators
|
||||||
|
libvirt-nss # Libvirt plugin for Name Service Switch
|
||||||
|
libvirt-dbus # libvirt D-Bus API binding
|
||||||
|
libvirt-daemon-driver-ch # Cloud-Hypervisor driver plugin for libvirtd daemon
|
||||||
|
virt-install # Utilities for installing virtual machines
|
||||||
|
|
||||||
%end # End of the packages section
|
%end # End of the packages section
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@ zram-generator-defaults # Default configuration for zram-generator
|
|||||||
pciutils # PCI bus related utilities
|
pciutils # PCI bus related utilities
|
||||||
libusb # Library for accessing USB devices
|
libusb # Library for accessing USB devices
|
||||||
usbutils # Linux USB utilities
|
usbutils # Linux USB utilities
|
||||||
|
curl # transfer a URL
|
||||||
wget # An advanced file and recursive website downloader
|
wget # An advanced file and recursive website downloader
|
||||||
nano # A small text editor
|
nano # A small text editor
|
||||||
|
|
||||||
|
@@ -4,9 +4,7 @@
|
|||||||
core_count=$(nproc --all)
|
core_count=$(nproc --all)
|
||||||
|
|
||||||
# Check if nproc --all returns a numerical value greater than 2
|
# Check if nproc --all returns a numerical value greater than 2
|
||||||
if (( core_count > 2 )); then
|
if (( core_count < 2 )); then
|
||||||
echo "System has more than 2 core (nproc --all: $core_count)."
|
|
||||||
else
|
|
||||||
echo "Warning: System has only $core_count core)."
|
echo "Warning: System has only $core_count core)."
|
||||||
echo "The script requires at least four cores"
|
echo "The script requires at least four cores"
|
||||||
exit 1 # Exit with an error code to indicate the condition is not met
|
exit 1 # Exit with an error code to indicate the condition is not met
|
||||||
|
@@ -4,18 +4,18 @@
|
|||||||
DEFAULT_MEMORY=4096
|
DEFAULT_MEMORY=4096
|
||||||
DEFAULT_DISK_SIZE=10
|
DEFAULT_DISK_SIZE=10
|
||||||
|
|
||||||
# Prompt user for memory size
|
# Prompt user for VM memory size
|
||||||
read -r -p "Enter memory size in MB or press Enter to keep default value: $DEFAULT_MEMORY): " memory_size
|
read -r -p "Provide desired VM memory in MB or press Enter to keep default value of $DEFAULT_MEMORY MB): " memory_size
|
||||||
memory_size=${memory_size:-$DEFAULT_MEMORY}
|
memory_size=${memory_size:-$DEFAULT_MEMORY}
|
||||||
|
|
||||||
# Validate memory size
|
# Validate memory size
|
||||||
if ! [[ "$memory_size" =~ ^[0-9]+$ ]] || (( memory_size < 2048 )); then
|
if ! [[ "$memory_size" =~ ^[0-9]+$ ]] || (( memory_size < 2048 )); then
|
||||||
echo "Invalid memory size. Must be a number greater than or equal to 2048. Using default value of $DEFAULT_MEMORY."
|
echo "Invalid memory size. Must be a number greater than or equal to 2048. Using default value of $DEFAULT_MEMORY MB."
|
||||||
memory_size=$DEFAULT_MEMORY
|
memory_size=$DEFAULT_MEMORY
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prompt user for disk size
|
# Prompt user for VM disk size
|
||||||
read -r -p "Enter disk size in GB (default: $DEFAULT_DISK_SIZE): " disk_size
|
read -r -p "Provide desired disk size of VM in GB or press Enter to use default disk size of $DEFAULT_DISK_SIZE GB: " disk_size
|
||||||
disk_size=${disk_size:-$DEFAULT_DISK_SIZE}
|
disk_size=${disk_size:-$DEFAULT_DISK_SIZE}
|
||||||
|
|
||||||
# Validate disk size
|
# Validate disk size
|
||||||
@@ -24,8 +24,52 @@ if ! [[ "$disk_size" =~ ^[0-9]+$ ]] || (( disk_size < 10 )); then
|
|||||||
disk_size=$DEFAULT_DISK_SIZE
|
disk_size=$DEFAULT_DISK_SIZE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get a list of files in the directory dishes without extensions
|
# Set the choices
|
||||||
mapfile -t dish_name < <(find "dishes/" -maxdepth 1 -type f -printf "%f\n" | sed 's/\.[^.]*$//')
|
CHOICE_SYSTEM="qemu:///system"
|
||||||
|
CHOICE_SESSION="qemu:///session"
|
||||||
|
|
||||||
|
# Display the choices to the user
|
||||||
|
echo "Please select an option or press Enter to keep default value of $CHOICE_SESSION):"
|
||||||
|
echo "1) $CHOICE_SYSTEM (system-based or rootfull virtual machine)"
|
||||||
|
echo "2) $CHOICE_SESSION (session-based or rootless virtual machine)"
|
||||||
|
|
||||||
|
# Prompt the user for input
|
||||||
|
IFS= read -r -p "Enter your choice (1 or 2): " user_choice
|
||||||
|
|
||||||
|
# Validate the user's input
|
||||||
|
if [[ ! "$user_choice" =~ ^[12]$ ]]; then
|
||||||
|
echo "Invalid choice. Defaulting to session-based VM."
|
||||||
|
uri="$CHOICE_SESSION" # Default to session-based if input is invalid
|
||||||
|
else
|
||||||
|
# Determine the selected option
|
||||||
|
case "$user_choice" in
|
||||||
|
1)
|
||||||
|
uri="$CHOICE_SYSTEM"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
uri="$CHOICE_SESSION"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unexpected error: Invalid choice. This should not happen due to validation."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Conditional variable assignment based on URI
|
||||||
|
if [[ "$uri" == "qemu:///system" ]]; then
|
||||||
|
disk_path="/var/lib/libvirt/images/"
|
||||||
|
network_type="default"
|
||||||
|
elif [[ "$uri" == "qemu:///session" ]]; then
|
||||||
|
disk_path="$HOME/.local/share/libvirt/images/"
|
||||||
|
network_type="user"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display the selected option (optional)
|
||||||
|
echo "You selected: $uri"
|
||||||
|
|
||||||
|
# Get a list of files in "dishes" directory
|
||||||
|
mapfile -t dish_name < <(find "dishes/" -maxdepth 1 -type f \( -name "virtual*" \) -printf "%f\n" | sed 's/\.[^.]*$//')
|
||||||
|
|
||||||
# Check if there are any files
|
# Check if there are any files
|
||||||
if [ ${#dish_name[@]} -eq 0 ]; then
|
if [ ${#dish_name[@]} -eq 0 ]; then
|
||||||
@@ -56,7 +100,7 @@ echo "You selected: $vm_name"
|
|||||||
|
|
||||||
# virt-install command with user-defined VM name
|
# virt-install command with user-defined VM name
|
||||||
virt-install \
|
virt-install \
|
||||||
--connect qemu:///system \
|
--connect "$uri" \
|
||||||
--os-variant fedora41 \
|
--os-variant fedora41 \
|
||||||
--virt-type kvm \
|
--virt-type kvm \
|
||||||
--arch x86_64 \
|
--arch x86_64 \
|
||||||
@@ -70,15 +114,17 @@ virt-install \
|
|||||||
--channel unix,target.type=virtio,target.name=org.qemu.guest_agent.0 \
|
--channel unix,target.type=virtio,target.name=org.qemu.guest_agent.0 \
|
||||||
--autoconsole none \
|
--autoconsole none \
|
||||||
--console pty,target.type=virtio \
|
--console pty,target.type=virtio \
|
||||||
--sound none \
|
--sound virtio \
|
||||||
--network type=default,model=virtio \
|
--network type="$network_type",model=virtio \
|
||||||
--controller type=virtio-serial \
|
--controller type=virtio-serial \
|
||||||
--controller type=usb,model=none \
|
--controller type=usb,model=none \
|
||||||
--controller type=scsi,model=virtio-scsi \
|
--controller type=scsi,model=virtio-scsi \
|
||||||
--input type=keyboard,bus=virtio \
|
--input type=keyboard,bus=virtio \
|
||||||
--input type=tablet,bus=virtio \
|
--input type=mouse,bus=virtio \
|
||||||
--rng /dev/urandom,model=virtio \
|
--rng /dev/urandom,model=virtio \
|
||||||
--disk path=/var/lib/libvirt/images/"$vm_name".img,format=raw,bus=virtio,cache=writeback,size="$disk_size" \
|
--iommu model=virtio \
|
||||||
|
--memballoon none \
|
||||||
|
--disk path="${disk_path}/${vm_name}.img",format=raw,bus=virtio,cache=writeback,size="$disk_size" \
|
||||||
--location=https://download.fedoraproject.org/pub/fedora/linux/releases/42/Everything/x86_64/os/ \
|
--location=https://download.fedoraproject.org/pub/fedora/linux/releases/42/Everything/x86_64/os/ \
|
||||||
--initrd-inject ./dishes/"$vm_name".cfg \
|
--initrd-inject ./dishes/"$vm_name".cfg \
|
||||||
--extra-args "inst.ks=file:/$vm_name.cfg"
|
--extra-args "inst.ks=file:/$vm_name.cfg"
|
||||||
|
43
scripts/install-prerequisites-on-linux.sh
Executable file
43
scripts/install-prerequisites-on-linux.sh
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if virt-manager is already installed
|
||||||
|
if command -v virt-manager &> /dev/null; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Detect the Linux distribution
|
||||||
|
if [[ -f /etc/os-release ]]; then
|
||||||
|
. /etc/os-release
|
||||||
|
DISTRO="$ID"
|
||||||
|
else
|
||||||
|
echo "Unable to determine Linux distribution. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Detected distribution: $DISTRO"
|
||||||
|
|
||||||
|
# Install prerequisites based on distribution
|
||||||
|
case "$DISTRO" in
|
||||||
|
ubuntu|debian)
|
||||||
|
echo "Installing prerequisites for Debian/Ubuntu..."
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y qemu-system libvirt-daemon-system virt-manager
|
||||||
|
;;
|
||||||
|
fedora|rhel|centos)
|
||||||
|
echo "Installing prerequisites for Fedora/RHEL/CentOS..."
|
||||||
|
dnf install -y qemu-kvm libvirt virt-manager
|
||||||
|
;;
|
||||||
|
arch)
|
||||||
|
echo "Installing prerequisites for Arch Linux..."
|
||||||
|
pacman -S --noconfirm qemu-desktop libvirt virt-manager
|
||||||
|
;;
|
||||||
|
opensuse-tumbleweed)
|
||||||
|
echo "Installing prerequisites for openSUSE Tumbleweed..."
|
||||||
|
zypper -n install qemu libvirt virt-manager
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported distribution: $DISTRO. Manual installation required."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
@@ -9,6 +9,4 @@ total_memory_mb=$(( total_memory / 1024 ))
|
|||||||
if [[ "$total_memory_mb" -lt "4096" ]]; then
|
if [[ "$total_memory_mb" -lt "4096" ]]; then
|
||||||
echo "Not enough RAM: The system has only ${total_memory_mb}MiB of RAM, but at least 4096 is required."
|
echo "Not enough RAM: The system has only ${total_memory_mb}MiB of RAM, but at least 4096 is required."
|
||||||
exit 1
|
exit 1
|
||||||
else
|
fi
|
||||||
echo "Sufficient memory available. System has ${total_memory_mb}MiB of RAM."
|
|
||||||
fi
|
|
Reference in New Issue
Block a user