diff --git a/grp_vdi_create.sh b/grp_vdi_create.sh deleted file mode 100755 index 78667b4..0000000 --- a/grp_vdi_create.sh +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/bash - -# Autor: Branislav Zeljak v0.1 -# Script wurde mit hilfe von OpenAI KI erstellt. -# 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" "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_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 (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}-disk0.vdi" - } & - done - - # Warten auf das Ende der Hintergrundprozesse - wait - - # Anhängen der geklonten Festplatte - for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" - do - 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}-disk0.vdi" - done - - # Schleife beenden - break -done - -echo "VMs wurden für alle Mitglieder der Gruppe erstellt und Festplatten geklont." diff --git a/neu_grp_vdi.sh b/neu_grp_vdi.sh new file mode 100644 index 0000000..38bdbd3 --- /dev/null +++ b/neu_grp_vdi.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.3 +# 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 VAR_USER="$1" + if ! grep -q "^$VAR_USER:" /etc/passwd; then + echo "Der Benutzer $VAR_USER existiert nicht auf diesem System." + exit 1 + fi +} + +# %--------------------end/Funktionen--------------------% + +echo "User / Passwort: $USER/Start1234" +echo "Welches VDI-OS soll installiert werden" +echo + +# Definieren Sie die verfügbaren Betriebssysteme hier +declare -A VAR_OS_OPTIONS=( + ["Ubuntu 2204 GUI BASE"]="Ubuntu_64 ubu2204-GUI-BASE.vdi" + ["Ubuntu 2204 SRV BASE"]="Ubuntu_64 ubu2204-SRV-BASE.vdi" + ["Ubuntu 2204 GUI"]="Ubuntu_64 ubu2204-GUI.vdi" + ["Ubuntu 2204 SRV"]="Ubuntu_64 ubu2204-SRV.vdi" + ["Quit"]="Quit" +) + +# Auswählen und Konfigurieren des Betriebssystems +COLUMNS=10 +PS3="Ihre Auswahl: " +select VAR_OPT in "${!VAR_OS_OPTIONS[@]}" +do + case $VAR_OPT in + "Quit") + exit + ;; + *) + IFS=" " read -ra VAR_OS_INFO <<< "${VAR_OS_OPTIONS[$VAR_OPT]}" + VAR_OS="${VAR_OS_INFO[0]}" + VAR_VDI="${VAR_OS_INFO[1]}" + ;; + esac + + # Benutzerauswahl + echo "Für wen soll es sein?" + echo + COLUMNS=10 + PS3="Ihre Auswahl: " + VAR_OPTIONS=("Aktueller Benutzer" "Anderer Benutzer" "Mitglieder einer Gruppe" "Beenden") + select VAR_USER_OPT in "${VAR_OPTIONS[@]}" + do + case $VAR_USER_OPT in + "Aktueller Benutzer") + VAR_USER="$USER" + ;; + "Anderer Benutzer") + read -p "Bitte geben Sie einen Benutzernamen ein: " VAR_USER + check_user_existence "$VAR_USER" + ;; + "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:" + getent group "$VAR_GROUP" | cut -d: -f4 | tr ',' '\n' + VAR_MEMBERS=($(getent group "$VAR_GROUP" | cut -d: -f4 | tr ',' '\n')) + 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: ' + VAR_OPTIONS=("CPUs [2]" "Memory [2048]" "Continue") + select VAR_CONFIG_OPT in "${VAR_OPTIONS[@]}" + do + case $VAR_CONFIG_OPT in + "CPUs [2]") + read -p "CPUs [2]: " VAR_CPU + VAR_CPU=${VAR_CPU:-2} + ;; + "Memory [2048]") + read -p "Memory [2048]: " VAR_MEM + VAR_MEM=${VAR_MEM:-2048} + ;; + "Continue") + break + ;; + esac + done + + # 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 + for VAR_MEMBER in "${VAR_MEMBERS[@]}" + do + # VM erstellen + sudo -u "$VAR_MEMBER" VBoxManage createvm \ + --name "${VAR_OS}-${VAR_MEMBER}" \ + --ostype "$VAR_OS" \ + --register \ + --basefolder "/srv/vbox/$VAR_MEMBER" + + # VM-Konfigurieren + sudo -u "$VAR_MEMBER" VBoxManage modifyvm "${VAR_OS}-${VAR_MEMBER}" \ + --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_MEMBER" VBoxManage storagectl "${VAR_OS}-${VAR_MEMBER}" \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + # Klonen der Festplatte (in Hintergrundprozessen) + { + sudo -u "$VAR_MEMBER" VBoxManage clonehd "${VAR_PATH_TO_VDI}/${VAR_VDI}" "/srv/vbox/$VAR_MEMBER/${VAR_OS}-${VAR_MEMBER}/${VAR_OS}-${VAR_MEMBER}-disk0.vdi" + } & + done + + # Warten auf das Ende der Hintergrundprozesse + wait + + # Anhängen der geklonten Festplatte + for VAR_MEMBER in "${VAR_MEMBERS[@]}" + do + sudo -u "$VAR_MEMBER" VBoxManage storageattach "${VAR_OS}-${VAR_MEMBER}" \ + --storagectl "SATA Controller" \ + --port 0 \ + --device 0 \ + --type hdd \ + --medium "/srv/vbox/$VAR_MEMBER/${VAR_OS}-${VAR_MEMBER}/${VAR_OS}-${VAR_MEMBER}-disk0.vdi" + done + + # Schleife beenden + break +done + +echo "VMs wurden für alle Mitglieder der Gruppe erstellt und Festplatten geklont." diff --git a/neu_vbox_create.sh b/neu_vbox_create.sh new file mode 100644 index 0000000..d5ba197 --- /dev/null +++ b/neu_vbox_create.sh @@ -0,0 +1,185 @@ +#!/bin/bash + +# Autor: Branislav Zeljak v0.6 +# 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 VAR_USER="$1" + if ! grep -q "^$VAR_USER:" /etc/passwd; then + echo "Der Benutzer $VAR_USER 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 + 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]}" +} + +# %--------------------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_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:" + getent group "$VAR_GROUP" | cut -d: -f4 | tr ',' '\n' + members=($(getent group "$VAR_GROUP" | cut -d: -f4 | tr ',' '\n')) + else + echo "Die Gruppe $VAR_GROUP existiert nicht auf diesem System." + exit 1 + fi + ;; + "Beenden") + exit + ;; + esac + break +done + +# Variable für den User +VAR_VB="/srv/vbox" + +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"]="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" +) + +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_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} + + # Schleife zur Erzeugung der VMs für Gruppenmitglieder + for member in "${members[@]}" + do + for N in $(seq 1 $VAR_QUAN) + do + ORDER_NUM=$(printf "%02d" $N) # Zweistellige Ordnungszahl generieren + sudo -u $member VBoxManage createvm \ + --name ${VAR_NAME}-${ORDER_NUM} \ + --ostype ${VAR_OS} \ + --register + + sudo -u $member 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 $member VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "SATA Controller" \ + --add sata \ + --controller IntelAhci + + sudo -u $member VBoxManage storagectl ${VAR_NAME}-${ORDER_NUM} \ + --name "IDE Controller" \ + --add ide \ + --controller PIIX4 + + sudo -u $member VBoxManage storageattach ${VAR_NAME}-${ORDER_NUM} \ + --storagectl "IDE Controller" \ + --port 1 \ + --device 0 \ + --type dvddrive \ + --medium ${VAR_PATH}${VAR_ISO} + + # HDD erzeugen und zuweisen + for j in $(seq 1 ${VAR_HDD}) + do + HDD_NUM=$(printf "%02d" $j) + sudo -u $member VBoxManage createhd \ + --filename ${VAR_VB}/${VAR_NAME}-${ORDER_NUM}/${VAR_NAME}-${ORDER_NUM}_DISK${HDD_NUM}.vdi \ + --size 102400 \ + --format VDI + sudo -u $member 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 + echo "VMs wurden erstellt und Festplatten geklont." + break +done diff --git a/vdi_create.sh b/vdi_create.sh index 754ed03..268c252 100755 --- a/vdi_create.sh +++ b/vdi_create.sh @@ -1,168 +1,177 @@ #!/bin/bash -# -# @Branislav Zeljak v0.1 -# -# Create VBox -user=$(whoami) + +# Autor: Branislav Zeljak v0.1 +# Script wurde mit hilfe von OpenAI KI erstellt. +# Beschreibung: Dieses Skript erstellt VirtualBox-VMs und klonet Festplatten parallel. +# Verwendung: Führen Sie das Skript aus und befolgen Sie die Eingabeaufforderungen. clear -echo User / Passwort "user00/Start1234" -echo "Welches VDI-OS soll Installiert werden" + +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 -COLUMNS=8 -PS3='Please enter your choice: ' -options=("Ubuntu 2204 SRV" "Ubuntu 2204 GUI" "Quit") + +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 - "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" - ;; + "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 -# Eingabe Auffoderung -read -p "Wievile VMs werden benoetigt? [1]: " VAR_QUAN -read -p "Praefix Host Name : " VAR_NAME -read -p "CPUs [1]: " VAR_CPU -read -p "Memory [2048] : " VAR_MEM + # 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: -IFS=" -" + # 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" -VAR_PATH="/srv/data/VDI" -VAR_VB="/srv/vbox/${user}" + # 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" -VAR_CPU=${VAR_CPU:-1} -VAR_MEM=${VAR_MEM:-1024} -VAR_VID=64 -VAR_RDP=339 -VAR_NIC=bridged -VAR_NET=enp4s0f1 + # 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" -# Schleife -for N in $(seq 1 $VAR_QUAN) -do - VBoxManage createvm \ - --name ${VAR_NAME}-${N} \ - --ostype ${VAR_OS} \ - --register \ - --basefolder ${VAR_VB} + # 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 - VBoxManage modifyvm ${VAR_NAME}-${N} \ - --ioapic on \ - --memory ${VAR_MEM} \ - --cpus=${VAR_CPU} \ - --vram ${VAR_VID} \ - --nic1 Nat \ - --graphicscontroller vmsvga \ - --nic2 ${VAR_NIC} \ - --bridgeadapter2 ${VAR_NET} \ - --vrde on \ - --vrdemulticon on \ - --vrdeport ${VAR_RDP}${N} - - VBoxManage storagectl ${VAR_NAME}-${N} \ - --name "SATA Controller" \ - --add sata \ - --controller IntelAhci + # Klonen der Festplatte (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}-disk0.vdi" + } & done -# Damit das Clonen der HDDs paralell vorgenommen wird. -#echo > clonehd.txt + # Warten auf das Ende der Hintergrundprozesse + wait -for N in $(seq 1 $VAR_QUAN) -do - -echo "VBoxManage clonehd ${VAR_PATH}/${VAR_VDI} ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk0.vdi" >> clonehd.txt + # Anhängen der geklonten Festplatte + for VAR_USER_IN_GROUP in "${GROUP_MEMBERS[@]}" + do + 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}-disk0.vdi" + done + # Schleife beenden + break done -cat clonehd.txt | parallel - - -for N in $(seq 1 $VAR_QUAN) -do - VBoxManage createhd \ - --filename ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk1.vdi \ - --size 102400 \ - --format VDI - - VBoxManage createhd \ - --filename ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk2.vdi \ - --size 102400 \ - --format VDI - - VBoxManage createhd \ - --filename ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk3.vdi \ - --size 102400 \ - --format VDI - - VBoxManage createhd \ - --filename ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk4.vdi \ - --size 102400 \ - --format VDI - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "SATA Controller" \ - --port 0 \ - --device 0 \ - --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk0.vdi - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "SATA Controller" \ - --port 1 \ - --device 0 \ - --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk1.vdi - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "SATA Controller" \ - --port 2 \ - --device 0 \ - --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk2.vdi - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "SATA Controller" \ - --port 3 \ - --device 0 \ - --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk3.vdi - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "SATA Controller" \ - --port 4 \ - --device 0 \ - --type hdd \ - --medium ${VAR_VB}/${VAR_NAME}-${N}/${VAR_NAME}-${N}-disk4.vdi - - VBoxManage storagectl ${VAR_NAME}-${N} \ - --name "IDE Controller" \ - --add ide \ - --controller PIIX4 - - VBoxManage storageattach ${VAR_NAME}-${N} \ - --storagectl "IDE Controller" \ - --port 1 \ - --device 0 \ - --type dvddrive \ - --medium /usr/lib/virtualbox/additions/VBoxGuestAdditions.iso - - VBoxManage modifyvm ${VAR_NAME}-${N} \ - --boot1 disk \ - --boot2 none \ - --boot3 none \ - --boot4 none - done -break -done -rm /srv/data/GIT/Virtualbox/clonehd.txt +echo "VMs wurden für alle Mitglieder der Gruppe erstellt und Festplatten geklont."