5 Commits
main ... main

Author SHA1 Message Date
8c96623ad7 make selection or URI options for qemu more robust. Allow the user to just use Enter
Only allow selection of files that starts with virtual (this script is only used to deploy virtual machine)

Reworked some comments
2025-06-15 14:32:46 +02:00
358e67a041 remove whitespace 2025-06-15 14:31:00 +02:00
3b4724cf86 Removing information to the user when script goes through. 2025-06-15 14:30:48 +02:00
684a49af14 no need to echo when it succeeds 2025-06-15 14:30:00 +02:00
e1207278a3 Add possibility to pick URI, from session to system 2025-06-08 11:51:15 +02:00
4 changed files with 50 additions and 19 deletions

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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
echo "Sufficient memory available. System has ${total_memory_mb}MiB of RAM."
fi fi