#!/bin/bash # Autor: Branislav Zeljak v0.8 # Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. # Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. clear # %--------------------start/Funktionen--------------------% # Funktion zum Überprüfen der Benutzerexistenz check_user_existence() { local user="$1" if ! id "$user" &>/dev/null; then echo "Der Benutzer $user existiert nicht auf diesem System." exit 1 fi } get_group_users() { local groupname="$1" local members members=$(getent group "$groupname" | cut -d: -f4) if [[ -n "$members" ]]; then echo "$members" | tr ',' '\n' else echo "Die Gruppe $groupname existiert nicht oder hat keine Mitglieder." fi } # Funktion, um einen zufälligen Host-Namen aus der Liste auszuwählen get_random_name() { # Liste der Namen 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" "dori" "frodo") # Zufälligen Index auswählen local random_index=$((RANDOM % ${#names[@]})) echo "${names[random_index]}" } # %--------------------end/Funktionen--------------------% echo "Für wen soll es sein?" echo COLUMNS=10 PS3="Ihre Auswahl: " options=("Aktueller Benutzer" "Anderer Benutzer" "Mitglieder einer Gruppe" "Beenden") select opt in "${options[@]}" do case $opt in "Aktueller Benutzer") VAR_GROUP_MEMBERS=$(whoami) ;; "Anderer Benutzer") read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_GROUP_MEMBERS check_user_existence "$VAR_GROUP_MEMBERS" ;; "Mitglieder einer Gruppe") read -p "Bitte geben Sie den Gruppennamen ein: " VAR_GROUP if getent group "$VAR_GROUP" &>/dev/null; then echo "Mitglieder der Gruppe $VAR_GROUP:" get_group_users "$VAR_GROUP" VAR_GROUP_MEMBERS=($(get_group_users "$VAR_GROUP")) else echo "Die Gruppe $VAR_GROUP existiert nicht auf diesem System." exit 1 fi ;; "Beenden") exit ;; esac break done # Variable für das Verzeichnis VAR_VB="/srv/vbox/${VAR_GROUP_MEMBERS}" 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 BASE"]="Ubuntu_64 ubuntu-*-desktop-amd64.iso" ["Debian"]="Debian_64 debian-*.iso" ["RHEL"]="RedHat_64 rhel-*.iso" ["Fedora"]="Fedora_64 Fedora-*.iso" ["kali-linux"]="Linux_64 kali-linux-*.iso" ["linuxmint"]="Linux_64 linuxmint-*.iso" ["openSUSE"]="OpenSUSE_64 openSUSE-*.iso" ["Manjaro"]="ArchLinux_64 manjaro-xfce-*.iso" ["Quit"]="Quit" ) # Auswählen und Konfigurieren des Betriebssystems COLUMNS=10 PS3="Ihre Auswahl: " 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) # Schleife zur Erzeugung der VMs für die Benutzer aus der Gruppe for VAR_USER_IN_GROUP in "${VAR_GROUP_MEMBERS[@]}" do # 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_NAME read -p "CPUs (Standard: 2 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:-2} VAR_MEM=${VAR_MEM:-2048} VAR_VID=64 VAR_RDP=339 VAR_NIC=bridged VAR_NET=$(ip addr show | grep "^2: " | awk '{print $2}' | sed 's/://') VAR_NAME=${VAR_NAME:-$default_name} VAR_ISO_PATH=/srv/data/ISO/ # Schleife zur Erzeugung der VMs for N in $(seq 1 $VAR_QUAN) do ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren sudo -u $VAR_USER_IN_GROUP VBoxManage createvm \ --name ${VAR_NAME}-${ORDER_NUM} \ --ostype ${VAR_OS} \ --register \ sudo -u $VAR_USER_IN_GROUP VBoxManage modifyvm ${VAR_NAME}-${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_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ --name "SATA Controller" \ --add sata \ --controller IntelAhci sudo -u $VAR_USER_IN_GROUP VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ --name "IDE Controller" \ --add ide \ --controller PIIX4 sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ --storagectl "IDE Controller" \ --port 1 \ --device 0 \ --type dvddrive \ --medium ${VAR_ISO_PATH}${VAR_ISO} # HDD erzeugen und zuweisen for j in $(seq 1 ${VAR_HDD}) do HDD_NUM=$(printf "%02d" $j) sudo -u $VAR_USER_IN_GROUP VBoxManage createhd \ --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ --size 102400 \ --format VDI sudo -u $VAR_USER_IN_GROUP VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ --storagectl "SATA Controller" \ --port $j \ --device 0 \ --type hdd \ --medium ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi done done done break done