#!/bin/bash clear # Funktion zum Überprüfen der Benutzerexistenz check_user_existence() { local user_name="$1" if ! grep -q "^$user_name:" /etc/passwd; then echo "Der Benutzer $user_name existiert nicht auf diesem System." exit 1 fi } # Funktion, um einen zufälligen Host-Namen aus der Liste auszuwählen get_random_name() { # Liste der Namen in Kleinbuchstaben local names=("frodo" "samweis" "gandalf" "aragorn" "legolas" "gimli" "boromir" "meriadoc" "peregrin" "arwen" "galadriel" "celeborn" "elrond" "glorfindel" "faramir" "eowyn" "theoden" "treebeard" "gollum" "sauron" "saruman" "bilbo" "denethor" "radagast" "thranduil" "bard" "fíli" "kíli" "dori" "frodo") # Zufälligen Index auswählen local random_index=$((RANDOM % ${#names[@]})) echo "${names[random_index]}" } # Funktion zum Erzeugen der VirtualBox-VMs und Zuweisen von Festplatten create_vms_and_attach_hdds() { local VAR_USER="$1" local VAR_HOST="$2" local VAR_OS="$3" local VAR_HDD="$4" local VAR_QUAN="$5" for N in $(seq 1 "$VAR_QUAN"); do ORDER_NUM=$(printf "%02d" "$N") # VM erstellen sudo -u "$VAR_USER" VBoxManage createvm \ --name "${VAR_HOST}-${ORDER_NUM}" \ --ostype "$VAR_OS" \ --register # VM konfigurieren sudo -u "$VAR_USER" VBoxManage modifyvm "${VAR_HOST}-${ORDER_NUM}" \ --ioapic on \ --cpus "${VAR_CPU}" \ --memory "${VAR_MEM}" \ --vram "${VAR_VID}" \ --graphicscontroller vmsvga \ --nic1 Nat \ --nic2 "${VAR_NIC}" \ --bridgeadapter2 "${VAR_NET}" \ --vrde on \ --vrdemulticon on \ --vrdeport "${VAR_RDP}${ORDER_NUM}" sudo -u $VAR_USER VBoxManage storagectl ${VAR_HOST}-${ORDER_NUM} \ --name "SATA Controller" \ --add sata \ --controller IntelAhci # HDDs erzeugen und zuweisen for j in $(seq 1 "$VAR_HDD"); do HDD_NUM=$(printf "%02d" "$j") sudo -u "$VAR_USER" VBoxManage createhd \ --filename "${VAR_VB}/${VAR_HOST}-${ORDER_NUM}/${VAR_HOST}-${ORDER_NUM}_DISK${HDD_NUM}.vdi" \ --size 102400 \ --format VDI sudo -u "$VAR_USER" VBoxManage storageattach "${VAR_HOST}-${ORDER_NUM}" \ --storagectl "SATA Controller" \ --port "$j" \ --device 0 \ --type hdd \ --medium "${VAR_VB}/${VAR_HOST}-${ORDER_NUM}/${VAR_HOST}-${ORDER_NUM}_DISK${HDD_NUM}.vdi" done done } clear echo "Für wen soll es sein?" echo COLUMNS=10 PS3="Ihre Auswahl: " options=("Aktueller Benutzer" "Anderer Benutzer" "Beenden") select opt in "${options[@]}"; do case $opt in "Aktueller Benutzer") VAR_USER=$(whoami) ;; "Anderer Benutzer") read -p "Bitte geben Sie einen Benutzernamen ein: " user_name check_user_existence "$user_name" VAR_USER="$user_name" ;; "Beenden") exit ;; esac break done # Variable für den User VAR_VB="/srv/vbox/${VAR_USER}" clear echo "Welches Betriebssystem soll installiert werden?" echo COLUMNS=10 PS3="Bitte Ihre Auswahl eingeben: " declare -A OS_MAP OS_MAP=( ["Ubuntu LTS SRV"]="Ubuntu_64 ubuntu-*-live-server-amd64.iso" ["Ubuntu LTS GUI"]="Ubuntu_64 ubuntu-*-desktop-amd64.iso" ["Debian"]="Debian_64 debian-*.iso" ["RHEL"]="Linux_64 rhel-*.iso" ["Fedora"]="Linux_64 Fedora-*.iso" ["kali-linux"]="Linux_64 kali-linux-*.iso" ["linuxmint"]="Linux_64 linuxmint-*.iso" ["openSuse"]="Linux_64 openSUSE-*.iso" ["Manjaro"]="Linux_64 manjaro-xfce-*.iso" ["Quit"]="Quit" ) select opt in "${!OS_MAP[@]}"; do case $opt in "Quit") exit ;; *) VAR_OS="${OS_MAP[$opt]%% *}" # Extrahiere den ersten Teil (Betriebssystem) VAR_ISO="${OS_MAP[$opt]#* }" # Extrahiere den zweiten Teil (ISO-Muster) ;; esac default_name=$(get_random_name) # Benutzereingabe für VM-Konfiguration read -p "Geben Sie die Anzahl der VMs an (Standard: 1): " VAR_QUAN read -p "Praefix Host Name (Vorgabe: $default_name): " VAR_HOST read -p "CPUs (Standard: 1 CPU): " VAR_CPU read -p "Memory (Standard: 2048 MB-RAM) : " VAR_MEM read -p "Bitte die Anzahl der HDD (Standard: 1-HDD) : " VAR_HDD # Variablen: IFS=" " # Standardwerte festlegen, wenn keine Eingabe erfolgt VAR_CPU=${VAR_CPU:-1} VAR_MEM=${VAR_MEM:-2048} VAR_VID=64 VAR_RDP=339 VAR_NIC=bridged #VAR_NET=enp4s0f1 VAR_NET=$(ip addr show | grep "2: " | awk '{print $2}' | sed 's/://') VAR_QUAN=1 VAR_HDD=1 VAR_HOST=${VAR_HOST:-$default_name} create_vms_and_attach_hdds "$VAR_USER" "$VAR_HOST" "$VAR_OS" "$VAR_HDD" "$VAR_QUAN" break done