diff --git a/deploy-vm.sh b/deploy-vm.sh new file mode 100755 index 0000000..07659d6 --- /dev/null +++ b/deploy-vm.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Function to execute a script +execute_script() { + local script_to_execute="$1" + echo "Executing: $script_to_execute" + "$script_to_execute" || { + echo "Script failed: $script_to_execute" + return 1 # Indicate failure + } + return 0 # Indicate success +} + +# Array of scripts +scripts=( + "./scripts/core-count.sh" + "./scripts/system-memory.sh" + "./scripts/deploy-distro.sh" +) + +# Iterate through the scripts and execute them +for script in "${scripts[@]}"; do + execute_script "$script" +done + +echo "All scripts executed." \ No newline at end of file diff --git a/scripts/core-count.sh b/scripts/core-count.sh new file mode 100755 index 0000000..fa3d478 --- /dev/null +++ b/scripts/core-count.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Get the core count using nproc --all +core_count=$(nproc --all) + +# Check if nproc --all returns a numerical value greater than 2 +if (( core_count > 1 )); then + echo "System has more than 1 core (nproc --all: $core_count)." +else + echo "Warning: System has only $core_count core)." + echo "The script requires at least two cores" + exit 1 # Exit with an error code to indicate the condition is not met +fi diff --git a/scripts/deploy-distro.sh b/scripts/deploy-distro.sh new file mode 100755 index 0000000..00bc0ed --- /dev/null +++ b/scripts/deploy-distro.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Get a list of files in the directory dishes without extensions +mapfile -t dish_name < <(find "dishes/" -maxdepth 1 -type f -printf "%f\n" | sed 's/\.[^.]*$//') + +# Check if there are any files +if [ ${#dish_name[@]} -eq 0 ]; then + echo "No files found in the directory ../dishes." + exit 1 +fi + +# Display the files with numbered options +echo "Available files:" +for i in "${!dish_name[@]}"; do + echo "$((i + 1)). ${dish_name[$i]}" +done + +# Prompt the user to select a file +read -r -p "Enter the number of the file you want to select: " choice + +# Validate the user's choice +if ! [[ "$choice" =~ ^[0-9]+$ ]] || (( choice < 1 )) || (( choice > ${#dish_name[@]} )); then + echo "Invalid choice. Please enter a number from 1 to ${#dish_name[@]}." + exit 1 +fi + +# Get the selected filename +vm_name="${dish_name[$((choice - 1))]}" + +# Output the selected filename +echo "You selected: $vm_name" + +# virt-install command with user-defined VM name +virt-install \ + --connect qemu:///system \ + --os-variant fedora41 \ + --virt-type kvm \ + --arch x86_64 \ + --machine q35 \ + --name "$vm_name" \ + --boot uefi \ + --cpu host-model,topology.sockets=1,topology.cores=2,topology.threads=1 \ + --vcpus 2 \ + --memory 2048 \ + --video virtio \ + --autoconsole none \ + --console pty,target.type=virtio \ + --sound none \ + --network type=user,model=virtio \ + --controller type=virtio-serial \ + --controller type=usb,model=none \ + --controller type=scsi,model=virtio-scsi \ + --input type=keyboard,bus=virtio \ + --input type=tablet,bus=virtio \ + --rng /dev/urandom,model=virtio \ + --disk path=/var/lib/libvirt/images/"$vm_name".img,format=raw,bus=virtio,cache=writeback,size=10 \ + --location=https://download.fedoraproject.org/pub/fedora/linux/releases/42/Everything/x86_64/os/ \ + --initrd-inject "dishes/$vm_name".cfg --extra-args "inst.ks=file:dishes/$vm_name.cfg" + +echo "virt-install command executed with VM name: $vm_name" \ No newline at end of file diff --git a/scripts/system-memory.sh b/scripts/system-memory.sh new file mode 100755 index 0000000..9a2e7a8 --- /dev/null +++ b/scripts/system-memory.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Read the total memory from /proc/meminfo in MiB +total_memory=$(awk '/MemTotal/ {print $2}' /proc/meminfo) + +# Convert to MiB by dividing by 1024 (since MemTotal is in KiB) +total_memory_mb=$(( total_memory / 1024 )) + +if [[ "$total_memory_mb" -lt "2048" ]]; then + echo "Not enough RAM: The system has only ${total_memory_mb}MiB of RAM, but at least 2048 MiB is required." + exit 1 +else + echo "Sufficient memory available. System has ${total_memory_mb}MiB of RAM." +fi