#!/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."