|
|
@ -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,43 @@ 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
|
|
|
|
|
|
|
|
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 +91,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 +105,15 @@ 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" \
|
|
|
|
--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"
|
|
|
|