diff --git a/hdd_vdi_create.sh b/hdd_vdi_create.sh new file mode 100644 index 0000000..c3c1dcf --- /dev/null +++ b/hdd_vdi_create.sh @@ -0,0 +1,188 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.4 +# 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 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_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 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" + 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 + +COLUMNS=8 +PS3='Please enter your choice: ' +OPTIONS=("Ubuntu 2204 SRV BASE" "Ubuntu 2204 GUI BASE" "Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") +select opt in "${OPTIONS[@]}" +do + case $opt in + "Ubuntu 2204 SRV BASE") + VAR_OS="Ubuntu_64" + VAR_VDI="ubu2204-SRV-BASE.vdi" + ;; + "Ubuntu 2204 GUI BASE") + VAR_OS="Ubuntu_64" + VAR_VDI="ubu2204-GUI-BASE.vdi" + ;; + "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} + read -p "Anzahl der zusätzlichen HDDs (Standard: 0): " VAR_ADDITIONAL_HDD + VAR_ADDITIONAL_HDD=${VAR_ADDITIONAL_HDD:-0} + + # Variablen + VAR_PATH_TO_VDI="/srv/data/VDI" + VAR_VIDEO_RAM=64 + VAR_RDP_PORT=339 + VAR_NIC1="Nat" + VAR_NIC2="bridged" + VAR_NET_INTERFACE="enp4s0f1" + + # Schleife zur Erzeugung der VMs für jeden Benutzer in der Gruppe + for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" + do + # VM erstellen + sudo -u "$VAR_USER_IN_GROUP" VBoxManage createvm \ + --name "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "/srv/vbox/$VAR_USER_IN_GROUP" + + # VM-Konfigurieren + sudo -u "$VAR_USER_IN_GROUP" VBoxManage modifyvm "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ + --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" + + # Festplattencontroller hinzufügen + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storagectl "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # Klonen der Festplatte und Registrieren (in Hintergrundprozessen) + { + sudo -u "$VAR_USER_IN_GROUP" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk00.vdi" + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ + --storagectl "SATA Controller" \ + --port 0 \ + --device 0 \ + --type hdd \ + --medium "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk00.vdi" + } & + + # Erzeugen und Zuweisen zusätzlicher Festplatten (HDDs) + for ((i = 1; i <= VAR_ADDITIONAL_HDD; i++)) + do + HDD_NUM=$(printf "%02d" $i) + sudo -u "$VAR_USER_IN_GROUP" VBoxManage createhd \ + --filename "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk$HDD_NUM.vdi" \ + --size 102400 \ + --format VDI + sudo -u "$VAR_USER_IN_GROUP" VBoxManage storageattach "${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}" \ + --storagectl "SATA Controller" \ + --port $i \ + --device 0 \ + --type hdd \ + --medium "/srv/vbox/$VAR_USER_IN_GROUP/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}/${VAR_NAME_PREFIX}-${VAR_USER_IN_GROUP}-disk$HDD_NUM.vdi" + done + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + echo "VMs wurden für alle Mitglieder der Gruppe erstellt, Festplatten geklont und registriert." + break +done +