#!/bin/bash # Autor: Branislav Zeljak v0.1 # Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. # Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. clear VAR_USER=$(whoami) # %--------------------start/Funktionen--------------------% # Funktion zum Überprüfen der Benutzerexistenz check_user_existence() { local VAR_USER="$1" if ! grep -q "^$VAR_USER:" /etc/passwd; then echo "Der Benutzer $VAR_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 } # %--------------------end/Funktionen--------------------% echo "User / Passwort: $VAR_USER/Start1234" echo "Welches VDI-OS soll installiert werden" echo echo "Für wenn soll es sein?" echo COLUMNS=10 PS3="Ihre Auswahl: " options=("Aktueller Benutzer" "Anderer Benutzer" "Mitglieder der Gruppe" "Beenden") select opt in "${options[@]}" do case $opt in "Aktueller Benutzer") VAR_USER=$(whoami) ;; "Anderer Benutzer") read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER if grep -q "^$VAR_USER:" /etc/passwd; then echo "Der Benutzer $VAR_USER existiert auf diesem System." else echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." exit 1 fi ;; "Mitglieder der Gruppe") read -p "Bitte den Gruppennamen eingeben: " VAR_GROUP ;; "Beenden") exit ;; esac break done COLUMNS=8 PS3='Please enter your choice: ' OPTIONS=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") select opt in "${OPTIONS[@]}" do case $opt in "Ubuntu 2204 SRV") VAR_OS="Ubuntu_64" VAR_VDI="ubu2204-SRV.vdi" ;; "Ubuntu 2204 GUI") VAR_OS="Ubuntu_64" VAR_VDI="ubu2204-GUI.vdi" ;; *) echo "Invalid option $REPLY" ;; esac # Benutzereingaben read -p "Wie viele VMs werden benötigt? [1]: " VAR_QUANTITY VAR_QUANTITY=${VAR_QUANTITY:-1} read -p "Präfix Host Name: " VAR_NAME_PREFIX read -p "CPUs [2]: " VAR_CPU VAR_CPU=${VAR_CPU:-2} read -p "Memory [2048]: " VAR_MEM VAR_MEM=${VAR_MEM:-2048} # Variablen VAR_PATH_TO_VDI="/srv/data/VDI" VAR_VBOX_DIR="/srv/vbox/$VAR_USER" VAR_VIDEO_RAM=64 VAR_RDP_PORT=339 VAR_NIC1="Nat" VAR_NIC2="bridged" VAR_NET_INTERFACE="enp4s0f1" # Benutzer in der Gruppe abrufen GROUP_USERS=($(get_group_users "$VAR_GROUP")) if [[ "${#GROUP_USERS[@]}" -eq 0 ]]; then echo "Die Gruppe $VAR_GROUP existiert nicht oder hat keine Mitglieder." exit 1 fi # Schleife zur Erzeugung der VMs for GROUP_USER in "${GROUP_USERS[@]}" do check_user_existence "$GROUP_USER" for VAR_N in $(seq 1 $VAR_QUANTITY) do # VM erstellen sudo -u "$GROUP_USER" VBoxManage createvm \ --name "${VAR_NAME_PREFIX}-${VAR_N}" \ --ostype "$VAR_OS" \ --register \ --basefolder "/srv/vbox/$GROUP_USER" # VM-Konfigurieren sudo -u "$GROUP_USER" VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_N}" \ --ioapic on \ --memory "$VAR_MEM" \ --cpus="$VAR_CPU" \ --vram "$VAR_VIDEO_RAM" \ --nic1 "$VAR_NIC1" \ --graphicscontroller vmsvga \ --nic2 "$VAR_NIC2" \ --bridgeadapter2 "$VAR_NET_INTERFACE" \ --vrde on \ --vrdemulticon on \ --vrdeport "$VAR_RDP_PORT${VAR_N}" # Festplattencontroller hinzufügen sudo -u "$GROUP_USER" VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_N}" \ --name "SATA Controller" \ --add sata \ --controller IntelAhci # Klonen der Festplatte (in Hintergrundprozessen) { sudo -u "$GROUP_USER" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "/srv/vbox/$GROUP_USER/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" } & done done # Warten auf das Ende der Hintergrundprozesse wait # Anhängen der geklonten Festplatte for GROUP_USER in "${GROUP_USERS[@]}" do for VAR_N in $(seq 1 $VAR_QUANTITY) do sudo -u "$GROUP_USER" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_N}" \ --storagectl "SATA Controller" \ --port 0 \ --device 0 \ --type hdd \ --medium "/srv/vbox/$GROUP_USER/${VAR_NAME_PREFIX}-${VAR_N}/${VAR_NAME_PREFIX}-${VAR_N}-disk0.vdi" done done # Schleife beenden break done echo "VMs wurden erstellt und Festplatten geklont."